Javaは弱い言語

先週末の呑みで、Javaでご飯を食べている先輩とinject廚の新人とで少し話していた時に、Javaの先輩がいっていた「Javaは足りないものをツールで補う言語」というのをこの記事を読んで思い出した。

Javaにツールが多いというのは、きっとJavaがCプログラマな人たちが違和感を感じないように設計された言語であり、使用者のスキルレベルの平均をとったような言語であるからなのだろうと思う。なので、IDEが流行り、使い方を覚えれば使えるツール(ほんとにそうかは知りませんよ。僕、そういう世界に入門していないし)が、たくさんできているじゃないかと。

逆に、Rubyだとか、perlだとかは、作った人が欲しい言語から始まっており、往々にして、そういう言語を作ったりできる人は、emacsだのviだので満足をしている(別にdisってるわけじゃございません)。そして、その言語に引かれる人の大半も、emacsやviを使える人が多いようにかんじる。なので、IDEなんてもんは、全然発達していないわけだ。

普段使いのツールとしてはRakeなどのDSLが存在する。普段使うものは、普段使う言語でかけるというものが多い。逆に、Antなどのツールの設定はXMLになるわけだ。結局、XMLはわかりづらいから、それを作るためのツールを作ったりしなきゃいけなくなったりしている。

そんなRubyもRDTなどがでてきてるわけで、GUIツールもそのうちJavaにおいついてくるんじゃまいかと。Rails流行りのおかげで、ほんとにRuby,Ruby,Rubyと聞こえてくるから、そういうツールがほっされるようになるんでしょうね。

ちなみに、RubyよりもJavaが好きな理由に反応しておくと、

[1][2]これJavaだけじゃないですよね。デザインパターンの原典は、たしかsmalltalkだし。デザインパターンいくつか(イテレーターやdelegate等)は、Rubyは簡単につかえるようになっているしね。

[3][4]後で書く。(僕がこういう開発経験0だからわからないんだよね)

[5]結局、作ったものの精度を高めるというか、保証するという意味では、テストを重要視しなきゃいけないというのは、TDDだけであらず僕が携わっている開発でもいえることなんですよね。ただ、テストを書くツールがDSLやその言語でかけるJava
Rubyなところはいいなぁと。Excelじゃ人間の精度にかなり依存してしまいますよ。

テストのために短いコードを書くと言うのは、正直僕的にはいまいちなところでもあるわけで。抽象度が高く短い関数を書くと言うのは、自分というか人のためじゃないかと。結局、テストを書く時も、人のコードを受け継ぐ時も、そのコードを読んで理解しなきゃいけないのは、プログラムではなく人なわけで。そのときに、いろんな関数に依存していて、長々としている関数よりは、抽象度が高く短いコードの方が読みやすいのがあたりまえじゃないかと。ただ、抽象度をあげるというのは、最近、諸刃の刃じゃないかと思う時もあるんですよ。抽象化されたものをすんなり理解できる人と、できない人というのは確実に存在する訳で、そんなひとに際際に抽象化されたコードを読んでもらうのは無理ですよ。僕もHaskellのすごい人が書いたコードを読めません。

短くて抽象度の高いコードという感覚は、関数型をやるとよけいに感じるんではないかと思うんですが、どうでしょうか?だいたい、on Lispには、言語内DSLやテストなど最近よく言われていることが、あんな昔の本に、あたりまえの用に主張されていますし。

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門


入門Haskell―はじめて学ぶ関数型言語

入門Haskell―はじめて学ぶ関数型言語

On Lisp

On Lisp

入門OCaml ~プログラミング基礎と実践理解~

入門OCaml ~プログラミング基礎と実践理解~