俺はほぼすべてのソフトウェアが嫌いだ! #28

公開日: 2012-02-26


ビルドの話はやっぱあまり受けないんだよね、という話を知人にしたところ、「githubとかNode.jsとか話題のキーワードを散りばめればいいんじゃないですか」という助言をもらった。確かにそんなキーワードが目に入ったら私だって気になって読んでしまう。C++のビルドなんて話題はまあ自分でもスルーしてしまいそうだ。

というわけで今回は Node.js の作者の Ryan Dahl 氏がしばらく前にポストして話題になっていた記事[1] を紹介したい。

"I hate almost all software" (俺はほぼすべてのソフトウェアが嫌いだ!)という一文から始まるこの文章は多くの共感(と多少の反発)を呼んだ。原文を読むことをおすすめるすけど、かなりはしょって意訳するとこんな内容だ:

ソフトウェアは複雑でけしからん!Unixの真髄はシンプルで美しいのに、実際に俺たちが相手にするのはDBusやらboostやらautoconfやらdpkgやらの複雑な連中だ。その上、俺たちはこの上にさらに複雑性を乗っけている。今や開発するには$NODE_PATHなんてものまで覚えないと始末だ。でもそんなことはウェブページを見たいだけのユーザに取ってはどうでもいいんだぜ!bashのタブ補完だとかzlibのリンクが動的か静的かなんて本当にどうでもいいんだ。そのうちこの蓄積した複雑性が、新しく全部作り直す複雑性より大きくなるときがやってくる。そのときは boost も glib も autoconfもすべてトイレに流してしまえ!NaNがnullと等しいかどうかとか、そんなプログラミング言語の重箱の隅を覚えて喜んでる奴、お前は全体がどれだけ腐っているということ何もわかっちゃいない!ウィンドウマネージャーとかエディタとかをせっせとカスタマイズして喜んでる奴!ディレクトリの階層を増やしている奴!問題を解くのに必要じゃないことをやってる奴!お前らも何もわかっちゃいない!glibのオブジェクトモデルなんか誰も気にしちゃいない!ソフトウェアにとって唯一大事なことはユーザエクスペリエンスだ。

この気持ちはよくわかる。ソフトウェアはやたら無駄に複雑にみえるし、ただでさえ既に複雑なものの上にさらに何かを乗っけて何かを作るのは、はたしていいことなのか疑問に感じることがある。ソフトウェア開発者が自己満足に陥りがちなのも事実だろう。ついでに、個人的にはglibのオブジェクトモデル (gobject) ほど厄介なものはないと思っているので [2]、その辺もつぼにはまった。

ソフトウェアにとって一番大事なのはユーザエクスペリエンスというのも仰る通り。とはいえ、これは頭では分かっているけど、普段コードと格闘しているときは、すっぽりと頭から抜け落ちてしまうものなので、たまにはこういう正論を耳にするのもいいものだ。

氏の意見に多少の反発があるのも理解できる。必要性があってこその複雑性であるとか、ソフトウェアはレガシー化する運命にあるので、Node.js もいずれはトイレに一緒に流されるもののリストの一員になるだろうとか、そういう突っ込みはいくらでもできると思う。でもこういったことを勢い良く書いて広く読ませてしまうというのは一つの能力だ。素直に面白いと思った。

[1] http://tinyclouds.org/rant.html
[2] gobjectではクラス一つ定義するのに100行くらい必要という話を以前に書いた: http://0xcc.net/pub/webdb/bs-06.html

Satoru Takabayashi