2008-04-13

It's time for ...

HTTP の神 Roy Fielding による Apache 3.0 の 講演をストリーミングで拝聴した. (スライド PDF.) スライドの副題にもあるとおり, Apache 3.0 の計画は大風呂敷 (tall tale) で しばらく実現の見込は薄そう. ただ, コミュニティが大きな書き直しに至るまでの話は面白かった.

http-dev メーリングリストの流量を時系列にプロットした Fielding は, 書き直し(メジャーバージョンアップ)開始の手前では ML の流量が減衰していると指摘する. 開発者コミュニティが活力を失っているのだと. そんな時に "がばっと書き直して刷新しようぜ" と言い出すとコミュニティは活気づく. そんな話だった. 2.0 もそうだったし, 3.0 も似た状況にあるという.

実際には言いだすだけでなく, コードが伴う必要もある. 調べてみると, 2.0 の時も大きな fork のマージで実装が進む場面があった. Dean Gaudet は 1997 年に 新しいプロセスモデルを提案 し, その一年後に MPM の初期バージョン をコミットしている.

それがぼくにはうんざりだったから

Apache のように大きな書き直しを生き延びるソフトウェアはすくない.

ソフトウェアの書き直しは悪とされおり, 私もおよそ異論はない. コードを仕上げるコストがかかり, 失敗のリスクがあり, 既存の資産を無駄にする. この問題は Web でも盛んに議論されており, なぜか Wikipedia にまとめページまである. あとは Chad Fawler の議論 とか.

一方で, これらの主張は組織や利用者の視点に偏りすぎているとも思う. ソフトウェアを書き直したいと思うとき, プログラマはそのコードにとりくむのを苦痛に感じている. Fielding も, 既存のアーキテクチャがもつ制約が開発者の fun を妨げていると語った.

たとえば誰かが "修正するより書き直した方が早い" というとき, そこには既存のコード上で働く当人の意欲が低く, 作業も捗らないという含意がある. 鋼鉄の意思を持つプログラマなら, 動くコードを相手になんとかする方が間違いなく早いだろう. (例外もあるが, それは本当に稀なことだ.) 書き直しは感情の問題なのだと思う.

開発者が書き直しの必要を感じた瞬間から, 開発者個人の利益と組織や利用者の利益は対立する. 開発者は良いコードで楽しくやりたい. 利用者はさっさと動くコードが欲しい. こうした相反は, 望ましくはないけれど, よくあることでもある.

では関心の不一致をどうのりきるか. 顧客の立場でされた議論はもう山ほどあるから, いまはプログラマの側から考えてみる.

まず, 鋼鉄の意思を身につける, という手がある. あらゆる ugliness を克服し, it just works を地でいくプログラマ. リファクタリングもサービスしちゃう. 頼もしい. 引く手は数多だろう. けれど, それは楽しいことだろうか. 漸近的改善の長い道程に耐えられるか. 改善の速度は悪化の速度を追い越せるか. そんな均衡が続くなか, 良いコードを積み重ねる喜びを諦めてまで, 仕事を続ける価値はあるのか? 答えは人それぞれだ.

駄々をこねることもできる. 会社員なら, 書き直せないならやめる! とわめく. (普通はもっと穏当だろうけど.) コードを維持するよりその開発者を留めておく方が重要だと判断されたら, 交渉は成立する. ただ, ツケは高くつくだろう. 実質上, 書き直しのコストと同じだけ金をよこせというのに等しい. それにもし失敗したら...でかい博打なのがわかる. 博打うちを好むチームはすくないし, 規模によってはそもそも博打すらできない. 千行のコードなら, わめくまでもなくこっそり書き直せばいい. 百万行を書き直すといったらクビ以前に笑いとばされて終わりだ. コミュニティ主導のソフトウェアでも, 相手にされず消えていく "the big idea" は散見できる.

多くの場合, この両極端の間にある妥協点を探ることになる. 妥協のバリエーションはいくらでもあるだろうから列挙はしない. 決着がつかず睨みあったまま, 月日が過ぎていくこともあるだろう. 単に合意を諦め, 開発者はプロジェクトを鞍替えするかもしれない. スピンアウトして競合となることだってありうる. (例: Subversion の開発者はもともと CVS をつくっていた.)

当人は認めないだろうが, "書き直したい" と主張する開発者が固めた理論武装の裏には, "もううんざり" という素朴な本心が隠れている. 問題解決至上主義者がそれを解さないまま鎧を貫くと, 虚しく血を流すことになる.

利益相反は個人の分が悪い. 書き直しに正義はない. 誰もがそう言うだろう. しかし忘れるなかれ. 血塗られた正義が花咲くこともないのだ. 貫かれた心臓が, 鋼鉄製でない限りは.