真 もわ爛漫

しゃーら、しゃーらしゃーら

Coders at Work

http://www.amazon.co.jp/dp/4274068471/mowanetjp-22

ソフトウェアエンジニアの読み物としては久々の大当たりです。翻訳者の青木靖さんは毎回良い題材をこなれた日本語に翻訳されるので大変ありがたい。英語で読んでも良いのですが、(日本語版)600ページまでになると怖気づいてしまうので……

一見すると仕事上でプログラミングをする職業プログラマーのことかと考えてしまいますが、やや趣は違います。もし仮にそのような本であれば、クヌースが対象者に入っている意味が不透明です (企業に務める仕事人ではあきらかにありません)。どちらかと言えば、理論と実務の境界を眺めたときに実務の面で功績が著しく、実際に製品に関わったり大きなソフトウェアをリリースしたりした方々で、かつソフトウェアサイエンスやその技芸的側面に実際のプログラマーとして十分理解のある方々15人をインタビューした結果になっているように思えます。いくら職業的な面で鋭い洞察を持っていても、このリストの中に例えば(Joel on Softwareの)ジョエル・スポルスキーはちょっと入れられないように感じるのは、おそらく後者の面に懸念を感じるからだと思います。

詳細は異なりつつ、各インタビュー対象の方々への問いかけは意識的に似通ったものになっています。プログラミングとは橋を作るかのようなエンジニアリングなのか職人の作り成すアートなのか、デバッグには何を使うか (printfデバッグがこの方々の中でも有力な候補なのには驚きました!)、システムの下層を知っているべきかブラックボックスでも良いのかむしろそうあるべきなのか、エンジニアにとって数学はどの程度必要なのか、オススメの本は何か、等々。

15人目がクヌースであることを意識してか、"The Art of Computer Programming"を読んだか読まなかったかについての質問が各インタビューにほぼ必ず入っており、また上記の理論と実務の境界上の話題が多い点からソフトウェアサイエンスについての多くの基本的な前提が読む上で必要とされて、さらにある程度各対象の方々の来歴に関わるプロジェクトを多少知っている必要がある面があるなど、何がしか、専門教育の過程で得られる自然な知見を仮定している点にはもう少し配慮があって良かったという面もあります。一方、各個人が楽しいとおそらく感じているインタビューのレベルが、まさにそのくらいの水準を要求しているということから、むしろ私としてはそれらの前提を(全体像が分かる程度に)理解できていること自体に安心を感じてしまう面もあります。ある種、プログラミングなしの優しい知的お遊びのような面もあります。

昨今のプログラミング界隈の論争のいくつかに関する個々人の解答を鮮やかに描き出している点を特に評価したいです。普通、この手の議論は(あまり筋の良くない論者も入り交じっての)「自転車置き場」になるのが宿命なのですが、実績があって実務と理論の両方をある程度分かる方々が、詳細については意見を異にしつつ大方の方向性について一貫しているのにはやはり大きな信頼感があると言えるでしょう。当然、それが私の個人的な気分と一致していれば、私としてはこれ以上の満足はないわけです。一方細かい点での主張の違いは、自分自身が考察する上で忘れていた基本的な仮定を再度掘り起こしたり、私が見落としていたいくつかの側面、知ってはいたが都合が悪いのか無意識のうちに排除していた事例などを思い出させてくれて、やはり大変勉強になります。

やや細かいところとして、個別の方々の個人的な態度が真偽不明の中で「私が正しい。彼が間違っている」と主張するところで、しかしインタビュアーが反論しないというところがあり、もちろん反論しないのが正しい訳ですが、参照先に実態のないポインタを渡された気分になる部分は少しあります。優しいところでは ECMASCriptの仕様の攻防で主張が二者で分裂している例が挙げられますし、より厳しい (態度的に) ところでは、論文のアイディアを盗んである人が賞をもらったという主張などがあります。より品のない例として「テスト駆動開発のグルがテストばかり作って本体を書けなかったがインタビュー対象の方は書けた」といった話もあり、読者として「うっ」とくるものがあります。それはストレートにそのように解釈して良いのか我田引水なのか、本著だけではわからないわけですが……。まぁ、そもそも白黒はっきりつくようなお話ではなかったり、10年後に今を振り返らなければこれらの方々の主張の真偽もそもそもわからなかったりする面も多々あるので、良いのかもしれません。

実際のところ、プログラミングの詳細についての議論はほとんどなく、多くは各方々の「スタイル」の描き出しなので、はたしてこれを持ってプログラミング能力が上がるかは分かりません。大層面白いというだけで、それでいいのだと思います。

本著の質とは幾分ことなる議論ですが、現代ではチームプレイによってより煩雑なエンジニアリング世界をくぐり抜けるノウハウが実務で蓄積されているであろうところ、本著に登場するのが実は個人、もしくは小規模のチームによるcutting edgeな功績に偏っている結果として、チームプレイの知見がほとんど見えてこない点は多少考察の余地があるように思えます。これらの著名人の中にも「複雑すぎて追える気がしない」と言わしめる極少数の企業による優れたチームプレイの産物がどのように生まれているのか、俯瞰的な理解を試みる著作があっても良いかと。