Java は馬鹿が使う言語か?

惜しい。正確には、馬鹿でも使える言語。

決して Java 言語を批判しているわけではない。優れた言語だと思う。だがそれは過去の話で、多くのプログラマJava を好むのは初恋のようなものだからだ。
言語的に古臭くなったとはいえ、それでも業務で Java を使うことは正しい。低レイヤーを隠蔽し、高級言語で高級な記述をする。

問題なのは、低レイヤーを知らないまま、低レイヤーを隠蔽した言語を使用していることだ。

Java は(誕生した当時は)低レイヤーを見事に隠蔽し、「誰でも使える」言語として名を挙げた。しかし「誰でも使える」はすなわち馬鹿でも使える、ということだ。

例えば、生粋の Java プログラマが以下のコードを理解できるだろうか?

int pop( unsigned x ) {
    x = x - ((x >> 1) & 0x55555555);
    x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
    x = (x + (x >> 4)) & 0x0F0F0F0F;
    x = x + (x >> 8);
    x = x + (x >> 16);
    return x & 0x0000003F; 
}

これを理解するのは C プログラマでも容易では無いが、時間をかければ理解できると思う。だが、Java プログラマは時間をかけても理解できないのではないか?

Java は低レイヤーを隠蔽した便利な言語であることは間違いないが、所詮 Java の枠の中での便利さでしか無いのだ。より高度でコアなコードを書こうと思ったら Java ではとても対応しきれないし、表現力的にも心もとない。オブジェクトを生成するとき、メモリに展開する方法を変えたい時どうすれば良い?関数型スタイルで書きたい時はどうすれば良い?


この問題に関して、一部ではあるが「More Joel on Software」で触れられている。

More Joel on Software

More Joel on Software


第8章 "Java スクールの危険" で、Java しか学んでいない学生を採用するのは危険だ、としている。低レイヤーを知らないプログラマはそれだけ発想力が Java 言語に囚われ、Java を使えるかどうかは使えるプログラマかどうか、という判断には使えないという話だ。学生のうちにC言語を学んでおけ、というアドバイスも書かれている。


この「発想力がその言語に囚われる」点について、似たような話が名著「ハッカーと画家」で取り上げられている。


"ほげ言語のパラドックス"と題されたその節は、架空の言語、ほげ言語しか使えないユーザーを皮肉った小噺だ。ほげ言語しか使えないプログラマは思考がほげ言語に支配されて、他のパラダイムや機能を理解しようとする際にほげ言語ベースで考えてしまう。ほげ言語で十分だと思ってるプログラマは、ほげ言語より低機能な言語については低機能であるということが理解できるが、ほげ言語より高機能な言語については「なんでこんな機能があるんだ?ほげ言語でもこう書けるじゃないか」と考えてしまい、ほげ言語で満足してしまう。


結論としては、Java は優秀な言語であるが、パワフルさが足りない上に低レイヤーも隠蔽しているので誰でも使える言語としての地位を築いた。だが、より優秀なプログラマを目指すなら Java で満足してはいけない。