ジョシュア・ブロック:Javaプラットフォームの良心
「Javaプログラミング言語は、バージョン5.0で導入された変更により、複雑さの予算を使い果たしてしまった」。これは驚くべき一文であり、何よりもそれを言った人物ゆえに注目される。ジョシュア・ブロックはSun Microsystemsで長年、問題の追加機能の設計に携わり、彼が形作るのを助けたJDK 5.0リリースは、言語史上最も野心的な拡張であった。その後、彼は世界に向けて「もう十分だ」と告げた。自ら拡大したシステムを監視し、機能ではなく予算で考えるというその本能こそが、一行に凝縮された彼そのものである。
サウサンプトン、コロンビア、ピッツバーグ
ブロックは1961年8月28日、ニューヨーク州サウサンプトンで生まれた。コロンビア大学工学応用科学部でコンピュータサイエンスの学士号を取得し、その後カーネギーメロン大学で博士号を取得(1990年修了)。彼の論文「抽象データオブジェクトのレプリケーションへの実践的アプローチ」は、ACM優秀博士論文賞にノミネートされた。
このタイトルは二度読む価値がある。大学院生時代でさえ、ブロックの仕事におけるキーワードは「実践的」であった。彼は分散システムにおける理論的問題としてレプリケーションを攻撃していたのではなく、エンジニアが抽象データオブジェクトに対して実際に展開できるバージョンを求めていた。彼はキャリアの残りの時間を、証明可能に正しいことと、現役のプログラマーが信頼して使えることとの間の、狭く流行に左右されない隙間で過ごしてきた。
SunとCollections Framework
Transarcでシニアシステムデザイナーを務めた後、ブロックはSun Microsystemsに入社し、Distinguished Engineer(特別エンジニア)として、JavaをJavaたらしめるいくつかの要素の設計と実装を主導した。Java Collections Frameworkはその最大のものである。リスト、セット、マップ、およびそれらを操作するアルゴリズムなど、それ以降のすべてのJavaプログラムが構築されてきた基盤である。彼はまた、java.mathパッケージと言語のアサーションメカニズムを主導し、JDK 5.0における主要な機能強化を推進した。
これは独特の著作活動である。コレクションライブラリはアプリケーションではなく、語彙である。ブロックの名前を聞いたこともない何百万人ものプログラマーが、彼が選んだ名詞と動詞の中で仕事をし、彼らの思考の形は彼のインターフェースの形によって制約されている。もし彼が間違えていれば、悪いプログラムができたのではなく、プログラムを書くための悪い言語が永続的に作られていたことだろう。
Effective Java
2001年に彼は『Effective Java』を出版し、プログラミング言語に関する本としては異例の、コミュニティの道徳的権威となった。独立した項目を番号順に並べ、それぞれがルールを提示し、実際の失敗モードに基づいて議論を展開する構成で、2001年にJolt Awardを受賞した。2008年の第2版では、読みやすさを損なうことなく57項目から78項目に増え、2017年には第3版が出版された。
彼は共同執筆者と共にさらに2冊の本を書いた。2005年のニール・ガフターとの『Java Puzzlers』は、仕様上は正しく動作するが直感的には狂っているコードという、言語の罠を集めたアンソロジーであり、診断演習として提示されている。2006年の『Java Concurrency in Practice』は、ダグ・リーを含む5人の共同執筆者と共に書かれ、プラットフォームがユーザーに求める最も困難な課題に関する標準的なリファレンスとなった。
GoogleとAPI設計
ブロックは2004年6月から2012年8月まで、GoogleのチーフJavaアーキテクトを務めた。そこで彼の中心的な関心事は、公的な議論へと結晶化した。2006年の会議論文「How to design a good API and why it matters(良いAPIを設計する方法とその重要性)」では、APIは再交渉できない契約であるという理由から、インターフェース設計を好みの問題ではなく、リスクを伴う規律として扱っている。彼はそのフラストレーションを具体的に説明した。Googleでは、あるクラスがインターフェースではなく具象型として宣言されていたために代替実装を提供できず、それは何年も前に誰かが下した決定であり、彼が言うところの「普通の開発者が毎日感じる」制限の一種である。
彼のアドバイスには一貫した風味がある。自分の判断に対する謙虚さである。自分を繰り返さないこと。自分で書くのではなく、特に並行処理については確立されたライブラリに手を伸ばすこと。早すぎる最適化に関する一般的な警告が自分には当てはまらないという感覚を疑うこと。「早すぎる最適化に関する一般的な警告は自分には当てはまらないと感じやすい。なぜなら、どのコードが時間的に重要かを自分だけは知っているからだ」。そして『The Elements of Style』を読むこと。なぜなら「優れたプログラミングと優れた文章は、どちらも表現の明快さと経済性に関するものだからだ」。
なぜジョシュアは天才と呼ばれるのか
問題の能力は単なる発明ではなく、より稀なものである。ソフトウェアをそれを使うことになる見知らぬ人の立場から見つめ、自分の能力のためではなく、その見知らぬ人の起こしそうな間違いのために設計する能力である。ブロックの枠組みにおいて、APIとは同意もしていないし修正もできない人々に押し付けられる言語であり、それを設計することは、数十年先を見越して大規模な誤用を予測する演習となる。Collections Frameworkがその証拠である。現役プログラマーの膨大な割合が使用する語彙であり、ほぼ変更されることなく生き残るほど正しい。第二の要素は体系化である。『Effective Java』は、以前は少数のプラットフォームエンジニアの頭の中にしかなかった暗黙の専門知識を取り出し、転送可能で議論可能なルールに変えた。
反論も述べる価値がある。ブロックは新しいコンピュータサイエンスを生み出したわけではない。彼の論文は優秀論文賞にノミネートされたが受賞はしていない。彼の最も有名な仕事はベストプラクティス集であり、発見というよりはキュレーションと判断である。記録されている栄誉は出版賞や雑誌のリストであり、分野の主要な研究賞ではなく、ここで参照した情報源には彼を天才と呼ぶ記録はない。Collections Frameworkは彼が主導した大規模なチームの努力であり、ソロの作品ではない。公平な評価は、ブロックがエンジニアリングの判断における最高の実践者であり教師であるということである。それはソフトウェアにおいて新規性よりも重要でありながら、評価されることははるかに少ない規律である。
レガシー
彼はSunを去った後も言語を形作り続け、クロージャへのアプローチとして自動リソース管理ブロックと簡潔なインスタンス作成式を共同提案した。ARMブロックはJDK 7に採用された。2004年12月、『Java Developer's Journal』は彼を世界で最も重要なソフトウェア関係者40人に選出した。その後、カーネギーメロン大学に戻り、ソフトウェア・社会システム学科の実務教授を務めている。その肩書きは彼のキャリアの要約のように読める。なぜなら、実践こそが常に彼の目的だったからである。
仕事の尺度は、その影響が帰属されないことにある。今日どこかで、ブロックの文章を一行も読んだことのないプログラマーが、具象クラスではなくインターフェースに手を伸ばしたり、並行処理のプリミティブを自作することを拒否したりするだろう。なぜなら、同僚が本の中の番号付き項目で読んだことを彼らに教えたからである。
