Javaスクールの危険

http://local.joelonsoftware.com/mediawiki/index.php/Java%E3%82%B9%E3%82%AF%E3%83%BC%E3%83%AB%E3%81%AE%E5%8D%B1%E9%99%BA

いまさらですが,

ただ優秀なのが誰なのかを見分けるのがすごく難しいのだ。かつては学生の出来がいいかどうかは、再帰アルゴリズムを数秒で書き出すことができるかとか、連結リストを操作するポインタを使った関数を、ホワイトボードに書くのと同じくらいの早さで実装できるか見れば良かった。しかしJavaスクールの卒業生たちについては、彼らが躓いているのが十分な教育を受けていないためなのか、それとも優れたプログラミング仕事をするために必要な脳の部分を持ち合わせていないためなのか、わからないのだ。

再帰アルゴリズムも連結リストも基本中の基本だよね.こんなものも出来ない人がプログラマーを名乗っちゃいけません.*1

ここで言うデザインは、オブジェクト階層をいじって際限なくコードを書き換えたり、has-a対is-aのような似非「問題」に思い悩むOO「デザイン」とは違う。

オブジェクト指向の人間でも,こんなものは「設計」とは呼ばない.そう呼んでいるのは似非オブジェクト指向屋だけです.

大学で教えるOOPというのは「カプセル化」とか「継承」といった用語をたくさん暗記したり、ポリモーフィズムとオーバロードの違いについての多岐選択クイズに答えることからなっている。これは歴史の授業で有名な年号や人名を暗記するのよりさして難しいわけではない。。OOPは大学一年生を追い払う知的チャレンジを与えるには不十分なのだ。OOPの問題で躓いても、プログラムは依然として動き、ただ保守性に違いが出るだけだ。

そう.ただ保守性に違いが出るだけ.たったそれだけのことが原因で,後で死ぬほど現場が苦労するんだが…… 一体どれだけの人が,似非オブジェクト指向の犠牲になっていることか.

私の知るSchemeHaskellとCのポインタが使える人はみな、Javaを使い始めて2日で経験5年のJavaプログラマよりいいコードを書くようになる。しかしそのことが平均的な頭の鈍い人事部の連中には理解できないのだ。

8割方賛成*2C言語を使いこなせる人が書くJavaコードは,Javaとして不自然なことはあってもミクロなレベルで問題を起こすことはほとんどない.逆にJavaだけから入った人や他の「簡単な言語」から入った人は,信じられないほど質の悪いコードを書くことが少なからずいる.それらはまともなプログラマーが見れば一目瞭然なのだが,人事の人間にはおそらく見分けがつかないだろう.

元ネタの繰り返しになるが,「簡単な言語」から入った人間が全てプログラマーとして失格だと言っているのでない.どの言語にもまともなプログラマもいれば悪いプログラマもいるだろう.しかし「簡単な言語」では悪いプログラマを篩い落とすことができない.これに対し「難しい言語」ではコンパイルエラーやSegmentation Faultが発生し,それを自力でデバッグできないということで,素人にも明らかな形で篩い落とすことができる.おそらくはその差なんだろう.*3


自分が「簡単な言語」の出身で自分の資質に疑問があるならば,一度「難しい言語」に挑戦してみるといい.「難しい言語」が使いこなせないのなら,その人には素質がない.素質のない人間がこの業界から足を洗うのに早過ぎるということはないだろう.

*1:「ホワイトボードに書くのと同じくらいの早さで」とまで言われると,ちと自身がないけれど.

*2:Haskellは全然知らないので,その部分は除外する.Schemeも推測.

*3:Javaがまだ出たばかりの頃の話だが「Javaが使い難い」という意見の中には,さらに酷いものもあった.ポインタさえない環境でも,まともに動くプログラムが書けない人がいたのだ.