関数型言語の学習コスト

http://d.hatena.ne.jp/chuusotsu_neetan/20090411/1239445900

猿なみの知能しか持ち合わせていない奴の相手はしないんだが、15歳の少年という事なんで特別に教えてやろう。

関数型言語の学習コストが高いのは、別に言語仕様が難しいからじゃない。お前がやってるような、サンプルを作って動かすだけなら誰にでもできる。

難しいのは、プログラムを作る対象の処理が手続きだからなんだよ。

関数型言語で数学の計算をするなら何の問題もない。だけどな、数学の問題を解くようなプログラムを作るプログラマなんて一握りもいないんだよ。大抵のプログラマは実際に行われている業務をコンピュータでやらせる為のプログラムを作ってるんだよ。

この実際の業務ってのは、ほぼ全てが手続き。例えば「お使い」の指示書を作るとするとこうなる。

依頼主から、商品の名前と、お金を貰う。
店に行って、商品の名前と同じ商品を取る。
レジに商品とお金を渡して商品とお釣りを貰う。
依頼主にお釣りと商品を渡す。

大ざっぱだが、これは手続き型だ。これが普通なんだよ。これを関数にしたらこうなる。

お使は、依頼主に依頼主から貰った商品の名前とお金で買い物をして渡す。
買い物は、商品の名前と同じ商品を取ってお金と精算する。
精算は、お金と商品をレジに渡して、商品とお釣りをもらう。

これじゃ、指示を受けた人がわからねえよ。これ処理してみよろ

依頼主は、お母さん。
商品は、大根。
お金は100円。

依頼主から、商品の名前と、お金をもらう。
店に行って、商品の名前と同じ商品を取る。
レジに商品とお金を渡して商品とお釣りをもらう。
依頼主にお釣りと商品を渡す。

お使いをお母さんでする。

お使は、依頼主に依頼主から貰った商品の名前とお金で買い物をして渡す。
買い物は、商品の名前と同じ商品を取ってお金と精算する。
精算は、お金と商品をレジに渡して、商品とお釣りをもらう。

意味わかるか?


世の中は関数で動いてるわけじゃない。お前が勉強してるHaskellのドキュメントが関数で記述されてたら、読めねえぞ。仕事も、文章も何もかもが手続き。人間は手続きで考えるんだよ。

関数型言語を使おうとすると、その手続きを関数に置き換えないといけなくて、その能力を身につけるコストってのが関数型言語の学習コストなんだよ。

お前が勉強してるHaskellなんて使うだけなら1週間もあれば使えるようになる。プログラマが難しいって言ってるのは、今の仕事でHaskellを使った場合どうなるのかを考えるからなんだよ。