私は今職場で無謀にもプログラマまがいのことをやっていて、いや、無謀なのは私じゃないな。こんな私を雇っているほうがずっと無謀だろう。
さて、無謀なプログラマである私は今PerlでCGIなんかをがりがり書いていて、イントラで使う掲示板とかを用意しておこうというそういう腹なのだが、なにしろ私の性格だから、思いつく機能を片っ端から導入して、ついに八方塞がってしまったのだよ。八方塞がったというのは、きちんと計画を立てないままつぎ足しつぎ足しでプログラムをしていったことで、あちらを立てればこちらがたたないという状況にはまりこんでしまったということ。けどさ、最初からすべての計画を立ててなんて無理なんだよ。書いているうちに、あ、これも必要だ。あ、こういう機能もつけとかなくちゃって感じで、予測をはずれて成長するのがプログラムだと思う(間違ってる?)。だから、おおまかな出来上がり像は描けても、ちゃんとした完成予想なんてのはできないのだよ。
威張っていうことじゃないな。
現時点で必要充分の機能はついているので、ここでストップするというのもひとつの手ではある。しかし、あとでなにかの機能をつけたいとなったときに、今のままでは手が出せないのだ。もっと柔軟な仕様であればよかったといっても後の祭り。じゃあ、こうしたときにはどうしたらいいというのだろう。
現行のコードを捨てて、一から書き直したらよいのだよ。そうしたら、現状の問題点をクリアすることもできるでしょう? しかし、一から書き直すというのもまた骨で、書き直す際にやっぱりきちんと要点を押さえておかないと、二度目の書き直しが発生しかねない。だから、どうしようかどうしようかとうんうんうなりながら、もう数週間が経ってしまった。いや、専業プログラマじゃないから、その間は他の仕事もしてますよ。
YukiWikiで知られたプログラマ結城浩氏がおっしゃっていた。その名もプログラマの心の健康。はじめからやり直したい症候群と題して、詳細な検討もせずに
「はじめからやり直したらうまくいく」 と考えるのは危険である
とおっしゃいます。うん、そうなんだ。とにかくなんでも書き直したらうまくいくわけじゃない。違うところで違う袋小路にはまりこむことだってあるわけで、だから、今なんとか動いているなら、問題点を洗い出して、修正していくほうがずっと賢いかも知れない。時間の面でも労力の面でも、そちらの方がずっといいかも知れない。
エリック・レイモンド曰く、捨てることをあらかじめ予定しておけ。どうせいやでも捨てることになるんだから
。いやこれはフレッド・ブルックスか。ともあれ、エリックがいっている。ちゃんとした問題解決をしたいなら、少なくとも
1 回くらいはやりなおす覚悟はしておくこと
。やっぱりそうなんだよな。問題を先送りしても事態の改善は期待できないわけさ。やっぱり、時には今までやったことを無駄にしてでも、きちんと問題をクリアするべきなんだよ。将来発生しうる問題とその解決の労力を考えるなら、今整地しておくべきなんだ。
と、私の中ではふたつの考えが拮抗している。いや、でも私は書き直すつもり。ただ、どう書き直したものか。どうしたら一番クリアにコードを整理できるだろうか。それがわからないもんだからもんもんとして、いやな足踏み状態。いや、こんなのは一歩踏み出したらなんとか動き出すものだったりするんだけどね。
表題の由来は同僚の一言。そうやって捨てて書き直したら、バージョン2になるんでしょうね。ああ、世の中にはこうしてできたバージョン2はいったいどれほどたくさんあるのだろう。想像している以上にあるような気がするのは私だけかな。