しつこく老人

渋滞の向こう側 - 関数型言語の学び方」について、題名とは裏腹に「高速道路後の大渋滞」っぽいものを強く感じてしまったので、discourageではなくencourageするつもりで、敢えてツッコミを入れます(一部はコメントにも書きましたが、すべて書くと長大になりそうなので)。

  • 単に関数型言語のプログラムが書ければよい、というのであればTAPLなど不要なのは事実です。あくまで、プログラミングや実装技法は(たとえばインターネット高速道路のおかげで)ほぼわかったとして、もし先に進みたいなら、さらに理解するための教養です。CプログラマがCPUアーキテクチャの勉強をするようなものかもしれません。
  • インタプリタを作りながら…」「言語処理系をつくる人には参考になる」あたりは、限りなく間違いに近いと思います。型チェッカだけならともかく、TAPLのようなパターンマッチと代入によるsmall-step reductionの実装と、まっとうなインタプリタの実装とは、巨大なギャップがあります。TAPLのインタプリタは、あくまで例を動かすためのオマケのようなものです。著者自身による例年の授業でも、インタプリタの部分はほぼ完全にスキップしています。私が知る限り、ほとんど(というかすべて)の授業や輪講が同様です。
  • 「サブタイプの理論はOOを理論化するものとして一時期もてはやされたものの取り扱いが難しく、現在の焦点はstructural polymorphismに移っています」も、(知識の新旧以前に根本から)限りなく誤りです。まるでGarrigueさんのPPLのスライドだけで「勉強」したかのような印象を強く受けます。subtypingは、OO以外にも、様々なプログラム解析やモジュールシステムなどと密接に関連しています。TAPLでobject encodingが出てくるのは、あくまでsubtypingの例です。
  • Haskell学派の仕事がすっぽり抜け落ちていて、内容に偏りがある気がします」についてですが、Haskellはあくまで多くの関数型言語の一つにすぎません。型クラスやモナドと、λ抽象・多相型・抽象型・型構成子などの内容を比較すれば、どちらがより基本的・一般的か明らかだと思います。
  • 「一般的に誰かの後追いは時間の無駄」という方針は、まさに「思いて学ばざれば則ち殆うし」ではないかと危惧します。そもそも後追いかどうか、どうやって正しく知るのでしょうか。ちゃんとサーベイしないと、すでに誰かが考えたことの劣化コピーになる恐れが大きいです。人が通った道を調べるだけなら、自分で開拓するほど時間も労力もかからないので、その後で他の道を探すほうが楽だと思います。もちろん、「とりあえずガムシャラに進んでみてから他の人も通った道かどうか考える」という博打っぽい方針も私は好きですが…:-)

しつこいようですが、そこまで勉強しているだけでも十分にすごいと思いますので、少しでも渋滞解消の手助けになれば、ということで…

追記(2006/4/8):ネットで調べてもわかるように、yoriyukiさんは決して「ネット学習者」ではなく、れっきとした研究者です。このことは私もTACS 2001という学会の時点から存じています。しかし、上のエントリはyoriyukiさんが「ネットだけで勉強した」と述べているかのようにも受け取れるとの指摘がご本人よりありました。これは決して私の本意ではありませんので、撤回して深くお詫びします。