Joel on Software(ジョエル・オン・ソフトウェア) あなたが絶対すべきでないこと(スクラッチから書き直す)

久々に「Joel on Software」という以前、読んだことがあるソフトウェアに対する考え方の本を思い出しました。

スポンサーリンク
スポンサーリンク

Joel on Software(ジョエル・オン・ソフトウェア)

「Joel on Software(ジョエル・オン・ソフトウェア)」はジョエル・スポルスキによって書かれたソフトウェアに関する考え方の本です。
ジョエル・スポルスキ

ジョエル・スポルスキ(Joel Spolsky、1965年 - )は、米国のソフトウェアエンジニアで著作家である。
ソフトウェア開発について論じたブログであるJoel on Softwareの著者として知られている。
1991年から1994年にかけて、Microsoft Excelチームのプログラムマネージャとして活躍し、その後Fog Creek Softwareを創業した。
(Wikipediaから引用)

プログラムの手法とかテクニックとかの話ではなくて、ジェエル・スポルスキ自身の体験によるソフトウェア開発に対する考え方の本です。
とても学ぶことが多い本でした。

あなたが絶対にすべきではないこと PARTⅠ

Joel on Softwareの書籍の中に書かれています。
原文では、以下に書かれています。

Things You Should Never Do, Part I
(http://www.joelonsoftware.com/articles/fog0000000069.html)

これまで開発したコードを捨て、スクラッチから書き直す

理由:

  1. 古いコードは使われている。
  2. 古いコードは、テストされている。
  3. 古いコードは多くのバグが見つかり、その修正がされている。
  4. 新しいコードを書いている間に、競合は魅力的な新製品を市場に出してくる。それに対抗する機能を持たせた製品を即座にリリースすることが出来なくなってしまう。

これらの古いコード資産には多くの時間と労力が費やされている。
これらを捨てるということは、それら過去の知見をすべて捨てることになる。
新しいコードから書き直して、テストして、リリースするのには、時間がかかる。その期間は、競合他社への贈り物となってしまう。なぜなら、新しいコードを書いている間中、新製品をリリースできないのだから。戦略的な変更や、マーケットのトレンドに対応した新機能の追加も出来ない。

新しいコードが古いコードよりも優れているというのは、明らかに不合理だ。古いコードは使われている。古いコードはテストされている。多くのバグが見つかり、修正されている。それについて悪いことは何もない。ハードディスクに入れておくだけでバグに感染したりすることはない。まったく逆だ!

とても深い名言ですね。

たいていのプログラマーは古くから使われているプログラムや、自分ではよくわからないロジックの入ったプログラムを見ると嫌になります。
そして、メンテナンスを任されると、その保守の難易度や、自身のプログラミングスキルの過信から一から作り変えようとします。

これが、全く間違いであることを認識させてくれます。

ソフトウェアはハードウェアと違って、腐ったりしない。陳腐化したりしない。

改めて、とても深い名言だと思います。

リファクタリング

では、汚いコードをどうすればよいのでしょうか?

リファクタリングするんだと思います。

このあたりの手法は、Joel on Softwareでは以下のように記載されています。

いずれにしても、ゼロから始める代わりに、私はコードを完全に磨きあげるのに3週間費やす価値があると考えました。Rub a dub dub(コードをきれいにしましょう)。リファクタリングの原理にもとづき、これを実行するために私はいくつかのルールを作りました。

1. 新しい機能は、どんなに小さくても追加はしない

2. いつでも、どのチェックインでも、コードは完璧に稼動する

3. 行うことはすべて論理的な変換 - ほとんど機械的なことでで、コードの動きをかえないとすぐ確信できる、そういう類の物のみ

(http://japanese.joelonsoftware.com/Articles/Rubadubdub.html から引用)

些細なことであっても、ロジックの変更を一切行わない、っていうのはとても重要なことです。
ロジックを変更しない限り、ソフトウェアの品質は担保されるからです。

改めて改めて、「Joel on Software」は名言の連続だと思います。

あなたが、あるソースのメンテナンスを任されたとします。
もし、自分や同僚が理解できないロジックを見つけた場合、どうしたらよいでしょうか?

放置すればよいのです。

あなたが分からないコードを放置してもだれも困りません。
むしろわからないままに削除したり、ロジックの変更を行うと、当初の意図通りに動かない可能性があります。

触らぬ神に祟りなし。
いじらないのが最も正しいメンテナンス方法です。

まとめ

「Joel on Software」で有名なジョエル・スポルスキですが、Fog Creek Softwareという会社を創業しています。

今まで知らなかったですが、ソフトウェアのQA情報サイトであるStack Overflowの共同創業者なんですね(http://www.joelonsoftware.com/AboutMe.html)。

知らなかった。。