元ネタは 「怠慢はプログラマの美徳」というけれど というエントリ。

スクリプト言語はJavaに恋している

スクリプト言語はJavaに恋をしているのです。寝ても覚めてもJava、Javaと騒ぎ立てます。 PHPもPythonもRubyも、いつもJavaとの比較を行います。 XXのシステムはPHPだとか執拗にJavaを意識します。君たちはそんなにJavaが好きなのかい？

JavaはXXでよくないからスクリプト言語であるXXを使いなさい、というプロパガンダ記事をよく見かけます。 対して、こういう理由でJavaを使うべきだ、というプロパガンダ記事は随分と少なくなりました。

つうかね、Java がほんとに使いやすくなったら、スクリプト言語なんてイチコロなんだよ。今、スクリプト言語に人気があるのとは対照的に Java に元気がないのは、Java 自身の失態がいちばんの原因だよ、ほんと。

まるで好きな女の子に相手にされなくて強がって陰口を叩いているかのようです。 Javaはたしかに融通がきかないところもある。変数を扱うたびに型、型、型。 きっちりとしたその性格はキャリアウーマンのごとく。

対してスクリプト言語は少年のごとく。型なんて面倒なものいらねぇよ。とにかく作ってみようぜ！

でも、そんなスクリプト言語の憧れの的はやはりJavaなのです。 Javaに対して「俺たちの魅力」をアピールしている。 Javaはすでに確たる地位を手にしているので、わざわざプロパガンダしてまで交際を申し込む必要はないのです。 黙っていても富豪令嬢のようなJavaには言いよる相手ばかりなのですから。

Javaはもう、シェアを奪いに行く立場ではなくなってしまった。 シェアを取ろうと躍起になる「元気さ」は確かにないかもしれません。

怠慢はプログラマの美徳

Java 屋とスクリプト言語屋の間には、「めんどくさい」と感じるセンスについて超えられない壁が存在している。



本質的でない事柄に関する記述があったときに、スクリプト言語屋は「めんどくさい」と感じ、Java 屋はそれを感じないか、または「これは必要な冗長性だ」と本気で思い込んでいる。

ここで重要なのは「本質的でない事柄に関する記述」とは何かという点です。 Java屋が言う「必要な冗長性」がスクリプト言語屋の前提の下では無意味で面倒くさいものである、 というのが実態でしょう。

スクリプト言語というのはフットワークの軽さが売りで、ちょっとしたアイデアをすぐに形にするには都合がよい。 反面、刹那的な代物で、保守性に乏しく、巨大で複雑なシステムを構築する言語としては適さない代物です。 世の中もそれが分っていて、スクリプトに都合のよい仕事はスクリプトで行うし、 重厚長大なシステムはJavaなどの巨大建築向けに設計された静的言語を用いるのが通例です。

これらの適用箇所の違いは、さまざまな前提の違いを生み出します。 小規模なソースコードではデメリットにならないことが、大規模になると無視できなくなったりするわけです。

その点を隠してスクリプト言語はいいよ！というのはプロパガンダか、無知かのいずれかでしょう。

怠惰のセンス

さて、前置きが長くなりましたが、スクリプト屋とJava屋の怠惰のセンスの違いについて見てきましょう。 あらかじめ断わっておきますが、壁ではなく方向性の違いなのです。 どちらかが優れているというものではありません。

スクリプト言語は手軽さを売りにしています。手軽であることが正義という世界ですから、 怠惰の方向性もまた、記述の手軽さといった方向に向かいます。

そのため型推論を好みます。プロトタイプベースのオブジェクト指向を好みます。 勢いで作って、さくさく動かすことを掲げ、その障壁となるものを排除するように怠惰であろうとします。

IDEなど使いません。高機能な統合IDEは起動に時間がかかります。ちょっとしたソースを書くのに そんなものを使ってられない。ちょっとしたテキストエディタにシンタックスハイライトの機能があれば十分。 デバッグは動かしながらやればいいのです。まずは動かすまでが楽であること。それがスクリプト屋の怠惰のセンスです。

Java屋は堅牢さを重視します。何千というクラスを取りまとめ、何十万行というソースを統括し、 基幹システムとして鎮座する機能を作り上げる使命を背負っているからです。

Java屋の怠惰のセンスは重厚長大なシステムを設計・製造・運用・保守していくための怠惰です。 静的な強い型付けを好みます。変数を扱うたびに型、型、型。 しかし、そうすることでコンパイルの段階で、システムを動かすまでもなくバグを取り除けるのです。 Java屋の望む怠惰はそういう怠惰です。そしてそのための面倒は大事の前の小事にすぎないと考えます。

「Write once, run anywhere」という合言葉はJava屋の怠惰の一端を表しています。

高機能なIDEを日常的に使います。テキストエディタでプログラムなんて書く気も起きません。 EmacsでJavaを書いてはいけない とEmacsの開発をしたジェームス・ゴスリン氏が語っているぐらい（彼はJavaの生みの親でもある）。 起動時間が長い？朝にIDEを起動して一日中使うのだからなんら気になりません。

Java6でスクリプト呼び出しができるようになった理由

Javaのような静的言語とスクリプト言語は、そもそもターゲットが違っているのです。 Javaに恋してJavaの領分をスクリプト言語で行おうとする人もいることでしょう。 でも、うまくいっていますか？もはやJavaは空気のように当たり前に基幹システム使われています。 スクリプト言語がそれを置き換える日はこないことでしょう。

逆にJavaがスクリプト言語の代わりになるのであれば、そもそもスクリプト言語が生まれ来ることもない。 「つうかね、Java がほんとに使いやすくなったら、スクリプト言語なんてイチコロなんだよ。」 というのは、スクリプト言語の領分をJavaで代替えできるならという話。 そう、Javaはスクリプト言語の代わりにならない。逆にスクリプト言語もJavaの代わりにならない。

そこで適材適所たるこれらを連携する機能性を、ということでJava6.0から追加になったのが javax.scriptパッケージなわけです。

Javaに恋するスクリプト言語には、JRubyやJythonといったようにJavaVM上で動くように Javaのバイトコードを書き出すようなアプローチを試みたものもあります。

それとはまた違った方法で、Javaとスクリプト言語はうまくその長所を生かせる 土台ができてきたということなのです。

果たしてスクリプト言語のアプローチはJavaに届いたかのように見えます。 この先、その仲がうまくいくのかどうかは注目していきたいところですね。

投稿日時 : 2008年4月28日 14:01