「格好いいコード」という言葉の影には、自己表現への欲求と美意識が。いいですね。では、あなたの求めているものは何なのでしょう。格好いいコードとは、どんなコードなのでしょう。
サグラダ・ファミリアと格好いいコードの共通点
僕にもありました、格好いいコードを希求していた時期が。Sun Microsystemsにいた時の話です。同僚達は、みんなJavaのAPIとその実装を作っていました。プログラミング言語とそのコア・ライブラリを作る仕事です。作った物は世界中の開発者達に見られる、使われる。当然、みんなコードの書き方にはひどく拘っていました。人によって好みのデザインがあり、コードレビューという文化もなかった時代だから、出来たコードは本当に千差万別でした。
使う人には迷惑だっただろうけど、僕のような作り手にとってはとても良かった。色々な香りの漂う、色々な人の作品を見る。自分の中で、これはいいなとか、これは嫌だなとか、自分なりの印象が生まれる。それが、自分の仕事に反映されていきました。
Javaは、Sunだけのものではありませんでした。大事なところは、IBMやOracleなど、肩で風を切るテック企業から人が集まって共同設計をしていました。窓からカリフォルニアらしい大きな青空を眺めながら、毎週のように開かれる電話会議に参加しました。言語の仕事には特定の顧客がいないから、締め切りもありません。俺たちが完成と言ったら完成、そんなところがありました。こういう特殊な環境も、「格好いい」コードを追求するための試行錯誤をするためにはいい環境でした。同じAPIに対して集まる色々な意見・視点。そうか、そんな考え方もあるのだな。
APIは、互換性がとても大事にされるから、一度出荷するとやり直しがききません。それでいて、使う側から見た分かりやすさ、実装側の自由度、そして将来の拡張性、そういった相反する利害を調整する必要があり、設計のし甲斐のある仕事でした。一流のエンジニア達が発揮する、絶妙なバランス加減。時に怒号かなと思うような、白熱した議論。僕が当時心掛けていたのは、概念を整理していくと、自然にそれらがクラスとその相互作用に収斂してあるべき形に収まっていく、そういうことでした。大事な概念が自然な名前で置かれている、というのは理解を容易にする。必要な動作は、それらの概念の相互作用として記述できる。一言でいえば、適切な抽象化、ということになるでしょうか。
APIの設計だけではなく、実装もたくさんやりました。
実装側は、ソフトウェアの規模が大きくなるので、それをいかに適切な粒度の部品に分解していくかというところに注意を払っていました。例えば、当時、僕はXMLをJavaにマップするライブラリを作っていました。XMLのスキーマを読み取るライブラリ、Javaのコードを生成するライブラリ、そういう独立して再利用可能な部品を別々のライブラリとして作る。そうすることで、個々の部品にもユーザーやボランティア開発者がついたり、共同作業が簡単になったりします。
バルセロナの有名な建築家ガウディは、懸垂曲線をモチーフにあのサグラダ・ファミリアをデザインしたそうです。懸垂曲線は、どの一点をとっても、掛かる力が綺麗に釣り合っていて美しい。僕は、そんな実装を目指していました。部品部品が隣り合う部品と綺麗に繋がっている、ネックレスのようなソフトウェア。

今にして思うと、一つの環境に腰を落ち着け、全力投球して何かを作ってそれを人にぶつけられる、というのは大事な機会でした。どうせやるなら、とことんやりましょうよ。