Get Things Right

My English blog is here http://getthingsright.blogspot.com/

プログラマー論 −インターフェイスの重要性

Java開発者として働き始めたころ、なぜそこまで知っているのだろうと度々、ある同僚に対して疑問に思うことがあった。知るには前提として調べるための動機が必要だ。彼のその放っておいても、自分調べて、自発的に知識を積み上げる力はどこから出てくるのだろうと。

OS、ネットワーク、データベースの仕組み等は、どう動いているのだろうと疑問に思うのはたやすい。プログラマは普段からそれらに接しているからだ。また仕組みを知れば、ブラックボックスだった部分が氷解し、プログラムで何が正しいのかと理屈をつけやすくなる。そして疑問に答えてくれる、良質な書籍も良く知られている。あとは時間と根気で、読みこなしていけばよい。仕組みが原理的に説明され、疑問が氷解していく過程は爽快でもある。

実際にプログラムを組む際に必要な知識はそれだけではない。API、新しいフレームワーク、便利なツール等も、生産性に大きな違いをもたらす。細かいAPIの違いなど、OpenSourceも含め、Javaの世界は無数にある。細かい知識ともいえるが、自分で数時間かけて書いたブログラムが既存のAPIで簡潔に、且つ高機能に置き換わる経験を何度かすれば、知らないではすまされない。

プログラムは無数の小さく分割されたブロックで成り立っている。個々のブロックを積み上げていくことで、様々なデータ処理のパターンを実現させる。積みあがったブロックから、一つブロックをスライドさせて、真ん中に空洞を作るにはブロックの表面がスベスベで接していることが条件だ。ざらざらだとスライドさせたときに、全体の構造に大きく影響を及ぼす可能性がある。使い易いインターフェイスとは、そのように全体の影響を最小限に抑えるものだ。更に使用するために必要な知識も最小限にまとめられている。

大事なのは、大きなプログラムを構築するときにはインターフェイスで妥協しないということ。ブロックの数が大きければ、個々のブロックの相互依存は膨大となる。ブロックの相互関係を管理するには、ブロック同士の接点を最小、且つ役割を明確にし、管理すべきことの規模を管理可能な範囲に抑える必要がある。

同僚をみて気づいたのは、インターフェイスで妥協しないため、常にネットサーチをしていたことだ。また使いやすいインタフェース、すなわち使用するのにあたって前提となる知識が最小なブロックとは、ブロック自信が必要な情報を、あらゆる手段を使って与えられた環境から取得するブロックに他ならない。ブロックにある意味の自律性を与え、親(プログラマー)が関与しなくとも自然と他人に使ってもらい、広まっていくブロックの構築には高い技量が必要される。

プログラムは人に使ってもらわないと、存在自体が時代と共に失われていく。使用する以前に訳の分からない呪文が必要なもの。やたらと設定が多く、多くの設定値は意味も分からずデフォルト値のまま、動かさざるえないもの。作った人に頼まないと動かないもの等々、自律的とは程遠い子供(プログラム)は親(プログラマー)がいなくなれば、同時に消滅する可能性が高い。

それではいけないと、生き残るコードを書くにはプログラムに対する愛が必要なのかも。