「計算機プログラムの構造と解釈(SICP)」を読み終えて by なつたん
ひげぽんさんの所をパクってテンプレートにして書いてみました。
練習問題をスキップしつつ、私も約半年でで読み終えました。とても楽しい日々を過ごすことができました。
SICPを読む過程で得たもの
・遅延評価とstream
・制約プログラミング、ロジックプログラミング、amb
・Emacs(Meadow)+gauche+Quackの組み合わせ便利
・同じ事を表現するのに、抽象度を上げたり、下げたりできること。
・手加減してあればLispのソースも追えるようになった。手加減していないのは駄目。
・Lisp特有の、手続きを評価する→S式ができる→また評価する→S式ができる、という気持ち悪い再帰の存在。
・SICP読み仲間ではないけどいろんなblogつながり。組み込みとFPGAだけでない、いろんな世界がある事をあらためて感じた。
SICPを読みはじめたときの動機を振り返る
・関数型言語について
Lispは関数型言語では無い事が分かった。C++と同じで、関数型言語として書くことも出来るし、ループと破壊操作の組み合わせでも書ける。ただ、特別変わった言語という意識は無くなった。
・悟りについて
例のあれ
> LISP is worth learning for a different reason - the profound enlightenment experience you will have when you finally get it.
> That experience will make you a better programmer for the rest of your days, even if you never actually use LISP itself a lot.
この経験が役に立つかは、これから僕がどうするかだ。新しい概念は勉強できたけど、悟りを開いたかどうか微妙。
・Lispについて その1
とりあえず、S式の世界に引きこもっているならLispが最強だと思った。SICP一冊読んだらLispについて語れるようになるかと思っていたけど、ただの入り口にしかすぎなかった。むしろ、読み終わってからLispの開始。Welcome to the Lisp world。
・Lispについて その2
C言語のプロトタイプ宣言程度の型チェックが欲しい。変数や関数に適切に名前を付ける能力が無いとLispは使いこなせない。自動GCは便利。Typoに弱い。デバッグ中に自分の想像と違う部分のコードが走っていてはまった。それぞれ良い方法があるんだろうけど。
・Paul Grahamについて
Paul Grahamの言うところのLispの力は少しだけ分かった。Lispの力の一つは「S式引きこもり」。マクロも勉強しよう。もう一度、普通のやつらの上を行けを今読むと、Paul Grahamが丁寧に言葉を選んでいるように見える。
駄目だ。全然パクリ切れてない。普通に書こう。
SICPを勉強するのは、ハイソなお嬢さんと一夏を一緒に過ごしたような感じ。(ハイソって死語か)
3章まではいままでとは違う世界を丁寧に順番に紹介してもらい、住んでいる世界が違うことを実感。4章で初めての共同作業、世間しらずのお嬢様と思っていたけど、芯は太くてしっかりしている事を確認。5章は最後に一緒に映画を見に行った甘い思い出。このまま、美しい思い出のままで終わっても良い気がする。
思い返しても4章はきつい。ここから日本語の情報が激減する。できる一部の人たちは別の言語で処理系を作り始めるからあまり参考にならず、それ以外の人たちはここで脱落しているのでは無いかと思う。もしくは、大学の授業がその手前で終わってしまうとか。4章のきつさは、説明読む→打ち込む→動かして確認 のループが大きすぎる事。練習問題を解いてもそこだけは動かないからあっているかどうか分からない、Streamとか、put/getとか、今までに学んだことが当たり前のようにでてきて、飛ばした人間を容赦なく絶望させていく。
The老害のアドバイスとしては
・20代で読め!
10年前とは言わなくても5年前にSICPを読んでいたら、と何回も悔やんだ僕がいうんだから間違いない。他の言語での実務経験はあった方がより楽しめる。
・半年くらい勉強する時間を作ろう。
本文だけ読むよりは実際に手を動かした方が楽しい。ある程度時間がかかるという覚悟は必要。
・4章で迷い始めたら。
(1)とりあえずそのセクションは写経する。
(2)手続き毎に、教科書本文の説明をソースに付け加える。この手続きは○○を引数に××を返す等。
(3)一部でも動きが理解できたら、そこだけの単体試験を行う。
(4)納得するまで(2)に戻る
で、なんとか動きました。必要に応じて3章以前に戻るのも大事です。4章は特別難しい。
4章を理解すると、5章はボーナスステージのように面白いから頑張ろう。
今、次の本を決める至福の一時を満喫中。EoPLも良いんだけど、HTDPも興味あり。
思いて学ばざれば則ち殆うしのコメント欄が気になっていて、SICPよりもわかりやすくて、同じように楽しめる書籍があるなら、そっちの方が良いと思うんですよ。CPUの設計で言えば、Computer Architecture ← パタヘネ ← CPUの創りかた の関係が好きで、内容もボリュームもSICPはパタヘネに相当する。パタヘネが終わった後に、次はヘネパタだとか、Intelのデータシート読めとか、いやいや論文ですよ、みたいに言うのは簡単で、むしろパタヘネが難しいって人に何を薦められるかって事の方が難しい。とくに社内でLisp仲間を増やしたいなら、SICPでふるいをかけるよりはもうちょっと難易度の低い本が欲しい。The Little Schemerはちょっと違った。
そんなこんなで一夏の思い出を胸にしまい、FPGAの世界に戻ってこよう。 ♪終わらない、なつやすみ~
The comments to this entry are closed.
Comments
僕も別の言語でやっちゃった人です.基本 Prolog (というか,ルール型言語) な人なので (笑)
(特に SICP の純粋な) Scheme プログラムはパターンマッチを使ってないので,プログラムが読み難くてしかたないと思います.これも,学習の障害の1つになっているのかも.
そういえば,卒論で,いろんな分野のプログラミングテクニックを ET という言語で実装する,みたいなことをやりました.しんどかったですが,勉強になりましたね.SICP と同様に,前の章で作った概念を,次の章からはあたりまえのようにビルディングブロックとして使用していく構成になってます.
http://www.geocities.jp/kl1_interpreter/GradThesis/thesis.pdf
ストリームプログラミングや,メタインタプリタは,Prolog や GHC の世界では,ほとんど基本概念になってます (そういえば,The Art Of Prolog 買ってましたね :-) ).
http://www.klic.org/software/klic/lang/node2.html
まぁ,当時は今以上に知識も経験も無かったので,読み返すと間違いや足りないところが多くて恥ずかしいのですが (時間が全然足りなくて,推敲も不十分でしたし).これはこれで,今では良い思い出です.
ちなみに,Prolog では,いわゆる 3 行 (OR 並列も入れれば 4 行) メタインタプリタが有名です (笑)
http://alohakun.blog7.fc2.com/blog-entry-127.html
# 昔のリンクを張るのは恥ずかしい…
Posted by: あろは | 2007.09.19 09:28 PM
あろはさん、こんにちは。
教えていただいた記事の近く、http://alohakun.blog7.fc2.com/blog-entry-125.html が面白かったです。
ロジックプログラミングとかルールベースのプログラミングというのは、ハード寄りの人間から見ると、プログラムカウンターの抽象化に見えて面白いです。並列化との相性の良さはそこですよね。
The Art Of Prologは本棚での存在感が凄いので、何年か後のPrologブームが来たら読むと思います。Prologも今のところは、「マニアックな学者向けの言語」という認識でしかないので、良い意味で期待を裏切って欲しいです。
# geoが死んでいます。
Posted by: なつたん | 2007.09.20 08:14 AM
死んでるのではなく,外部から PDF に直リンすると弾かれるみたいですね…
そのいっこ上からなら辿れると思います.
http://www.geocities.jp/kl1_interpreter/GradThesis/
Posted by: あろは | 2007.09.20 02:56 PM
あろはさん
上からだと無事見れました。これは凄いですね。
> さらに,全く未知の世界の建物| たとえば宇宙ステーション| を構築する際には,十
> 分に体系化や一般化が成されていない直観や経験則では助けにはならず,不十分なばかり
> か,大きな間違いの要因ともなり得る.棒高跳びの記録をいくら伸ばしたところで,けっ
> して月に到達することはできない.
みんなで棒高跳びをしているのがIT業界。
内容と違うところで驚いたので、別エントリー書きます。
Posted by: なつたん | 2007.09.20 05:20 PM
おまえたち悪い意味で悪すぎ。
おれは良い意味で良すぎ。
Posted by: | 2011.01.25 06:31 PM