2008-10-16

かく語りき

いま読んでいる本の中で "Programmers At Work" が面白いよと紹介があった. 80 年代に一山あてたプログラマのインタビュー集. 20 年前の本だから, さすがに絶版だった. でも著者が一部のインタビューを オンラインで公開している. 中には我らが billg のインタビューも. MS 歴の中では IPO 前後くらいの頃らしい. 若気の至りや時代の流れを感じる部分もあるれば, 一方に感心する部分もあった. 全部訳すのは大変だし版権も面倒なので, ちょっとだけ抜粋. 全文を読むと, より信仰は深まると思います.

インタビュア: 160 人もプログラマのいる Microsoft のような会社で 良いプログラムを開発する環境をつくるにはどうすれば良いのでしょう?

GATES: 小さなプロジェクトチームを作るのが一つのやりかただ. だいたい 4, 5 人くらいで, 各々がプログラムを理解する確固たる技術を持っている. そしてリーダーに何かわからないことがあっても, より経験のあるプログラマと相談できなければいけない. 僕らのやりかたの一部だが, プログラマがコーディングフェーズの前に全てを考え抜いておくという手がある. 設計文書を書くのは不可欠だ. なぜなら多くの単純化を思いつくのは, アルゴリズムで表現したプログラムを眺めるときだからだ. それは言ってみれば, 最小の姿で表現されているから, プログラマは重複を見抜くことができる.

もう一つ重要なのがコードレビューだ. コードに目を通して, 上級者が何かもっとうまいやり方のヒントくれないか確かめるんだ. 自分のプロジェクトと同じような, ずっと上手くいった他のプロジェクトもレビューしなければならない. その連中がこれまでどうやってうまくやったのかを知ることができる. 他のプロジェクトから自分のプログラムをよくするアイデアを得ることができる.

インタビュア: すごいソフトウェアを作れる才能ある人々の気をひくのは大変だと, 大きなソフトウェア会社が嘆くのをよく聞きます. なにしろそういう一匹狼は独立指向が強すぎて, 一人勝手に働きたがるのだと. 優秀な人々をつなぎとめるために, Microsoft はどうしていますか?

GATES: すごいプログラマはソフトウェア製品を作ることに大きな価値を置いている. でも僕は, プリマドンナ式がうまくいくとは思っていない. 優秀な奴のコードには口を挟まずにやらせておけとか, 周りとのコミュニケーションに煩わせるなとか, そういう奴の信念に周りを従わせろとか. 僕らに必要なのは, 心から互いに尊敬しあえる相手だ. すごいプログラマは他のすごいプログラマと一緒にいたいはずだと僕は思う. とっておきのアルゴリズムを思いついたときには, そのクレバーさをわかってくれる同僚が欲しい. そういうアイデアを思いついても, 胸の内に抱えているのは孤独なことなんだ. 物事がややこしくなってきたと感じて, それを単純にする方法を見出したとする. すごいぜ, と思う. でも他人のフィードバックも欲しいんだよ. 優秀なのが何人かいれば, 残りはあとからやってくるのさ.

古いルールがあって, プログラマの管理職はもっと良いプログラマであるべしというものだ. それと, 僕らが "技術的逆行" と呼ぶ状態もあってはいけない. つまりプログラムのわからない誰かの下でプログラマを働かせるなということだ. この思想は今でも守っている. ある程度の段階ではビジネス系の管理職もいるけれど, プログラミングのプロジェクトを管理する非プログラマはいない.

"Joel や Paul の孫引きですか?" という印象もうけるけれど, インタビューは 1986 年. こっちが本家なのは言うまでもない.

既存のコード, そしてチームでの議論から何かを学ぶことへの強い執着を感じる. コードレビューを, 他人に読んでもらうだけでなく, 自分が他人のものを読んで学ぶ機会だと位置づけているのは少し面白い. インタビューには PDP OS (Unix のことかな?) の話もでてくるし, もし billg が今時の若者だったら世のコードを読みまくって, Google みたいに OSS フル稼動な会社を作ったかもしらんなあ...と思ったけれど, Linux の隆盛の一端は Windows 独裁への反骨精神が支えているといった面もある. 歴史は繰り返せない.