Java Performance TuningというサイトのNewsletterを購読しているのですが、今回のNewsletterがRubyネタでした。
前置き
So many people have been shouting at me that "Java has peaked, time to jump into Ruby" that it was time to find out about the hype.
JavaNewsletterだけあって、いきなり飛ばしてくれます。多くの人が「Javaはピークが過ぎた、今こそRubyへジャンプする時だ!」と叫んでいるけど、それが嘘だよーんってことを見出すときだよ、と言っています。
Rubyなんてラララ
I found out that Ruby will reduce maintenenance costs because it takes a third of the lines to express the same things as in Java. That's a big plus. But I alsofound out that Ruby is not going to be able to handle any significant part of the hugely concurrent multi- threaded apps that I tend to deal with - apps that are the present and future of programming.
(中略)
I listened when Elliotte Harold tells me that Java developers are looking to Ruby and Rails - but then I spoke to some Java developers who have made that move, who tell me that it's a great system to get that initial prototype up and running, but that they end up with a mess when they try to advance the system.
Rubyが嫌いなのかなぁと思うぐらいちょっと感情的な文章が続きます。内容をザックリまとめると、
- RubyはJavaの3分の1のStep数で同じことが出来るからメンテのコストは下がるのはわかったけど、巨大で同時に物事が発生するマルチスレッドのアプリが作れるようにはならないってのもわかった。
- RoRは初期プロトを作るにはGreatだけど、そっから進めていこうとすると混乱のまま終わるってのを何人かのJava開発者から聞いた。
まず「concurrent multi- threaded app」について。Rubyで非同期並行処理ができるかできないかってわかってないんだけど、恐らくデフォルトでは出来ないんだろう。調べる時間めんどかったんで、その辺コメント等で教えて頂けると超うれしいです。
これってEnterpriseではかなり致命的な弱点。
Rubyに対する批判の代表例に、同期しかできねーのかよってのがあると思う。Enterpriseのアプリではいちいち同期なんてとってらんねーってぐらいトランザクション量が発生する。金融系だと一度飛んだ約定やカードの利用トランザクションデータは、「何が起ころうとも」データを保障しつつなおかつ非同期でやりとりすることがもとめられる。この辺りをWebSphere MQなんかでやったりするわけです。
企業の基幹システムを組もうと思ったら、同期だけじゃ何もできない。だから、「Railsでエンタープライズ」なんて話を聞くのはちゃんちゃらおかしかったのである。Webアプリの部分なんて、基幹システムのほんの上っ面だ。裏で動くメッセージングシステムがあって初めて、使えるシステムになる。
間違い無い。
だが、しかし。福音来る。フューチャーアーキテクト社のkiwamu氏が、AP4Rをリリース。もしもあの会社がjava2rubyをガチでやっていく方針ならば、金丸社長はこの開発者の方々にドカンと特別賞与をあげるべきだと思う件。今後の展開に期待ageage。
2番目のプロトから先に行くと混乱するってのは、RoRだから悪いとは言い切れん。混乱するワケが、はぶさんのRailsやChuraのいけてないところにあるこの指摘ならば分かるんだけど。
とりあえず、「こういうDB設計があるとします」なんてところから始まってるプロダクトについては、技術的にいくら素晴らしくてもお客様の使い勝手に対する要件をクリアするということを含めたプロジェクト全体のスループットからみたら、所詮部分最適化でしかも下手したら全体の生産性に逆効果になりかねない代物に過ぎない、と判断します。
これが混乱の元なんだろうか。
使われているプログラミング言語ランキング
Newsletterの中の人は↑コレを見て、こんなことを言っております。
So it looks like my analysis splits out to languages holding widespread dominance (Java and C/C++); languages that were once "hot" (Perl, PHP, VB) but never made it to full dominance and may already be on their way out; and languages that are now "hot" (C#, Javascript, Ruby, Python, Delphi).
JavaやC/C++という広く使われている言語、つまりメインストリームがあって、かつて「hot」だったperl,php,VBという言語は決して十分な支配力をもつことはなかった。そして、今「hot」なC#, Javascript, Ruby, Python, Delphiという言語も同じ道をたどるんじゃないだろうか、ということを示唆しています。
これは実にシゲキックスな指摘です。Hotな言語は決してメインストリームになることは無い、って言ってるんですから。
同じことを言っているエントリがこれ(英語)。コメント欄、盛り上がり杉。
その理由をかいつまんでご紹介。
- Rubyの先進的で複雑な文法・言語構造を、VBやPHPプログラマが吸収するにはとっても難しい。
- RoRは先進的すぎる。才能ある開発者にはいいけど、一般の開発者との間には大きなギャップがある。
- 信頼できるIDEがない。EmacsがCoolだぜなんて言ってる場合じゃない。今は1996年じゃない、2006年*1だ。IDEに頼るのを恥じるのは、おろかなことだ。
- RoRユーザーが狂信的。もうちょい謙虚になってもit never hurtsよ、と。悪いことにはなんないよって訳すのがちょうど良いかも。
- RoRだけしか有力なフレームワークが無い。何か対抗できる強力なライバルがいないと進化が止まってしまう恐れがある。
- Enterprise用途に耐えうる能力があるのか、スケーラビリティがあるのかが不明確。
- ISPのサポートが無い。つまり、ホスティング業者等がRubyをサポートしてない。PHPは事実上どこでもサポートしてるようなもんだけど、Rubyを使うなら自分でサーバー立てたりする必要が出てくるのではないか。
骨子は「Rubyは一般人には先進的過ぎる」ってことのようだ。
個人的な総括
まず、「メインストリームになれるかどうか」と「Rubyをビジネスに取り入れる価値があるかないか」は全く別の話である、と思う。「メインストリームでない=やる価値が無い」という式は成り立たない。
メインストリームになれるってことは、極論すれば誰でも出来るっていうことだ。同時に教えるのが容易だってことだ。JoelのJavaスクールの危険には、「OOPの問題で躓いても、プログラムは依然として動き、ただ保守性に違いが出る。しかしポインタで躓くなら、そのプログラムはセグメンテーションフォールトを起こす」とある。これがJavaが受け入れられた理由でもあると思う。いいんだよ、ポインタなんか意識しなくて。Javaは非本質的な複雑さがある言語だけど、システムを作るプログラミング言語としては敷居が低いのは事実だと思う。だからnext COBOLとか揶揄されちゃうんだけど。その意味では、Rubyの方が敷居が高いのは間違いないだろう。
マジョリティを意識する、言い換えればJava化していくことでRubyはメインストリームになるのだろうか。それによって本来持っていたHOTさが失われてしまうんだろうか。それがメインストリームになることと同義なんだろうか。
Rubyには色々考えさせられます。
*1:このエントリは2006年4月に投下された