sumiiの日記 このページをアンテナに追加 RSSフィード

2006-04-04

思いて学ばざれば則ち殆うし

あるところに同じようなことを(ほとんど成り行きで)書いたのですが、重要な問題のような気がしてきたので、こっちにも書いてみる。

一般に、関数型言語プログラミング言語(および計算機科学、ないし任意の専門)についての情報は、

  1. 一般書・一般誌、Webやメーリングリストブログ
  2. 教科書・専門書
  3. 論文
  4. 口頭での議論(学会発表や質疑応答、グループのミーティング、部屋での会話)

などで交換されます。

で、一般に情報の「ディープさ」は上から下へ行くほど濃くなると思うのです(少なくとも僕の専門分野ではそう)。そのごく一部である1.だけ(しかも日本語onlyで)「勉強」していろいろと議論するのは、(何もしないよりは良いのかもしれませんが)非常に危険です。その危険をちゃんと意識していればno problemですが。「高速道路」の話と同じことかも。

たとえば、日本のネット(?)では今になって妙に持ち上げられているSICPですが、日本でも海外でも、主要な大学ではどんどん地位が低下しています(というか、すでに低下しきっている?)。そもそも、ICFPやPOPLに参加すればよくわかるのですが、Scheme自体の地位が急速に低下しています。とかいうと多くの人を敵に回しそうですが…:-)

他の例として、(あくまで一例なので他意はまったくありませんが)日本の一部のコミュニティではPugsが非常に話題になっているようですが、論文Haskellワークショップrejectされたようです(違っていたら教えてください>知っている方)。おそらくプログラム委員も迷ったと思うのですが、あくまで学会なので、テクニカルにすごいというわけではない、と判断されたのだと思います。だからこそCUFPのほうに招待されたのかもしれません。ちなみに、Haskellワークショップはレベルの高いワークショップですが、あくまで特定の言語のワークショップなので、POPLやICFPなどのconferenceに比べれば論文の査読は緩いほうです(倍率とか)。

研究とhackingでは背景も目的も違うので、認識が違ってくるのは当たり前ですが、「関数型言語(ないしプログラミング言語)の研究」は半世紀前から現在までずっと連続して、れっきとして存在しているので無視しないでほしいなー、と思ったり…(笑)

shiroshiro 2006/04/04 11:14 それはそうだと思うのですが、例えば10年前、プロダクションでがりがりコードが産み出されている現場で「関数型言語〜!」と言ってみてみても「は?」っていう状態だったわけです。ごく一部の例外を除けば、プロダクションコードと関数型言語というのは完全に別の世界の話でした。現場で関数型言語を使うという行為は、人に見つからないようにこっそり仕込んでおくようなものだったのです (最終的な実行コードに忍び込ませるのは難しいですが、パイプラインを構成するツールに忍び込ませるのは比較的容易でした。ただそういうツールに関してはなかなか話が表に出てこないものです。)

本格的なCSのカリキュラムでは最初に叩き込まれるような初歩の初歩も、現場の常識からは絶望的なほどかけはなれていました。MITのCSを出ていても、SICPでやったことと現場とは別と考えていた人もいます。ましてやそういう経歴の無い人とは話が通じない。

一人でやる研究プロジェクトならともかく、チームでプロダクションコードを書くとなると、そこで関数型言語を使いたければそういうところから説明してゆくしかないわけです。確かに関数型言語で10倍の生産性が得られるかもしれませんが、自分一人しかわからなかったら永遠にそれをメンテする羽目になりますからね。

というわけで、Haskellスゲーらしいぞ、とか俺もSICP読むぞ、みたいなのがファッションであってもひろまってくれるのは、底上げという意味でたいへん有意義だと思うわけです。その間にもCSの研究は先に進みますから、そのさきっちょを見ている人にとってみればもどかしいことかもしれませんが。ことプログラミング言語の分野に関しては、技術移転にはおそろしく時間がかかることを覚悟しておかないとならないでしょう。

もうひとつ時間がかかるのは処理系の成熟ですね。言語が研究の先端を離れてから現場で根を張るまで、10年単位の時間が必要でしょう。「C++コンパイラはどれもバグだらけ」という期間はどのくらい続きましたっけ? でも大多数のプログラマは処理系が安定してライブラリも揃ってからじゃないと、その言語に時間を投資しようとは思ってくれない。しかしユーザが増えない限り、処理系も成熟しません。高速道路を飛ばしてきて、渋滞の手前のサービスエリアでくつろぐだけの人が増えることには、重要な意味があると思います。

sumiisumii 2006/04/04 11:36 それはまったくその通りだと思います。高速道路のサービスエリアにいる人に、そこが終わりではないことを知ってほしい、という話です。

いがいが 2006/04/04 16:17 そんな中SICP(日本語版)を一昨年度からB1用教科書として採用してしまった京大情報。。。 (^^;

sumiisumii 2006/04/04 16:23 そもそも教科書を使う(しかも日本語)としたら、確かにSICPしかないのかも…

と 2006/04/05 01:46 sumiiさんのおっしゃることもshiroさんのおっしゃることも、どちらももっともだと思うのですが(私は会社員なので実感として同意できるのはshiroさんの意見ではありますが)、このギャップのようなものに、この分野の研究と実践あるいはRとDの断絶のようなものを感じてちょっとブルーになりました。「10倍の生産性」(データはなくて全くの感ですが個人的には-5倍くらいのような気もしますが:-)あたりの「サービスエリア」まではともかくその先の「高速道路」はもう全く別方向に向かっているのではないかという気がします、悲しいけど。

sumiisumii 2006/04/05 07:01 「どちらももっとも」というより、僕の話とshiroさんのお話と、別に何ら食い違ってはいないような…(笑) shiroさんのおっしゃるような状況だからこそ、「先もあるよー」と言いたいわけです(もし誰も来ていなかったら、何を言ってもしょうがない)。

サービスエリアから先も、C#やJavaのgenericsや型推論、XML処理言語やregular expression typingなどなど、以前よりはずっと方向が一致しているような印象があります。

shiroさんの「ことプログラミング言語の分野に関しては、技術移転にはおそろしく時間がかかる」もまったく同感ですが(http://min-caml.sourceforge.net/saishuu/21.html)、最近はかなりペースが向上しているような。ガベコレも多相型も型推論も30年ぐらい無視されてきたのに、ここ10年ぐらいで急に広まりつつあったり、JavaScriptも(作者本人によると)「ほとんど関数型言語のようなもの」だそうで。「C#に型推論が入るかも」(http://itpro.nikkeibp.co.jp/article/NEWS/20060201/228399/)とか聞いたときは、僕のほうが「は?」とか思ってしまいました。:-)

sumiisumii 2006/04/05 07:17 一応補足しておくと(こればっか)、たとえばJavaのgenericsにはF-bounded polymorphismが入っていますが、これなどはまさにTAPLに書いてあるSystem FやF-subの話が元にあります。

sumiisumii 2006/04/05 12:10 あと、書き忘れたのですが、MLやHaskellの主なコンパイラやインタプリタは(初期〜中期のC++などに比べれば)当初からずっと安定していると思います。ライブラリが少ないのは確かですが。

あらいしゅんいちあらいしゅんいち 2006/04/08 04:53 いやあ、すごくdiscourageされました。私は25年前にプログラミングをはじめていらい、ずっと底辺をはいずりまわり、ようやく最近Rubyを通じてlambdaやY Combinatorの何たるかを知り、Audrey Tangに感動し、SICPとHaskellでもやろうかと思っていたところです。やっとプログラマの第一歩を踏み出してよちよち歩きをはじめた自分に感動していたわけです。それが古臭いファッションといわれるとちょっと悲しいですね。

しかし現場のプログラマが論文を読んで何のメリットがあるのでしょうか? 現場で責任者として働く以上、コンピュータの基本的な分野全てをカバーしなければいけないわけです。教科書だけで膨大な量の本があります。CPUアーキテクチュアから関数型言語、そして経営や会計までを学んでいるわけです。なんとか仕事をしながらキャッチアップしてる立場の人たちにむけてSchemeは時代遅れである、というような発言をするのは、いかにも「センセイ」だなとおもいました。

研究者がPugsのようなものを低く評価している限り、技術移転の加速はないでしょうね。まさにそこに死の谷があるわけです。論文もかけないし、お金も儲からない。研究者には見下されるし、ビジネスにもならない。そういうエリアができてしまうわけです。

お金になるビジネスと、論文が書ける最先端の間には、それを地道に実装して普及するような人々がいるわけで、その人たちが報いられない限り、どうにもならないんじゃないでしょうか。

現場側は少しずつそういう人を尊敬して、対価を払えるような動きをしつつある、とおもいますし、私も貢献できるよう努力はしています。

sumiisumii 2006/04/08 10:36 うーむ、誠に申し訳ない。まったくおっしゃる通りですね。また同じ言い訳になってしまいますが、SchemeにせよMLにせよHaskellにせよ、こんなに盛り上がっているのは素晴らしいことだと思いますし、盛り上げてくださっている方たちには本当に感服します。

言語研究者も(自分たちとしては研究も宣伝も最大限努力している「つもり」なのに)もう何十年も産業界に無視され、極限までdiscourageされてきたので、久しぶりにちょっとだけパイプが開いたせいで、たまっていたフラストレーションが一気に排出されてしまいました…(笑)

あと、僕としては「現場のプログラマ」に「論文を読め」と言ったつもりはまったくなかったですし、言うつもりもないです。研究の世界が「存在する」ことを知ってほしかっただけだったので…。話がややこしすぎた上に言い方も悪かったようですみません。

あらいしゅんいちあらいしゅんいち 2006/04/08 15:00 すみません、私もちょっと感情的な反発をしてしまいました。

さて、研究者が無視されなくなるためには、まさにAudrey Tangのような稀有な人を応援するしかなさそうです。

研究者はどうもビジネスに憧れがある?ようで、荒削りな原石をいきなり産業界にもってきたりしますが、まあ、大抵はギャップが大きすぎますよね。

それが現場に浸透するまでには、Audrey Tangのような人が原石を磨いて、なんか伝わる言葉にするわけですよ。でもそういう仕事はとても難しい上に、仕事にむすびつかないので、やる人がいないわけですよね。

計算機科学が工学であって応用されることを目指すのならば、Audrey Tangのような人をきちんと遇するしかないとおもいます。研究さえできればよいのなら別でしょうが。

kiyokakiyoka 2006/04/09 01:01 「Scheme自体の地位が急速に低下しています。」というのは僕のまわりでは逆のように感じます。
オープンソースコミュニティーの会合などに出席すると、Schemeのユーザが増えてきているのを感じ取れます。(若い人を含めて)
但し、僕はプロダクションコードを作る会社に勤めていますが、Schemeという言語の話ができる人は1%に満たない状況です。(他の関数型言語についてもしかりです。)
ということで、僕たちオープンソースに関わっている人は高速道路をぶっ飛ばしてきて出口手前のサービスエリアで遊んでいるという状況ですね。(ここが死の谷ともいう場所なのですが...)

Pugsなどをきっかけに関数型言語を勉強しようという機運が高まることは、shiroさんのおっしゃるようにファッションであっても広まることは大変意味があると思います。
僕は最近趣味プログラムは全てGaucheで書いてますが、手続き型の言語で書いていたころに比べて明らかに5倍程度は生産性が上がっています。
どこかで大勢の人がこれに気づくことによって、高速道路の渋滞が解消するという期待をまだ捨てていません。
その日のために今はクラッチとアクセルをベタ踏みしていつでも前へ出れるようにしておくという戦略も悪くないと思います。

sumiisumii 2006/04/09 02:27 コメント、ありがとうございます。ご意見、まったくごもっともです。いや、本当に…(笑)。

Scheme云々は、ICFPやPOPLのような学会の話のつもりだったので(それもひょっとしたら見る人によっては違うのかもしれませんが)、教育や現場では、SICPだけでなくHDTPやDr. Schemeの人たちが頑張っていて、確実に地位は向上していると思います。

dankogaidankogai 2006/04/10 19:16 FIY: http://pugs.blogs.com/pugs/2005/07/day_159_night_b.html

sumiisumii 2006/04/10 22:16 ありがとうございます。考えれば考えるほど、本当に不幸なことですね…>rejected

brazilbrazil 2006/04/12 02:37 こんにちは、はじめまして。

SICP/Schemeの地位が低くなっているとのことですが、その代わり、何が取りざたされているのか、すっごく興味があります(大学とかに詳しくないもので...)。

確かに多くの人がSchemeと関数型プログラミングに向かっているように感じます。
でもMatzさんやPeter Norvigさんなど、みんな反対にLispからやって来て、RubyやPythonに向かって行ったことが、ずっと引っ掛かっています。

やはりSchemeに何か問題があり、それを超える、便利な考え方が存在して共有されているのでしょうか?
(質問コメントで、すみません。)

sumiisumii 2006/04/12 07:25 ええと、あくまで「私が思うには」というだけですが、基礎研究のほうはScheme→ML→Haskell、大学教育のほうは

- Java(もう関数型言語はやらない)
- OCamlないしSML(本は使わない、というかあまりない)
- Haskell(同上)
- Scheme(テキストはhttp://www.htdp.org/あたり)

という感じだと思いました。(あくまで私の考えですが)やはり静的型チェックが鍵なのではないかと思います。

SICPの「繁栄と衰退(?)」については、Matthias Felleisenという代表的教育者の

http://www.ccs.neu.edu/scheme/pubs/fffk-jfp.pdf
http://www.ccs.neu.edu/home/matthias/Presentations/FDPE2002.ppt

が参考になるかもしれません。私もFDPE 2002(関数型言語教育に関するワークショップ)の発表を聞きました。HDTPの宣伝という側面もあるのかもしれませんが、そもそも問題意識がなかったらHTDP自体を執筆しなかったでしょうし…

brazilbrazil 2006/04/12 16:20 ご丁寧に、本当にありがとうございますー。
よくわかりました! 早速、勉強してきます!
ではでは。

とおりすがりとおりすがり 2008/08/08 07:37 SICPが古いなら、手続き型言語に習熟したプログラマが関数型言語を学ぶための教科書としては何がいいのでしょう?

sumiisumii 2008/08/20 11:02 普通の関数型言語の教科書では駄目ですか? 最近は日本語でもいろいろとありますが、 http://www.amazon.co.jp/dp/4774132640とか…(知り合いの著書の宣伝になってすみませんが)。そもそもSICPは「関数型言語を学ぶための教科書」として良いのでしょうか。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証