« 自分色に染めてしまいたい衝動 | トップページ | ITシステムの投資対効果 »

2006年9月28日 (木)

Javaの次に来るもの

Javaの時代は終わった?

"Beyond Java"という書籍は初めて知りましたが、面白そうですね。有名なPaul Graham氏のエッセイ、 「普通のやつらの上を行け」 でいうところの、「普通のやつらの上」が、近いうちに「普通」になる、というようなことですかね。読んでみたいと思います。

本を読んでないので、内容については何もいえないのですけども、「習得に何年もかかるようになってしまった、というJavaの複雑性」という点について、少し考えてみたいと思います。

--
1) 溢れる慣用句、ギミック
これは、C/C++/Javaの各言語共通の特徴だと思います。言語仕様をシンプルにした結果、ある処理を書きたいとき、自然な形で書く方法がなく、これをやるための「慣用句」が、言語仕様の外に大量に生まれるという。

2) 静的型付けとデザインパターン
「静的型付け」、つまり、コンパイル時にコンパイラはオブジェクトの型を知らなければならない、というのは、実のところ、オブジェクト指向とは、あまり相性がよくないのでしょう。ある種の「デザインパターン」-Abstract Factoryとか-あるいは、Dependency Injection(依存性注入)などは、この「静的型付け」による制約を何とか回避するためのトリックのようにも見えます。実際、Javaのフレームワークは、「デザインパターン」で溢れていますし。

3) オブジェクト参照型と組み込み型
Java言語を初心者に教えるとき、おそらく一番の壁は、「オブジェクト参照型」の概念ではないでしょうか。これは結局、「スマートポインタ」の一種だと思うのです。C/C++での、「ポインタ」が学習の難度を上げている構造が、そのまま持ち込まれていると思います。もちろん、ポインタよりは「スマート」で「安全」なのですけど。

実のところ、Rubyも「オブジェクト参照型」のアイデアを全面採用しており、この面では差はないです。ただし、Rubyが「全てがオブジェクト(参照型)」であるのに対し、Javaには別に「組み込み型」というのがあります。これが、型によって変数の扱いを変えなければならないという、煩雑さをもたらしている面はありそうです。
--

Javaのような「重い言語」に比べれば、Rubyでなくとも、PerlとかPHPとか、あるいはLisp(!)などの「軽い言語」の方が、生産性が高いのは、当たり前という気もしますけど。もちろん、どのようなプログラムを開発するかにもよりますが。

「オブジェクト指向」という枠内、あるいはJavaの代替となるもの-より生産性の高いJava-という視点では、「Rubyが最良」というのは頷けます。

JVMの何がそんなに「イケているのか」は、ちょっと想像がつきませんでした。本を買って読んでみます。

--

ハッカーと画家 コンピュータ時代の創造者たち Book ハッカーと画家 コンピュータ時代の創造者たち

著者:ポール グレアム
販売元:オーム社
Amazon.co.jpで詳細を確認する

|

« 自分色に染めてしまいたい衝動 | トップページ | ITシステムの投資対効果 »

コメント

ronさん、こんばんは!
Javaと言えば携帯アプリもそうですが、キャリア毎の仕様が強すぎて「Write Once, Run Anywhere」が崩れたと言われていますね。

投稿: 手文庫 | 2006年9月29日 (金) 01時22分

手文庫さん、コメントありがとうございます。

私は、「Write Once, Run Anywhere」は、Javaの利点と主張するには弱いと思っています。デバイスの差をJVMで吸収するためには、各デバイスの最大公約数を取らざるを得ず、そうすると、標準APIでのサポートは貧弱にならざるを得ないと思うからです。

Webアプリの世界でJavaが成功を収めたのは、Webという仕組み自体が、「クロスプラットホーム」であったからではないでしょうか。

穿ちすぎかもしれませんが、「Write Once, Run Anywhere」は、当時のプログラマ達にバイトコードを受け入れさせるための方便ではなかったか、と思います。Javaがバイトコードを採用した主な理由は、クラスライブラリの実行時ロード・リンクを実現するために、実行ファイルのレイアウトを、各プラットホームで共通にするためであろうと思うのですが。とすれば、「Write Once, Run Anywhere」は、マーケティングのためのバズワードにすぎないかと。

しかし、今やRubyのようなインタプリタ言語をメインに使っていこうというのですから、この世界の変化の激しさを、改めて思わざるを得ないですね。

投稿: ron | 2006年9月30日 (土) 01時17分

ronさん、こんばんは!
なるほど。勉強になります。
確かに共通プラットフォームといって効果を謳われても、こんなものだったの?と感じることがありますものね。

投稿: 手文庫 | 2006年10月 5日 (木) 01時53分

手文庫さん、こんばんは。

「Write Once, Run Anywhere」というフレーズは、Javaを普及させる上で大きな功績があったと思います。でも、このフレーズにSunが自縄自縛に陥ってしまったようにも思えますね。

いわゆる「デスクトップ分野」では、Swingなどの”Pure Java”なものよりも、Eclipse SWTのような、「プラットフォーム別」の方が優れているように思います。また、「プラットフォーム別」でも、Javaは極めて高いポータビリティを持つと思うのです(「一度書けばどこでも動く」とまではいきませんが)。

これは現時点での結果論にすぎず、これからコンピューティングが進化していけば、Sunの「戦略」の方が正しい、ということになるかもしれませんが。Swingも改善は著しいようですし。

投稿: ron | 2006年10月 6日 (金) 01時20分

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« 自分色に染めてしまいたい衝動 | トップページ | ITシステムの投資対効果 »