良い言語とは何か

 最近PythonJavaを同じくらいの頻度で使っている。Pythonでプロトタイピングしてみてから、Javaで作り直したりする。
 それはPythonの勉強もあるためだが、両者の言語の良いところ取りが出来るからに他ならない。

 少なくとも良い言語とは主観に依存する。どんなプログラマが「これは良い言語だよ」と言ったとしても普遍的にそれが良い言語であるとは限らない。

 どんな良い言語でも使えない分野があればそこでは何もできない愚図と変わらない。
 
 生産性だとかも関係がない。Javaは初心者にいらんことをさせないためのルーリングを明確にした言語だが、それがJavaを良い言語とする訳ではない。
 ケースバイケースで良い言語となる場合があり得るだけだ。
 余談だが、僕は初めてJavaを使ったとき、まずしょぼいC++だと思い、使い込んでいくにつれこれほど素晴らしい言語が世界のどこにあるだろうか、と思った。天命を受けた気分だった。

 Javaは一般的な評価として自由度が低く、重い言語だ。これは認めざるを得ない。
 が、JavaEclipseを手に入れた。
 Eclipseは起動は遅いエディタだが、様々な色表示や、補完、エラーチェック、自動import機能などでプログラムを組むのを楽にしてくれる。
 メンバの色識別ができることでファウラーが言うようにメンバに_をつける必要性も薄まった。
 が、これもまた言語の良さに関係はない。

 僕はこう考える。
 良い言語はプログラマのミスを束縛する。ミスを防ぐが故に重量であるが比類する信頼性を誇る。
 良い言語はプログラマの思考や手段を束縛しない。何かをするためにサッと取りかかれるほどに軽量であり自由度を誇る。

 Javaはある程度の条件でこれを満たしていると言える。
 例えば、

  • C/C++のようにnull(NULL)アクセスを無視しない。
  • finallyを持つ適切な例外の処理を許す。
  • 多重継承を持たず多重のインターフェイスを持つことができる。
  • プリミティブな型とオブジェクト型を持ち使い分けることができる。
  • 様々な高性能ライブラリが存在し、気軽にjarを組み込み試すことができる。

 他にも色々と要素はあるが、これらは自由度であり、束縛である。

 例えば、すべてがオブジェクトである言語ではプリミティブな型を許さない。
 これは束縛である。プリミティブを選ぶ、という自由度はない。
 原始的な型を許すだなんてお笑いだと思うかもしれないが、原始的な型がなければ効率的にアクセスできなデバイスはまだまだある。RubyPythonが動かない分野は残っている。そこでは、これらの言語はクズに等しい。

 また、一つ一つの要素が退化に思えてもそれは進化の一つであり、そうすることを選んだ、に過ぎない。
 もちろん、Javaだってポインタを選ぶ自由度がなかったり、メモリアドレスにアクセスする自由度はなかったりする。

 どうしたって一長一短なのだ。
 だから、どんな言語でさえ折衷にせざるをえない。
 人間が模索しているのだから、最善の言語はあり得ない。
 もし、最も優れた言語が誕生して、すべての言語がそれに置き換えられるようなことがあったとすれば、思考の停滞を意味する。

 もうそれより優れたものは生み出されない。それこそ真の意味での束縛だ。だって、他の言語を選ぶ自由度すらない。
 なので、例えばJavaを(もしくはfoobar言語を)絶対的に良い言語だとは口が裂けても言えないが、Javaの続けている進化はそれを愛する人にはかならず福音を与えてくれる。

 言語が与えてくれる力をプログラマの動きを縛り付ける不要なルールであると見なすか、プログラマの行く末を支えてくれる命綱であると位置づけるか、それはプログラマが判断しているだけなのだから。

 だから、愛した言語がすべてである。
 Javaを愛すればどんなアイディアもJavaで実現できる。Javaで自由な発想ができない、なんていうプログラマは自分の発想に束縛されている。

 言語に束縛されているなんていうのは被害妄想の極みだ。

 Pythonでは駄目だ。Rubyでは駄目だ。Cでは駄目だ。C++では駄目だ。
 どれも簡単に言える。言語を捨てることはいつでもできる。

 もし静的言語が動的言語より劣り、自分を束縛している、などと感じるのなら、そのプログラマの想像力が足りないのだろう。
 想像力が足りないことを言語のせいにしたいだけだ。

 別に静的言語が動的言語より勝るとは言わない。
 ただ、愛した言語だけが良い言語であり、それは誰にとってもそうなのだ。
 愛すれば言語は答えてくれるだろう。道具は自身を愛し、使い込んでくれている人にきちんと答えてくれるのだ。
 Javaを貶せば、Javaは貴方に牙をむく。ただそれだけだ。よく知りもしないのに飼い慣らしたつもりでいれば手をかまれる。
 それがすべてだと思う。

 だって、言語は生き物なんだぜ?
 犬の品評会をやってる奥様にはなりたくないもんだ。
 「うちのfoobarちゃまはこんなにかしこいんでございますのよ?」「それにくらべておたくのJavaちゃまはなんですの?」なーんてな。