良い言語
突然だが今回は「良い」言語について考えてみようと思う。もちろん、ここでいう言語とは人間が普段使用しているものではなくプログラミング言語のことだ。
最初に言っておくとわたしは Java は良い言語だとは思っていない。友人は Java を賞賛しているが、実は普段は使っていなかったりするのだ。使いもしない言語を「良い言語」というかい?
閑話休題
個人的な事情は置いておこう。
確かに Java を使うことで生産性は高めることができる。ライブラリは優れたものがたくさんあるし、メモリ管理はプログラマが(それほど)気にしなくてもいいようになっている。言語の仕様により1クラスを1ファイルに書かなくてはならないのでよほど変なコーディングでもない限りはクラスの全体像をつかむのが楽だしUMLを使った全体像の理解の助けにもなるかもしれない。動作は JVM の上で走るので「安全」で、プラットフォーム依存のライブラリを使わなければ OSに関係なく、また機器に関係なく動作する。レベルもピンキリで、メンバーが開発工程の途中で入れ替わることもある企業では有効な選択肢だろう。
Java の生産性の高さは認めるが、それでもわたしは「Java が良い言語だ」とは思えないのだ。生産性の高さと、良い言語であることはまた別のものだと思っている。わたしは「良い言語」はプログラマを束縛するべきではないと思っている。自由度が高く、軽量で、簡潔な文法を持つこと。そして、(たとえ入門PGだったとしても)プログラマの創造力を刺激することが「良い言語」の絶対条件だ。このうちのどれかひとつでも欠けていたらそれは「良い言語」ではない。
Java は自由度が低く、また重い言語だ。
Eclipse の起動を見てみたまえ。重いと定評のある Adobe 社の Photoshop よりも時間がかかるではないか。あんなものは使う気にもならない。動作が鈍いプログラムはそれだけで、その存在そのものが大罪なのだ。メモリの消費量もプログラムの機能に対して多すぎる気がする。昨今のPCは確かにメモリの搭載量が増えているが、それでも普及価格帯のPCは256MB程度しかない。また、メモリの消費量は少ないほうがいいに決まっている。 10年前のように、goto文やらを駆使してスパゲティコードに仕立て上げてまでメモリを節約しろとはいわないが、消費量の少ない成果物を作成する言語があるならそちらを使うべきじゃないかい?
Java の自由度が低いと聞いて、首を傾げたかもしれない。しかし、ほかの言語と比べると Java の自由度が低いのは事実なのだ。 Java はプログラマが愚かな行いをしないように制限を加える。しかし、どんなコードが愚かでどんなコードが優れたものなのかそんなにはっきりとわかるものなのかい?確かに「とんでもない」動作をしてくれるコードは存在する。しかし、一見愚かに見えても動作させたら素晴らしい結果を見せてくれるものがあるのも事実である。そもそも、新しいモノを作り出そうとしているプログラマが必要とするであろうことと、彼がどんなことでミスを犯すのかをどうやって言語設計者が事前に知ることができようか。
いくら言語でミスを防ごうとしても、ミスを犯す者は侵すのだ。(マーフィーの法則を読んでみよう)参照先のミスを減らすことはできるかもしれないが、拙いプログラマが下手糞な設計をしてしまうことを修正することはできない。(これは言語の設計よりも、経験と技量が左右するものだろう?)ならばプログラマの動きを縛り付ける不要なルールなどないほうがいい。
セオリーどおりに作れだとか、Javaのルールではこうなのだとかそんなことを押し付けられて新しいアイディアが浮かぶとは思えない。新しいアイディア、素晴らしいコードは自由な発想から生み出されるのだ。言語はプログラマを束縛するべきではない。
わたしは Java のような B&D(bondage and discipline)言語がいい言語だとはおもえないのだ。良い言語はプログラマを縛り付けるものではなくて、粘土のように自由に形を変えてプログラマの創造力を刺激するものだと思う。
良い言語は、文法はシンプルで成果物の動作は軽快で何よりプログラマの創造力を邪魔しないものでなくてはならないのだ。 C言語がこれに当たる。恐らくLispやPerlもこちら側の言語だろう。いい言語は時に誰もが驚くようなコードを書けて、えらそうに講釈を垂れるスーツ族が頭を抱えるようなことができるくらいに柔軟性を持っていなければダメだ。この真逆に存在するのが Java などの言語で、これは初期教育や、多くのメンバーが集まった開発には向いているがあくまでも「生産性の高い言語」なのだ。プログラマの創造力を助け、成長させることは到底できない。
| 固定リンク | コメント (0) | トラックバック (0)