Javaの魅力は言語仕様以外にある
http://www.programmers-paradise.com/tdiary/?date=20060112#p01
Javaの利点や魅力は言語仕様以外にある。
Javaの強みが言語外にもあるのは事実だ.広く普及していること,膨大な資料がありノウハウが蓄積されていること,膨大なミドルウエアやライブラリが揃っていることなどがそうだ.
だがこれらは最初からあったわけではない.なぜこれらが揃ったか?それはやはりJavaが優れた言語だったからに他ならない.Javaが優れた言語だったからこそこれらの言語外の魅力が揃ったのであって,これらが揃っていたからJavaに魅力が生まれたわけではない.
またJavaに関してはタイミングも重要だった.GoFが登場してパラダイムシフトの転換点*1であるとともにインターネットの黎明期でもあったため,それらが追い風となって「イノベーションのジレンマ*2」にあまり苦しまずに済んだのだ.*3
「Javaが嫌い」といった場合のJavaは「言語仕様」を指しており、「JVM」や「ライブラリ」を含めている人はあんまりいないと思う。
いや「JVMはインタプリタだから遅い」「GCがあるから重い」「Stringが不変オブジェクトだから遅い」*4という理由で嫌っている人たちもいた.「多重継承ができない」「マクロがない」「デストラクタがない」*5というのをJavaの欠点として挙げる人もいた.特に初期のJavaでは「起動が遅い」というのも問題として挙げられていた.*6
「Java(の言語仕様)が嫌い」と言っている人の中には(或いは大多数が?),単に技術力が低くてJavaを使いこなせない人が少なからずいる.「多重継承万歳」派や,「UMLモデリングとの親和性が悪い(直接的にマッピングができない)」「デストラクタがないと不便」などというのが典型的なそれ.いくらJavaがシンプルな言語とは言え,誰にでも,それこそ素人でも使いこなせるというわけではない.やはりそれなりの技術力は必要になる.*7
この他にRubyなどのもっと軽量な言語を好む人も少なくないが,これはそもそも使用目的が異なる場合が多いので比較する意味はあまりない.異なる目的に異なる道具を使うのは至極当然のことだ.
それもあるが,これは言語仕様やJVM仕様による部分も多い.パフォーマンスと仕様は切っても切れない関係なのだ.*8それにその論理で行けば,C#はJavaより数段高速に動けることになるぞ.
それは間違いではないが,C++と比べれば大抵の言語は優れた言語になる.
Javaマンセーな人はもっと他の言語を試してみるべき。そうすればJavaの欠点が見えてくるし、欠点が見えてくれば本当の利点も見えてくる。
といいつつ,Javaの欠点を一つも挙げていない辺りはどうかと思う.
*1:http://www.biwa.ne.jp/~mmura/SoftwareDevelopment/twentyfirstcentury3.html
*2:「イノベーションのジレンマ 増補改訂版 (Harvard Business School Press)」参照.
*3:その代わりに,パラダイムシフトに付いていけない人は今でも苦しんでいる.だがこれは常に変化し続けているこの業界の宿命だろう.常に進歩し続ける者だけが生き残れるのだ.
*4:もちろんこれらは初心者にありがちな間違いなのだが.
*5:もちろんこれらは利点であって欠点ではない.
*6:これについてはIEのようにOS起動時に起動して常駐させるのが特効薬だが,同時にこれは起動を遅くする諸刃の剣でもある.今ではiTunesやAdobe Readerをはじめ,OS起動時にメモリに常駐しようとするアプリで溢れかえっていて,これがOSの起動をますます遅くしている.やはりIEの常駐はパンドラの箱だったのだな.
*7:まあ平たく言えば「バカに付ける薬はない」というところか?そういう人には,さっさと引退してもらった方が世のためです.
*8:「大量の人と金を」と言うが,MSやIntelやIBMのような超巨大企業ならともかく,SUNは技術力はともかく規模としてはさほど大きくないはず.人数でも資金でも,それほど多くをつぎ込んだとは考えにくく,JVMの開発者が僅か数名だとしても不思議はない.ソフトウエア開発は開発者の質が重要で,量はあまり意味がないのだ.