言語の「中へ」のプログラミング
先日、Steve McConnell『Code Complete 完全なプログラミングを目指して 第2版(上)』を読み終わったのだが(この本のすばらしさについてはまた日を改めて書くとしよう)、この本の序盤にいい言葉がある。言語の「中へ」のプログラミング、だ。
プログラミング言語はそれぞれ特徴があり、ある言語で簡単に表現できることが、他の言語では難しかったりする。しかし、だからといって優れた手段を言語に振り回されて捨てたりせず、創意工夫して望む機能を実現しましょう、という考えだ(あってると思う・・・)。
例えば、Javaには列挙型が存在しなかった(Java5.0から追加された)。しかし、列挙型の使用はプログラミングのプラクティスとして非常に有用であったため、C言語などでその味をしめているJavaプログラマたちは列挙型をエミュレートするTypesafe Enumという技を編み出して、列挙型の恩恵を受けている(Joshua Bloch 『Effective Java』参照)。
これはおそらく、プログラミング言語以外にも拡張できる。
何が言いたいかというと、なんでお前らはbuild.xmlを書くと平気でコピペして数千行オーダーのファイルを作ってしまうんだよ?ってことだ。
プログラミングをするときはそれなりに気を遣うくせに(それもできないヤツもいるが)、なぜかbuild.xmlを書く場合は「同じことは二度書かないで、共通のデータや処理は分割してモジュール化しましょうね」というプログラマとしては超初心者レベルの知識すら吹っ飛んでしまうらしく、やたらと記述が重複しまくった、とにかく見苦しいファイルを書いてくる。
antのbuild.xmlがプログラミング言語とは別系統にあり、制御構文なんかが書きにくいことはよくよく分かっているが、だからといって適切なモジュール化、しいては保守性を放り投げるのは言語の「中で」のプログラミングだ。言語に振り回されている。antも1.6.5を数え、subantやimportといった、ビルドファイルの分割・モジュール化をサポートする機構を実装している。こいつは積極的に利用するべきであろう。ファイル間の関連を見つけにくいかもしれないが、それはプロジェクト名やプロパティ名に一定の規約を設けることで緩和できる。
プログラミングのプラクティスが教える数々の考え方は、決してその狭い世界に収まってしまうようなチンケな考えではないのだ。徹底して無駄を省こうとする哲学は、あらゆる世界に通用する。
・・・まぁ、そんな大げさに考えないとしても、少なくとも開発現場ではどんな業務にも通じると思うよ。