優れた開発者になるためには
――では開発者側の立場で考えた場合、優れた開発者になりたいと思ったら、どのようなことをやっていけばいいでしょう?
質問の中でコミュニケーションというのが出ましたが、これは非常に重要なものです。開発者がチームの中で成功する鍵となるのはコミュニケーションであり、ただ黙々とコードを書いていればいいわけではありません。どういうコードをどう書くかについてコミュニケーションを取っていくことが必要になるのです。
もうひとつ重要なのは、これは最近ではあまり人気がないのですが、再帰のような概念を含む、コンピュータサイエンスの基礎です。これについては『計算機プログラムの構造と解釈』(注2)という良い本があります。MITのコンピュータ科学科で1年次の必修科目のテキストになっています。現役のプログラマの多くが知らないけど、実は彼らのやっていることに深くかかわっているような、たくさんの題材を扱っています。立ち戻って学ぶのは有用だと思います。
――コンピュータサイエンスの学生に対しては、低階層のプログラミングと、経済学と、文章の書き方を学ぶようにとアドバイスされていますが、これは現役の開発者にも当てはまることでしょうか?
それは私が『コンピュータサイエンスの学生へのアドバイス』(邦訳)というアーティクルで書いたことですね。プログラムの書き方を学ぶだけでなく、経済学をほんの少し、一番初めに出てくるミクロ経済学を学ぶことをお勧めします。ただ経済学のその先の部分はナンセンスなものばかりなので必要ありません。それと、たっぷり書く練習をするために時間を取ることです。
――その書くということについてですが、なかなかうまく書けない人に対して書くコツをアドバイスしていただけますか
一番目はとにかく練習するということでしょう。二番目は、ストーリーを語るということ。人類は何百万年もかけて、どんなことが起きたかというストーリーを語りながら進化してきたのです。どんなこともストーリーの形式で物語ることができます。こういうことがあって、それで私はこう考えるのだと言う方が、単にAである、Bである、Cである、と言うのよりも効果的なものです。
それから三番目は、プログラマはプログラムであれば容易に書けるものですが、プログラムを書くときには、単に自己表現をしているのではなく、コンパイラが理解できるように書くものです。「これはコンパイラが理解できるだろうか」と絶えず自問しながら書くわけです。同じことは人間が読む文章にも当てはまります。多くの人が読んで理解できるように書く必要があり、そのためにはどういう言い方をすべきかと考え、読者の目にどう見えるか想像する必要があります。どうしたら理解してもらえるかよく考えることです。
――もう一点書くことについてですが、Joelさん自身は、あの素晴らしいエッセイを書くときに、どのような書き方をしているのでしょうか? たとえば頭の中で内容を全部考えてからそれを書き出すのでしょうか、あるいは書きながらアイデアを考えているのでしょうか。
私の場合、通常、頭の中に考えが全部完全な形でまとまっていなければエッセイを書くことはできません。エッセイの全体が頭の中にあって、あとは紙の上にはき出すだけとなっている必要があります。もし書きながら考え出していかなければならないのであれば、あまりいいものはできません。そうして書くときには、まずできるだけ手早く頭の中にあることのアウトラインを書き出して、そのあと間を埋めていきます。それから時には何日もかけて、繰り返し、繰り返し文章を推敲し、磨きをかけていきます。
創業しCEOを務める「Fog Creek」について
――Fog Creekは優れた開発者が集まっている場所だと思いますが、そこでの典型的な一日や、開発がどう進められているのかについて教えてください
それは毎日違いますね! それから私はそんなにすごいプログラマというわけではありません。ただ、優れたプログラマを見分けられるということです。
私たちが使っているのは、どちらかというとアジャイルよりは伝統的なものに近いプロセスです。コードを書く前に1か月か2か月使って計画をします。それから3か月か4か月で新しいコードを書き、そのあとデバッグに6か月から9か月ほどかけて、世に出せる品質のものにします。だからリリースのサイクルは通常1年半くらいになります。
仕事場はあまりフォーマルではなく、9時とか10時とか11時とか、みんな思い思いの時間にやって来ます。12:30になったら、大きなテーブルにFog Creekにいる18人全員が集まって一緒に昼食を取ります。
何か正式なミーティングをやる場合はランチの後に設定して、みんながミーティングのために作業を中断しなくていいようにしています。昼食が早く終わったときには、テレビゲームなんかをやっている人もいます。
仕事の進め方はとても社交的なもので、開発者はみんな閉まるドアのある個室を持っているのですが、互いに部屋を行き来して交流しています。
上がる時間もまちまちで、5時とか6時に帰る人もいれば、遅くまで残っている人もいます。
――開発者の目で見て、MicrosoftとFog Creekの大きく違うところは何でしょう?
まずFog CreekはMicrosoftよりだいぶ小さいですね。
Microsoftは私がいた頃とはずいぶん変ってしまいました。実はFog Creekを作ったとき、私は初期のMicrosoftを再現しようとしたのです。今ではMicrosoftは官僚的で、オペレーションが複雑になり、人々の欲しがるプログラムを素早く作る能力を失ってしまったように見えます。しかしかつては、Microsoftはずっとずっと小さく、そしてずっとずっと効率的でした。私がまねようとしたのは、そういうところなのです。
――世界の開発者を誰でも雇えるとしたら、誰を雇いたいですか?
あまり有名な開発者を雇いたいとは思いませんね。有名である分、私のために働く気持ちを持っていないでしょうから。
私が出会った最高の開発者で私のために働きたいと思ってくれた人は、私のために働いてくれています。だから答えは、ブレット、ベン、ベン、タイラー、……(Fog Creekの開発者たち)ということになります。