2006年06月13日

『Ajax イン アクション』は糞本だ

 Dave Craneほか著『Ajax イン アクション』(インプレスジャパン)を8割がた読んだ。
 突然だが、戦場は4つの基本的な要素でできている。
・飢え
・埃
・糞
・シラミ
 これだけは絶対に忘れないでほしい。飢え、埃、糞、シラミだ。
 これらの四大要素があまり目立たない戦場も、ごく一部にはある。米軍の力はあらゆる不可能を可能にするらしく、毎日シャワーを使うことさえあると聞く。だがそういう恵まれた環境は例外だ。戦場は四大要素でできている。四大要素があるのではなく、四大要素でできている。24時間、四大要素のなかで暮らすのだ。
 さて私の経験によれば、Ajax開発は、戦場の暮らしに少しだけ似ている。こちらの四大要素は、多様性、非常識、情報不足、テスト困難だ。
 現代のほとんどのプログラマは、こういう経験をしたことがないはずだ。匹敵するものがあるとしたら初期の携帯Javaくらいか。私は深入りしなかったが、聞くところでは、どうやら四大要素でできていたらしい。

 
 多様性について。
 「非互換性」という問題はよく知られている。だがそれは真実をごまかした表現だ。非互換性というと、まるで2つの実装のあいだで起こることのように聞こえる。だから、「多様性」と言わなければならない。Gecko系ブラウザのバージョンごとの違い、Operaのバージョンごとの違い――思い出しただけで頭痛がしてくる(ろくに思い出せないが)。しかも、私の知っていることなど、ちょっと味見した程度にすぎないのだ。
 
 非常識について。
 どんな人間もかならず常識を持っている。「世の中にはこれとは違う常識もある」などとは夢にも思わず、まったく無自覚に信じていることがたくさんある。同様に、プログラミングの世界にも常識がある。
 まず、JavaScriptという言語自体が、滅びた一族の最後の生き残りだ。JavaScriptのいくつかの機能(プロトタイプベースのOO機能やスコープチェーン)はエキゾチックに見える。しかし実は、1980年代半ばまでは、これが未来になるはずだった。あれほど将来性を感じさせていたSmalltalkが、あれほどあっけなくC++とJavaに敗れるとは、今でも信じがたい思いがする。このとき以来、「なんであれ動的なほうがいい」という考えは、仮説から信仰に変わった。いまだに「これからは動的言語」などと臆面もなく抜かす信者は有害なので全員死んでほしい――話がそれた。
 滅びたとはいえかつては大きな一族だったので、そのつもりで調べれば理解できる。さあ理解した、というところでこれだ――IEのガベージコレクタは腐っている。Smalltalk系言語のガベージコレクタが腐っていて、しかも何年も修正されないままだとは、夢にも思わない。まさに非常識だ。
 Ajax開発では、心の底から「ありえない」と叫ぶしかない非常識な事態に、ほとんど毎日出くわす。
 
 情報不足とテスト困難について。
 Ajax開発では、設計は無駄だ。最小限の設計ではなく、本当のゼロ設計でいい。どんな設計も、確認された事実のほかに、常識に依存している。そしてその常識は覆される。かなりの確率で、設計がまるごと覆される。だから設計は無駄だ。
 設計がなければ、行動パターンは一つしかない。
 なにも考えずにテキストエディタに向かい、書けそうなところから書く。いくつかのブラウザでテストする。動かないところで頭を抱え、printfデバッグをやりまくる。問題の原因をつきとめるのではなく(追いかけてもまるで蜃気楼のようにつかまらない。おそらく常識に囚われているせいだ)、症状を回避するための小細工を弄する――まるでプログラミングを覚えて三週間目の中学生の「ハック」な行動パターンだ。Ajax開発という世界のルールが、それを強制するのだ。
 このハックで得た知識をもとに、正しい設計で書き直す? 残念ながらそれは動かない。なんにせよ設計をした以上、それは必ず常識に依存しており、それは覆される(だから私はAjax用のJavaScriptライブラリに非常に懐疑的だ。prototype.jsがあれほど有名なのは、それ以上のものが作れないからではないか?)。意味のある動作をするアプリケーションなら、おそらく5回は設計をやりなおして、やっと動くようになるだろう――テストしていないブラウザで致命的なことにならないよう祈りながら。
 もし、数十種類のブラウザで同時にテストしてくれる自動テスト環境があれば、物事はずっとよくなるかもしれない。ブラウザウィンドウをキャプチャして正解画像と比較し、マウスクリックもちゃんとエミュレートしてくれる環境だ。……しかし、テストケースごとに正解画像を用意する手間は?
 
 飢え、埃、糞、シラミ。
 いかにも「お手軽にそれっぽいことを書きました」的な本なら、こうした問題に背を向けているのも、やむをえないと思える。残念ながらこの業界では本とはそういうものだ。しかし、653ページの大著が、体系的としか思えないやりかたで四大要素に背を向け、たまに触れたときにも「こういうこともありますよ、でも大したことじゃないんですよ」という態度を取るのは、当然とはいえない。糾弾されるべきことだ。
 そう、私は本書を糾弾しているのだ。本書は、Ajax開発という戦場の暮らしを、まるでホテル暮らしのように見せかけている。
 SafariとOperaにJavaScriptデバッガがないことが、いったいどんな苦しみか。その苦しみを和らげるテクニックこそ必要だ。その話は、なんの一般性もないトリビアの寄せ集めになるだろう。しかし、それを言わずに「デザインパターン」などとぬかす奴がのこのこやってきたら、一発お見舞いする以外にない。だから私が一発お見舞いしているわけだ。
 四大要素のない健全な世界なら、私も文明人らしく優雅にデザインパターンの話に終始したい。しかしAjax開発はそうではない。もう一度繰り返す。飢え、埃、糞、シラミだ。それがAjax開発だ。

Posted by hajime at 2006年06月13日 04:55
Comments

>多様性、非常識、情報不足、テスト困難だ。
>現代のほとんどのプログラマは、こういう経
>験をしたことがないはずだ

あるある。「人生」。

…は置いといても、昨今のWeb原理主義者は四大要素を無視するのがキホンでカッコイイと思ってるので、どうしようもないと思います。イン・アクションもその手の人たちによる、その手の人たち向けの本でしょう。

Posted by: Bar at 2006年06月13日 13:22

http://d.hatena.ne.jp/amachang/20060525/1148582590

ではこれを戦場にお届け。

Posted by: hiro at 2006年06月13日 15:50

http://maccreative-beta.net/tips/0002_macosx_safari_debug_mode.html

これも多少は役に立つかも。

Posted by: ken at 2006年06月14日 11:17