ジャバ・ザ・ハットリ
Published on

「『イチから作り変えてまえ!』は絶対にやってはいけないこと」というJoel Spolskyの記事が示唆に富んでいて面白い

Authors
  • avatar
    ジャバ・ザ・ハットリ

Joel Spolsky という人は有名どころではスタックオーバーフローを作った人で、他にも Trello とかも創業しつつ、以前はマイクロソフトでプログラムマネージャーとしてエクセルを設計したり、面白い文章のブログ書いたりと、多才でユニークなエンジニア。
その人が書いた「エンジニアが絶対にやってはいけないこと」という2000年に書いた記事は今でも人気。先日、同僚が Slack で「この記事面白いよ」と貼ってきて「あーそういえばこれ以前にも読んだな」と思いつつ再読するとやっぱり示唆に富んだいい記事だったのでここで紹介することにした。

話は昔あったネットスケープという名のウェブブラウザのリリースから始まる。かつて90年代はブラウザといえば、インターネットエクスプローラーとネットスケープの2つがシェアをほぼ独占していた。インターネットエクスプローラーの勢いが増す中でネットスケープは新バージョンのリリースを急いでいた。ところが V6 のリリースは最後のリリースから3年とめちゃくちゃに時間がかかって、その間に急激にシェアを落としてしまった。なんとか V6 をリリースしてもその質も内容も伴わずシェアを奪い返すことなく消滅してしまった。

つまりネットスケープ社はたくさんのソフトウェア会社が共通して犯すある最悪なミスを自ら招いてしまったのだ、と。それは

ソフトウェアをイチから作り変えること

以前まであったコードを全部捨てて、3年かけてまったく新しいソフトウェアに書き換えて、ダメだなー、と。

エンジニアが既存のコードを眺めて「このクソコードが!」とか「こんな汚いコードとは付き合ってられねーわ」と不平を漏らしているのはどこでも見かける。私も含めてついつい考えてしまうのが、「この既存コードを全部窓から投げ捨てて、イチから作り直したらどんなに気持ちいいかなー」だ。

こうして既存のコードをこき下ろす原因について Spolsky がこう解説する。

The reason that they think the old code is a mess is because of a cardinal, fundamental law of programming:
It’s harder to read code than to write it.

そうして既存コードをこき下ろすのは 「コードは書くより読む方が大変」 だからだ、と。
もっとちゃんと読んで、例え巨大な行数のコードがひとつのクラスの中にあったとしても、先人達がそうしてしまうまでに何があったかを考えめぐらしてみましょう、と。もちろんひとつのクラスの中に何行もあるコードは悪い例と認めつつも、そこに至るまでのデバッグにつぐデバッグと修正が蓄積されている訳で、捨てるのはもったいない。捨てるのは気持ちいいかもしれないが、まっさらから作るのが必ずしも前回を上回る品質になる保証は無い。まっさらから作ったところで十中八九同じ種類かまた新しいバグを生み出すののは確実。

それよりもちゃんとコード読んで適切なリファクタリングして、パフォーマンスチューニングするのが最適解なんですよ、と。

全部翻訳するのは面倒だから、恐ろしく要約してしまった。こうして私が結論だけ書いても「は?だから?」となったかもしれない。できれば原文を読んでいただければ Spolsky 氏のブログ文章の面白さを感じていただけると思われる。

関連記事