手続き型を卒業するための言語は?
という質問を今日飲みから飲みへの移動の最中ぽろっと聞かれました。
あたしゃ一介のプログラミング言語好きなので (マニアの域には全然達していません。変態的趣味ではあるけど) まじめに答えは期待してないと思いますが不真面目に答えます。
2009.10.31 追記:アフィリエイトやってんじゃないかと思うぐらいバカバカ本のリンク張ってみました。
そもそも
なんで手続き型を卒業しなきゃいけないの?
ぶっちゃけプログラマという職業でご飯を食べていくのに、言語の潮流が手続き型でなくなる可能性は今後最低10年はないと思っていいでしょう。予想はずれたら飲み代一回ぐらいは奢ります (笑)。
ただ世界を広げるという意味では、今仕事で使っている言語とはぜんぜん違う世界に触れることは大事かもしれません。という視点で。
必須条件
変数再代入禁止。
なんでこれを禁止したいかというと、「こいつがあると手続き的にかけちゃう」から。手続き的に書いちゃうなら手続き型を使えばいいわけで、そうじゃない書き方を強制されないと意味がないでしょう。
高階関数とかを必須にしないのは、Ruby とか手続き型言語に普通に入ってるからです。
そんなわけで偏見に充ち満ちたセレクション。
セレクト1. Haskell
やっぱこれじゃないですか?
破壊代入できないし。
遅延評価もえーだし。
Real World Haskell 出たばっかりだし。あれが重いならふつける本でもいいわけだし。良書があることは学ぶべき言語を決める理由の一つになり得ます。
Real World Haskell―実戦で学ぶ関数型言語プログラミング
- 作者: Bryan O'Sullivan,John Goerzen,Don Stewart,山下伸夫,伊東勝利,株式会社タイムインターメディア
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/10/26
- メディア: 大型本
- 購入: 8人 クリック: 245回
- この商品を含むブログ (76件) を見る
ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門
- 作者: 青木峰郎,山下伸夫
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2006/06/01
- メディア: 単行本
- 購入: 25人 クリック: 314回
- この商品を含むブログ (320件) を見る
セレクト2. Erlang
言語としての成立は古いけど今でも cutting edge に面白い言語だと思う。関数型、並列、Prolog にちょっと似たユニフィケーション (パターンマッチング) 機構などなど。
本としては飛行機本でよろしいんじゃないでしょうか。
- 作者: Joe Armstrong,榊原一矢
- 出版社/メーカー: オーム社
- 発売日: 2008/02/23
- メディア: 単行本(ソフトカバー)
- 購入: 8人 クリック: 284回
- この商品を含むブログ (97件) を見る
セレクト3. Prolog
半ば冗談半ば本気。者ども、ループすら書けなくて愕然とするがよい。うわははは。知識とルールベースを書いてくと解決できちゃうのはちょっと驚き。逆計算ができるのもステキ*1。これは関数型もそうだけど、エントリポイントが決まってないのも素敵すぎる。
でもなー、事実を書く順番で無限ループに嵌ったり、カットで枝を切りまくらないとパフォーマンスが苦しかったりするところに言語として成立させるための妥協が見えちゃうんですよねぇ。
問題は「過去の言語」と見られているせいで入門書のたぐいが払底していることですかね。今手に入る中ではこいつかなぁ。
- 作者: Ivan Bratko,安部憲広
- 出版社/メーカー: 近代科学社
- 発売日: 1990/03
- メディア: 単行本
- 購入: 1人 クリック: 41回
- この商品を含むブログ (18件) を見る
The Craft of Prolog (Logic Programming)
- 作者: Richard O'Keefe
- 出版社/メーカー: The MIT Press
- 発売日: 2009/12/07
- メディア: ペーパーバック
- 購入: 1人 クリック: 9回
- この商品を含むブログ (2件) を見る
セレクト4. Scheme
破壊代入できるじゃねーか! と怒られそうですが、continuation だけですべてが許せます。読んでないけどとりあえず評判がいいのはオライリーさんの Gauche 本ですかね。岩波から出てた湯浅先生の Scheme 入門は気軽に読める点がいいと思います。手に入ればぜひ。
- 作者: Kahuaプロジェクト,川合史朗
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/03/14
- メディア: 大型本
- 購入: 22人 クリック: 713回
- この商品を含むブログ (272件) を見る
- 作者: 湯浅太一
- 出版社/メーカー: 岩波書店
- 発売日: 1991/10/29
- メディア: 単行本
- クリック: 6回
- この商品を含むブログ (5件) を見る
- 作者: ジェラルド・ジェイサスマン,ジュリーサスマン,ハロルドエイブルソン,Gerald Jay Sussman,Julie Sussman,Harold Abelson,和田英一
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2000/02
- メディア: 単行本
- 購入: 35人 クリック: 1,149回
- この商品を含むブログ (486件) を見る
ところで
「新しい世界」を見たいのだったら、手続き型から離れるのではなく、[普通のプログラミング環境から離れたい」んではないのかしら?
おいらまだ勉強始めたばかりなのでなんともいえないけど、Smalltalk の世界、しかも言語としての Smalltalk じゃなくて環境としての Smalltalk、とかもすげー世界が広がると思う。あーこれがアジャイル開発の原点なのかって。
気軽に読めてけっこうしっかり書かれている(でもちょっと古い)のが
- 作者: ジーン・コリエネック,菅原一孔,鈴木元,阿部和広
- 出版社/メーカー: エスアイビーアクセス
- 発売日: 2004/04
- メディア: 単行本
- 購入: 2人 クリック: 20回
- この商品を含むブログ (12件) を見る
- 作者: 梅沢真史
- 出版社/メーカー: ソフトリサーチセンター
- 発売日: 2004/10
- メディア: 単行本
- 購入: 4人 クリック: 75回
- この商品を含むブログ (58件) を見る
SMALLTALKで学ぶ オブジェクト指向プログラミングの本質
- 作者: 青木淳,浅岡浩子,澤本依里
- 出版社/メーカー: 日経BP社
- 発売日: 2008/07/24
- メディア: 単行本
- 購入: 14人 クリック: 408回
- この商品を含むブログ (39件) を見る
あとそのつながりで、「コードを書かない教育用プログラミング環境」SCRATCH なんかも刺激になると思う。一見おもちゃぽいけど、普通に複数オブジェクトが非同期で動く並列プログラミングができちゃうところはプログラマはもっと注目していいと思う。
SCRATCH については和書は一冊しか出ていないので迷いようはないですね。
スクラッチアイデアブック―ゼロから学ぶスクラッチプログラミング
- 作者: 石原正雄
- 出版社/メーカー: カットシステム
- 発売日: 2009/01
- メディア: 単行本
- 購入: 18人 クリック: 328回
- この商品を含むブログ (16件) を見る
長々と与太話失礼しました。
*1:ただし逆計算を許す述語はトロイのでカットで切っちゃうのが普通ですが