ベルリンのITスタートアップで働くジャバ・ザ・ハットリの日記

日本→シンガポール→ベルリンへと流れ着いたソフトウェアエンジニアのブログ

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

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

www.joelonsoftware.com


話は昔あったネットスケープという名のウェブブラウザのリリースから始まる。かつて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氏のブログ文章の面白さを感じていただけると思われる。

www.joelonsoftware.com


tango-ruby.hatenablog.com
tango-ruby.hatenablog.com
tango-ruby.hatenablog.com
tango-ruby.hatenablog.com
tango-ruby.hatenablog.com