2008年1月20日日曜日

優れているものがニーズがあるとは限らないということ

先回のブログでいまいち消化不良な感じがしたので少し整理。

プログラム言語というツールに優れている、優れていないという基準があるとすると、PHPは他と比べて優れていないと私には言える。Javaもしかりである。たいていは関数型言語やそのエッセンスを取り入れている最近の言語たちと比べて、あの言語たちはあんなことをこんなに簡単にシンプルに書けるのにPHP(Java)はなんでそれができないの?ということが多い。

同じことをやろうとすればPHP(Java)でもできるのだけど、ちょっと似たようにはね。でもそれはあまりにも冗長に記述しなくてはならなかったり難解にならざるを得ない。たとえば高階関数だったり、クロージャであったりという機能がない。それに似たことをしようとすると、非常に複雑になってしまう。たとえばJavaScriptで表現できるクロージャをJavaで表現しようとするとまずはそれ専用のクラスを作らねばなら無い。たとえば、Pythonのlambdaで無名関数をつくるのと、PHPでcreate_function()使って作るのとではどちらがシンプルにわかりやすくかけるだろう。これらは一目瞭然である。

これは言語仕様自体が持つ、ポールグラハム的にいえば「パワー」の違いである。
間違ってもライブラリを使ってできることの数を比べているのでない。
あくまで言語仕様自体の持つパワフルさである。

ではなんでPHPやJavaがこれだけ普及しているかというと、まったくそれは、言語自体のもつパワーの違いに由来していないことがわかる。むしろ特定の領域に向けたライブラリによって簡単にできることがたくさんあるという多機能性故にではないか?PHPなどはコンパイル時に指定するパラメータによってどんどん機能を付け加えていくことができる。そして変な長い名前の関数が知らないうちに増えていって機能が付け加えられることになる。ユーザは与えられた特定領域に適したライブラリを使って問題を簡単に解決することができる。プログラマや開発者が覚えるべきは、どう問題を解くかということやコード自体の価値向上ではなく、それに使えるライブラリがあるかどうか、その使い方が同なのかということだけである。

もちろんライブラリが充実していることってのは現代においてプログラミング言語の実用性に大きく寄与するぶぶんでもある。最近のLL言語、PerlとかPythonとかRubyとかはこういったライブラリの充実度と言語自体のパワーがバランスの取れている言語であるため、最近はひそかにユーザが増えていっているようだ。PHPに不満のある人はもう少しパワーのある言語に移っていくのかもしれない。最近の関数型言語のブーム?もそういった延長線上にあるのではないか。

とにかくPHPのようなはっきりいってライブラリを使う目的だけの言語ってのは、言語にパワーが足りない分、問題解決においてライブラリが既存にあるかどうかって問題は深刻である。逆にライブラリの存在しない分野に関してはまったく歯が立たない。それでもPHPが普及しているのは、ある分野と規模とにぴったりしたライブラリが充実していることだと思う。それはWebのサーバサイド言語でHTMLをレンダリングする目的で使われる、中小規模のシステムに特化していると言うことではないか。逆にPHPを使って高速な物理計算をするとか、並列処理の問題を解いたりするいことや、一般的に言って複雑なロジックを解決しようとかは思わないだろうし、できないであろう。パワーのある言語はそこが違う。そういった領域に適している言語として形を変えることもできるからである。すでに大規模領域のシステムに関しはPHPは今のままだと適さないということもわかってきていて、Zendとしてはここを大きく改善していきたいところだろうが、楽天がPHPからRubyに主力を移したことなどからもわかるとおり、世の中は大きく動き始めている。

私もしがない個人プログラマとして、客を持つ案件のある身としては、いくらHaskellがパワーがあるといってもそれシステムを組むとは客に言うことができない。やっぱり私のような規模だとPHPの案件が多かったりする。こうはどうしようもないことである。プログラマで無い人にいくらHaskellが優れているかと説明してもわかってもらえるわけはないし、それより彼らはそれを理解できる他のプログラマがどれだけ存在するとか、すでにどれだけ現実に実績を持って使われているかということや、それにまつわるコスト面の方が問題なのである。自分でレンタルサーバを借りてHaskellいじろうかと思っても、まずはじめからインストールされていることはないだろう。そこではPerlやPHPならすでにインストールされていてすぐつかえるはず。そういった外的環境の面もある。

これと似た面をもつものとして、WindowsとMacの話がある。
私はMacユーザである。
OSの本質としてUnixペースの基盤を持っているということはMacOSにとっておおきなアドバンテージだと思っているし、かれら(Apple)のもつUIデザインの秀逸さには敬服する人間でもある。
OSのパワーとしては根本的にWindowsよりパワーがあると思っている。
(これに関しては異論反論あることはわかっている。これに関しては詳しくは書かない。)

でも私はWindowsもつかう。
それはある特定の領域の問題を解決したり、特定のサービスを享受しようとする場合に非常に優れた外的コンポーネント(無料のソフトウェアとか)がたくさん存在するからである。
またWindowsを使うユーザはおおいのでおのずからそれらの上でちゃんと動くかを確かめる必要もある。仕事をするのはWindows上がどうしても多くなってしまう。僕好みのちっちゃいノートPCがAppleにないってこともある。

これもその物自体がもつパワーというよりは、ある特定領域に向けた問題の解決に適した外的コンポーネント(ソフトウェアやサービス)がたくさんあるかどうかの方が大切に思われているということの証であろう。

多くの人にとってコンピュータはOSはプログラム言語は、飯を食うための種であったり、そのための単なる道具にしか過ぎないだろう。そのじぶんの狭い領域に対して問題を安全に解決してくれそうなものならなんでもいいのである。ハッカーの価値基準がどうかなんてまったく関係ない。

そういった側面からすると、WindowsはすばらしいしPHPもすばらしいということなのだろう。
こういったところに求められるのは、何度も書いたとおり、自分の特定領域の問題をいかに解決してくれそうな道具をそろえられるかどうかである。なにかAみたいなことをしなきゃいけないんだけど、どうしよう。そうだググッてみるか。あー、あったあった、Windows用のそふと。これこれ、これがあれば解決できる、しかもタダだし。。RSSのパースをしたいんだけど、どうしよう、どこかでRSSのパースを手伝ってくれるライブラリないかな?PEARになったっけ?あったあった、これこれ、これのつかいかたはっと。。あーあったあった、そうかこうつかえばいいんだな、楽勝!!
このプログラマはおそらくRSSの仕様から調べようという気はないだろう。
かれにとってライブラリが無いということはそれができないということを意味するからである。
そうなると、外部にあるフリーソフトやサービス、ライブラリが平均して多く存在するほうが安心できるぷラットフォームになると考えるようになるのだ。

これとプログラム面で言うと、IDEの存在というのもある、便利にいろいろな作業を省いてくれる機能を持っているIDEがあると、実に簡単にコードを書くことができる。プロデューサーとしてのプログラマではなく、コンシューマとしてのプログラマ。最近ふえてきているのだろう。

私にとっても、一人で食っていくということは趣味とは別物の話である。
WindowsやIEを無視できないし、PHPも書かざる得ない。
しかも一人で生産性も挙げないといけないんでIDEも使う必要があるだろう。

そして今日もOSやプログラム言語に毒を吐きながらそれを使い続けていくことになるだろう。

0 件のコメント: