スクラッチで書き直すのはそんなに悪いことなのか

2012/3/12作成

元ネタははてなは「絶対すべきでないこと」をやらかしたのか?というか、Things You Should Never Do, Part Iなんだけど。

プログラムを書いていて「あーこれなら一から書き直したほうが絶対いい!」と思うことってのはたくさんあって、でもって大抵の場合においてその考えが間違っているというのは、それはそうだと思う。ただ、絶対の真理であるかどうかというと、そうでもないのではないかなという気もする。

個人的には、同じプログラムを10年以上保守した経験がないので発言に重みが全くないんだけど、10年も経つと要求仕様の諸条件が様変わりしていて、改修で対応できる限界を超えるケースというのはあるのではないだろうか。今回の例は「はてなダイアリー」から「はてなブログ」だったわけだけど、これもそれに当てはまる可能性はあるのではないかと思う。

「はてなダイアリー」というのは実にタイミングの悪かったサービスで、サービス開始直後にブログブームがやってきて、それまで日本のウェブ界で細々と存在してきたウェブ日記という文化がぶっこわれたタイミングだった。だもんで「はてなダイアリー」もブログを意識した機能追加を行ってきたんだけど、どうやったところでもとの素性が「ウェブ日記」であるところで越えられない壁は存在したんじゃないだろうか。だから、今回の「はてなブログ」をスクラッチから書き直したというところに、私は勝手ながら共感するところはある。もっとも、だからといって現状の「はてなブログ」の機能が足りてないところを擁護しようまでは言わないけど。

あとこれも勝手な想像だけど、スクラッチから書いたからと言って「はてなダイアリー」のコードを本当に1行も使わなかったとも限らないよね。使えるものは再利用しているというのは当然ありえることではないだろうか。

(2012/3/13追記)

そういえば「バージョン3の法則」というのを思い出した。ソフトウェアはバージョン3あたりが一番できがいいという話だ。もちろん例外は多数あって、単なるたとえ話だけど。

具体的には、バージョン1は初物なのでバグも多いし、未実装の機能もまだあったりする。それがバージョン2、3と代を経るごとにバグが潰されて機能的にもこなれてくる。ユーザのフィードバックも取り入れられる。ところが4、5となってくると、当初の設計では想定もしてなかったような機能の取り込みも行われるようになってきて、だんだんつぎはぎの様相を呈してくる。開発の難易度もあがるから致命的なバグも出てくる。ということで、バージョン3あたりが一番よい出来になったりするというお話です。TeXのバージョンがπなのもこの話がもとになっています(←これはデマ)

結論としていいたいことは、当初の設計の限界を超えた実装は困難を極めるから、一から書き直したほうが早いという局面も存在するでしょう。というある種当り前の話なんだけど、元ブログの論調だと「書き直しは全て罪悪」のようになっているので、そこへのカウンターのアプローチとして提示しましたということです。だってタイトルに「絶対」なんて書いてあるしね。なお、冒頭にも書きましたが「書き直しは大抵の局面で罪悪」というのには同意します。ただ、絶対ではないというだけの意見です。

(2017/11/8追記)

こんな記事がありました。

アドオン「テキストリンク」のWebExtensions移行、失敗と成功の分かれ目について

古いブラウザ拡張を最新の環境に移植するとき、修正を最小限にしようとして苦労して失敗し、一から書き直したらあっさり出来上がったという話です。もちろん何でもかんでも一から書き直せばうまくいくというわけではなくて、こちらで言及されている通り

があるということなのでしょう。その判断は非常に難しいのですが、ともかく「一から書き直しは絶対悪」という思考停止ではいけないなぁということかと思います。