書き直しの記憶
書き直し、痛快な成功例も、なんだかなあな失敗例も見たような気がする。失敗例はこう、オリジナルの複雑さが何故存在してるかを理解せず、「現状のものはややこしすぎる、書き直してシンプルにする!」と半分素人みたいな人が挑戦したケースであることが多いように思う。オリジナルの複雑さは長年の実用にさらされて育ってきた、意味のある複雑性であることも多く、シンプルさを売りにして作ってみたものの、機能も性能もいまいち……などとなるパターン。
森田さんも触れていた、 Netscape, Mozilla, Firefox, WebKit, Chrome などのブラウザ群は、苦しみはありつつも、ある程度以上にうまくいった、非常に大きな規模の書き直しだと思う。これらは中心になってるメンバーに、ブラウザ界のヌシ的な、なんだかずっとブラウザやってる人みたいな人達がいて、その人達が過去のプロジェクトの理解を元に、シンプルにできるところはしつつも、複雑性を受け入れるべきところは適切に受け入れるような、適切な設計をしたという面があるのではないかな、と思っている。
コード量で言うと 1/1000 以下の、はるかに小規模な例だけど、僕が書き直しをやってみた例として、 GNU make をある程度再実装した、 kati というのがある。これは始めてみると想像していたよりはるかに GNU make の仕様がヤバかったというのがあり、まさに「現状の複雑性をまるで理解していない素人」だったので、蛮勇の類だったように思う。 kati はある程度うまくいったのだけど、これはなんというかラッキーで、現状の複雑な仕様をある程度捨てても、それなりに実用的なラインまで持っていけるプロダクトだった、ということなのかな、と思っている。
自分が過去に作ったものを書き直す話
書き直し、いろいろな対立軸があるのかな、と思う。小さい書き直しと大きな書き直し、うまくいくケースとうまくいかないケース、森田さんが書いていたようなリファクタリングが良いケースと書き直しが良いケース、など。このへんも面白いトピックだと思うんだけど、個人的に気になる軸として、他の人が作ったものを書き直す場合と、自分の作ったものを書き直す場合があると思う。
僕としては、あまり自分が過去に書いたものを書き直す、というところにモチベーションを持ちにくい。なんかもう一回やればもうちょっとうまくやれるだろうな、などとは思うんだけど。ざっと思い返すと、プログラム言語を学ぶ時の小規模だけど非自明な習作として、オセロを4回くらい書いたくらいかな。あとダイナミックローダは名目や規模がそれぞれバラバラなので、あまり書き直しという感じもしないけど、4回くらいいじったことがある気がする
得意なことをさらに得意にして、より良いプロダクトを作る、という動きの方が、おおげさな言いかたをすると人類に貢献している気がしている。僕としては、あまり人類に貢献したいみたいな気持ちはないんだけど、なんとなく一つのことを極める方がカッコ良いような気がする気持ちがある。ブラウザ界のヌシみたいな人のエピソードで記憶に残っているのが一つある。その人はすっごい有能で、みんな意見を欲しがっている。だけど、ブラウザ標準カンファレンスであるところの、 w3c になんか来ていない。来るって言ってたはず、らしい。とはいえ彼の意見がないと結論に自信が持てないから、 skype かなんかでつないで、むっちゃ音質悪いのを、みんなで必死に何を言ってるか聞きとっている、みたい状況になった。いや偉い人だからってその態度はどうなんだ……ともちろん思うんだけど、現場に来てなくてロクに議論を聞いてないにも関わらず、みんなが意見を求めざるを得ない圧倒的専門性には、こう、いやすげーなと
そういう、一つのことを極める系の動きにモチベーションがわかないの、ちょっとコンプレックスだったんだけど、ここ5年くらいは、まあなんか違う種類の人間だよなってことで気にならなくなっている。なんかでも、一つのこと極められる系の人たちは、どういう気持ちの持ち方なんだろうな、ってのは結構気になる。 ruby のなかださんとか、もう生活の一部なんだろうけど、何食べたらああいうことが可能になるんだろうか……とか。それ以外だと同じく ruby ずっといじってるささださんとか、リンカ書き直し回数が Ian Lance Taylor の 3 回 と並んで人類最多になってそうなうえやまさんとか。
他人が作ったものを書き直す話
一方で、僕も、他の人の書いたものを書き直すのは、それなりに食指が動く。ただなんか、あまり現実的にやりたいネタがないのが今日この頃。いや、デバッガ、 C++ コンパイラ、エディタ、あたり自分で書いてみたいな……と思ってるんだけど、これらは規模が大きすぎて、現実的に完成する気がないし、すごくパッションがあるわけでもない
というわけで、個人的な趣味嗜好を中心に書いてみました。ところで、森田さんはこのトピックを提案した時の最初の発言で
仕事でも趣味でも、書いたりかかわったりしたコードのなかに書き直したいなーというものはありますか。 自分は昔はあって、今はなくて、合ったほうが良いなーとおもっている(野心として)。
と話をふってたんですけど、森田さんの話は森田さん自身のパッションの話がないなーと思った。そのへんどんなもんですかね?というのを聞きたい気がする。ブラウザ作りなおしたいとか、ないものですかね