書き直しには自分も悪いイメージしかない。できれば避けたい。自分の関わった製品で、書き直したいとか一からやり直したい、みたいな欲求もほぼないなぁ。
モバイルトランスコーダのはなし
ふと思い出したが、かつて書き直しプロジェクトに巻き込まれて嫌な目にあったことがあった。むかしむかし、モバイル向け検索チームではモバイルトランスコーダの書き直しというのをやっていたのだった。
昔のフィーチャーフォン(i-modeとか)に搭載されていたのは完全なHTMLはサポートしてない簡略化されたブラウザだったので、ふつうにウェブ全体から検索をして検索結果を提示しても、結果ページはそのままではユーザには読めないこともある。そこでウェブ検索の結果のページを解析し、変換して見えるようにするという技術が当時は開発されていて、いろんな会社がそういうのを作っていた。グーグルも社内製品があったんだけど、それを既存なアドホックな解析によるトランスコーダからWebKitベースに書き換えるというプロジェクトがあり、それに巻き込まれたのだった。
これはいくつかの要因が重なってまあまあ大変なことになっていた。詳細はあんまり書けない気がするが、かんたんに言うと、たとえば最初のリリースではfeature parityが整ってなかった。もちろん全部のビットを立てる必要はないとはいえ、どの機能は必須でどれがそうでないか、それらの優先順位はなにか、ぜんぜん誰もきちんと管理できていなかった。またコアチームはアジア圏におらず、しかし当時のモバイル検索の主戦場はアジア圏(というかほぼ日本)だったために、チームのやりたいこととやるべきことの齟齬があった。あと私個人がコアチームのTLとそりがあわなかったってのもあった。
まあ最後はさておき、そういういろんな不幸が重なって大変だった。あれは私の「書き直しイクナイ」という信念を強く強化したと思う。ただ補足をすると、その後コアチームが解散されて別の人たちが開発を引き取り、最終的にはどうにかなったと記憶している(わたしはその前に逃げ出したので関係ないけど)。それに技術的にも正しい方向だったし、新しいバージョンだったからこそできる機能(JSの実行結果からレンダリングするとか)もあった。でもまあ、書き直しの良し悪しというのはそれだけではないなというふうに思った(今にして思えばプロジェクトマネジメントがなってなかっただけかもしれないが……)。
IME経験とGoogle日本語入力
Ruiさんがリンカを何回も作っているように、同じものを何度も作って、細かいことまで詳しくなって専門性が高まって、みたいなものにはあこがれる気持ちもある。自分もそういう感じではないなあ。
この点についてはそういえば、Google日本語入力チームにはIME開発経験のある人が妙に多く集まっていた。工藤拓さんなんかは何度もラティス構造やViterbiアルゴリズムの実装を書いたと言っていてかっこいい。小松さんも(一応私も)IMEの開発経験は多少はあったし、Anthyの作者の田畑さんもいた。Google日本語入力のアーキテクチャ(サーバプロセスとクライアントプロセスに分かれる、ただしサーバプロセスもユーザと同じ権限で動く)などはサーバプロセスがrootで動いていたWnnなどの設計やライブラリとしてリンクされるAnthyなどの経験を踏まえたうえでの設計だったし、経験のある人達による再挑戦という面もあった。ただわたしは自分の経験とはあんまり関係なくMac版の開発とかをやってたし、私としては同じものを何度も作るという感じでもなかったな。
部分書き直し
部分的な書き直しや置き換え、コンポーネントの刷新、という意味ではよくあることだし、そちらはふつうにうまくいっているものも多い気がする。たとえばChromiumのビルドシステムはSconsだったのをGYPという独自のビルドシステムに置き換え、さらにGNというまた別なものに置き換えた。ChromeOSは最初にデモがあったころ(2010年ころ)にはX11/Gtk+ベースだったが、gtk+は早々に消され、のちにX11もなくなってすべて独自実装に置き換わった。ブラウザUIはけっこういろんな書き換えがしょっちゅう起こっている。UI revampみたいなのはよくある。
これってkzysさんのいうようなデスクトップアプリvsサーバサイド、みたいなことではないような気がしている。Chromiumは部分書き直しはしょっちゅうだから。ソフトウェアのつくり、リファクタリングしやすい設計かどうか、みたいな話でもあるように思う。部分書き直しができるような構造になっているソフトウェアはいいっていう話なんじゃないかな。