Effective ML 9ヶ条
私の前のボスのハーバードでの講演のビデオが公開されました: http://ocaml.janestcapital.com/?q=node/82
彼は早口ですが、まあ頑張って聞いてください。普通に判れば、アメリカで普通に仕事できます。判らなくても仕事できますから安心してください。
正直、この Effective ML 9ヶ条と Jane Street Core のソースコードを見れば、 Jane Street での関数型プログラミングの秘訣は大体抑えられると言ってよいでしょう。学問的には新しいことは何もありませんが、徒党を組んで関数型言語によるプロジェクトを行うには重要な物ばかりです。
この、Effective ML 9ヶ条をまとめておきました。これを見ながら視聴すると良いかもしれないです。オリジナルは 00:47:13 で見れますね。
- コードライタよりもリーダの意見を尊重せよ。大体において彼らの意見の方が正しい
- 統一的ライブラリモジュールインターフェースを作れ
- 不可能な状態が原理的に表現できないデータ定義を考え、インバリアントを減らせ
- 網羅的コードを書け。しかし、ワイルドカードを使うのは慎重に。網羅してない所はコンパイラに探させろ
- モジュール名前空間を開きすぎるな
- 例外をよく起こるエラー表現に使うな。例外は本当に例外的な場合にのみ使え
- コードの繰り返しは避けよ。高階関数かファンクターで抽象化せよ
- 行き過ぎた型遊びは避けよ。"Yes, you can. But you shouldn't."
- 純粋性に清教徒的であるな
え?お前知ってんなら一個一個日本語で説明しろって?ヤダヨ。酒でも飲ましてくれたら考えなくも無いけど。
最後の二つは近頃の Haskell とかの流行りとは逆の方向で、異論もあることと思います。彼の基本的なモットーは、「コードの正確さの敵は、動的検査じゃなくて、コードの複雑性」。いっちゃってる型システムとかやりすぎの純粋性でコードが複雑になっちゃって、静的に安全かも知れんけど、書いた奴以外は誰もメンテできない独りよがりなシステムになっては元も子もない、というわけです。彼の立ち位置では、関数型言語を極めることが目的ではなく、関数型言語は本業を達成する手段でしかない。それを踏まえれば、経験に基づくかなり説得力のある意見だと思います。もちろん、仕事を離れれば、あの連中は狂った面白い型理論の話が好きですけれど。