古いプログラムからも学ぶことがある...と思う。【英語版やってみました】http://taichiw-e.hatenablog.com/2020-01-13古いプログラムからも学ぶことがある...と思う。さんの聞き書き、「木のいのち木のこころ」を読んでいます。宮大工として過去の建造物の解体修理をしていると、過去の職人の仕事が見えてくるそうです。建築から1300年以上経ってもなお現存する、法隆寺の建築仕事の素晴らしさ。そこから時代が下った、室町や江戸時代に建てられた寺社を見ると、便利な道具が発明されたことや、華美な装飾やコストカット、早い完成が求められたことなどを背景に質が悪化している、ということが見えるそうです。そんな文章を読んでいるうち、まったくもって1300年という歴史はありませんが、「古いプログラム」に思いを馳せてみるのもいいかなぁと思いました。...ということで、「『10年くらい前のソースを読んでうわって思った』5年くらい前の私」の話です。当時私が担当していたアプリケーションの一部に、「Java1.4以前に書かれたんだなぁ」というソースコードが残っていました。現在のビルド環境、動作環境は最新のJDKが使われていますが、ソースの書き方が「ジェネリクスがなかった時代」の書き方なんですね。・クラスやメソッド名に意味がない。みたいなメソッド名が並んでる・メソッドでコレクションを引数として受け取る場合は、配列。ListやMapを引数に取らないの二点でした。当時は、「何この古臭い書き方...」「理解できない」「ク○コード」くらいにしか思っていませんでした。思い返してみると、今でも通用する設計上重要なエッセンスが含まれてるんです。クラス名やメソッド名が読めない、意味不明なものである、ということは、別でこれらの一覧を定義した仕様書があった*1ということです。仕様書があろうがなかろうが、読める名前にしたほうがいいのは間違いありません。初めにメソッドを定義してからコーディングに入るという考え方自体は、TDDなどにも見られるように今も重要な考え方だと思います。引数を配列で取る、というのは当時のJavaの言語仕様の範囲内でなるべく問題を起こさないためのテクニックだったようです。キャリアの長い先輩エンジニアから以前、教えていただきました。Java5でジェネリクスが導入される以前のJavaでは、ListやMapなどのコレクションの要素の「型(クラス)」を明示的に宣言する方法がありませんでした。そのため、コレクションへの要素の追加時と要素の取り出し時で異なるクラスを使ってもコンパイルエラーにはならず、実行時に例外が投げられたり、予測しない挙動をする、という危険がありました。これを防ぐため、メソッド間でコレクションを引き渡す場合、型の定義が可能な配列にあえて変換して引き渡すことで実行時エラーを回避する、というテクニックがあったそうです。APIの呼び出しで見られるような話ですね。いう話もあるようです。プログラム言語やフレームワークはどんどん進歩していますが、保守性が高い、読みやすいコードの要素というのは昔から変わっていないと思います。ときには「ふっっっるい」ソースコードを読んで、当時の人の考えに思いを馳せてみるのもおもしろいかもしれません。11:26古いプログラムからも学ぶことがある...と思う。#JavaDayTok...今年もJavaDayTokyoに参加させていただきました。「データしか持たないデータクラスは作らない...こちらの本を読んででのレポートです。今年もJavaDayTokyoに出席させていただきました。読者になる検索リンクはてなブログブログをはじめる週刊はてなブログはてなブログPro最新記事awkで特定の列を除外して出力するWindows10にOracleをインストールしようとしたらありがちな罠にハマった古いプログラムからも学ぶことがある...と思う。#rtechconf月別アーカイブ参加グループプログラミングインターネットテクノロジーはてなブログをはじめよう!taichiwさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。