おがさわらなるひこのオープンソースとかプログラミングとか印刷技術とか

おがさわらなるひこ @naru0ga が技術系で興味を持ったりなんだりしたことをたまーに書くブログです。最近はてなダイアリー放置しすぎて記事書くたびにはてな記法忘れるのではてなブログに移行しました。

クリエイティブ・コモンズ・ライセンス
特に断りがない場合は、本ブログの筆者によるコンテンツは クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。

手続き型を卒業するための言語は?

という質問を今日飲みから飲みへの移動の最中ぽろっと聞かれました。

あたしゃ一介のプログラミング言語好きなので (マニアの域には全然達していません。変態的趣味ではあるけど) まじめに答えは期待してないと思いますが不真面目に答えます。
2009.10.31 追記:アフィリエイトやってんじゃないかと思うぐらいバカバカ本のリンク張ってみました。

そもそも

なんで手続き型を卒業しなきゃいけないの?
ぶっちゃけプログラマという職業でご飯を食べていくのに、言語の潮流が手続き型でなくなる可能性は今後最低10年はないと思っていいでしょう。予想はずれたら飲み代一回ぐらいは奢ります (笑)。

ただ世界を広げるという意味では、今仕事で使っている言語とはぜんぜん違う世界に触れることは大事かもしれません。という視点で。

必須条件

変数再代入禁止。
なんでこれを禁止したいかというと、「こいつがあると手続き的にかけちゃう」から。手続き的に書いちゃうなら手続き型を使えばいいわけで、そうじゃない書き方を強制されないと意味がないでしょう。

高階関数とかを必須にしないのは、Ruby とか手続き型言語に普通に入ってるからです。


そんなわけで偏見に充ち満ちたセレクション。

セレクト1. Haskell

やっぱこれじゃないですか?
破壊代入できないし。
遅延評価もえーだし。
Real World Haskell 出たばっかりだし。あれが重いならふつける本でもいいわけだし。良書があることは学ぶべき言語を決める理由の一つになり得ます。

Real World Haskell―実戦で学ぶ関数型言語プログラミング

Real World Haskell―実戦で学ぶ関数型言語プログラミング

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門

セレクト2. Erlang

言語としての成立は古いけど今でも cutting edge に面白い言語だと思う。関数型、並列、Prolog にちょっと似たユニフィケーション (パターンマッチング) 機構などなど。
本としては飛行機本でよろしいんじゃないでしょうか。

プログラミングErlang

プログラミングErlang

セレクト3. Prolog

半ば冗談半ば本気。者ども、ループすら書けなくて愕然とするがよい。うわははは。知識とルールベースを書いてくと解決できちゃうのはちょっと驚き。逆計算ができるのもステキ*1。これは関数型もそうだけど、エントリポイントが決まってないのも素敵すぎる。
でもなー、事実を書く順番で無限ループに嵌ったり、カットで枝を切りまくらないとパフォーマンスが苦しかったりするところに言語として成立させるための妥協が見えちゃうんですよねぇ。
問題は「過去の言語」と見られているせいで入門書のたぐいが払底していることですかね。今手に入る中ではこいつかなぁ。

Prologへの入門 (PrologとAI)

Prologへの入門 (PrologとAI)

洋書だとコイツ必読ってことで注文してるんですがまだ届いてませんので評価保留。
The Craft of Prolog (Logic Programming)

The Craft of Prolog (Logic Programming)

セレクト4. Scheme

破壊代入できるじゃねーか! と怒られそうですが、continuation だけですべてが許せます。読んでないけどとりあえず評判がいいのはオライリーさんの Gauche 本ですかね。岩波から出てた湯浅先生の Scheme 入門は気軽に読める点がいいと思います。手に入ればぜひ。

プログラミングGauche

プログラミングGauche

Scheme入門 (岩波コンピュータサイエンス)

Scheme入門 (岩波コンピュータサイエンス)

SICPScheme で書かれていますが、繰り返すようにあの本において Scheme は手段であって目的じゃないし、言語を学ぶために読むのはちとタフなので、私はこの点では進めません。
計算機プログラムの構造と解釈

計算機プログラムの構造と解釈

セレクトX. Scala

今ちょっと流行ってるし、TwitterRails から乗り換えたとか言ってるし、ホットな言語ではあるんだけど、オイラが言語仕様みたことないんで保留。

ところで

「新しい世界」を見たいのだったら、手続き型から離れるのではなく、[普通のプログラミング環境から離れたい」んではないのかしら?

おいらまだ勉強始めたばかりなのでなんともいえないけど、Smalltalk の世界、しかも言語としての Smalltalk じゃなくて環境としての Smalltalk、とかもすげー世界が広がると思う。あーこれがアジャイル開発の原点なのかって。
気軽に読めてけっこうしっかり書かれている(でもちょっと古い)のが

Squeakプログラミング入門―オブジェクトランドへの招待

Squeakプログラミング入門―オブジェクトランドへの招待

  • 作者: ジーン・コリエネック,菅原一孔,鈴木元,阿部和広
  • 出版社/メーカー: エスアイビーアクセス
  • 発売日: 2004/04
  • メディア: 単行本
  • 購入: 2人 クリック: 20回
  • この商品を含むブログ (12件) を見る
しっかり学びたいのであれば
自由自在Squeakプログラミング

自由自在Squeakプログラミング

SMALLTALKで学ぶ オブジェクト指向プログラミングの本質

SMALLTALKで学ぶ オブジェクト指向プログラミングの本質

ですかね。

あとそのつながりで、「コードを書かない教育用プログラミング環境」SCRATCH なんかも刺激になると思う。一見おもちゃぽいけど、普通に複数オブジェクトが非同期で動く並列プログラミングができちゃうところはプログラマはもっと注目していいと思う。
SCRATCH については和書は一冊しか出ていないので迷いようはないですね。

スクラッチアイデアブック―ゼロから学ぶスクラッチプログラミング

スクラッチアイデアブック―ゼロから学ぶスクラッチプログラミング


長々と与太話失礼しました。

*1:ただし逆計算を許す述語はトロイのでカットで切っちゃうのが普通ですが