2016/02/13

プログラミング初心者がSICP(計算機プログラムの構造と解釈)を読んでみた

読む前の状態と動機

  • 読み始めた時点でプログラミング歴約1年
  • もうひとつのscheme入門でプログラミングに入門するも,高階関数で挫折.
  • Ruby本二冊,Rails Tutorialを二周.
  • 他読み始めたけど途中で飽きた本が何冊か.
  • 仕事(非IT)が忙しく,プログラミング始めて一年でこれくらいしか出来なかった.
  • 基本的なところがしっくりこない.
  • でもコード書くのは楽しいし,出来ればそれを仕事にしたいので基礎を身に着けたい.
  • 無職になって時間もあるから基礎を身につけるためにSICPを読もう.
     

 

読むための準備

  • Scheme手習いとプログラミングGaucheを読んでからSICPにとりかかった.
  • メインで読んだのは2版の和田訳.読んでわからない時は原著や1版の元吉訳に当たる.
  • 後半になると真鍋訳が登場したためこちらにも助けられた.
     
     

    SICPを読む過程で得たもの

  • 括弧が気にならなくなった
  • S式のほうが読みやすいのになんで中置記法のほうがメジャーなの?
  • 再帰的プロセスと反復的プロセス
  • 第一級手続き
  • 抽象の壁
  • メッセージパッシング
  • 型によるディスパッチと強制型変換
  • イベントドリヴン
  • 制約の拡散
  • 破壊的代入が怖くなった
  • ストリーム
  • 遅延評価
  • 超循環評価器の実装を通して評価戦略を理解した.
  • レジスタマシンのシミュレータによって低レベルで何が行われているのか理解した.
  • コンパイラインタプリタの効率の違い
     

    感想

    4ヶ月半近くかかった.
    SICPは基礎と聞いていたけど,やっぱり基礎でした.
    今の段階で読んでおいてよかった.
    問題全部解くつもりはなかったけど,だんだんと自力で解きたくなってきたため結局ほとんど自力で解いていた.
    解けないと悔しい.
    問題やってみて思うのは,時間がめちゃくちゃかかるけど解かないと理解できなかった.
    特に4章からは本文のコードを動かすにもデバッグが大変で,問題解くにもデバッグが大変.
    でもそのデバッグを通して何度もコードや本文を読むことでそこで何をしているのか理解していけた.
    最後はソースがコメントだらけになった.
    C言語でやる問題が2問残っているのでCを勉強してから解きたい.
    プログラミング楽しい!にプログラミング言語おもしろい!も追加された.
    プログラミング初心者からプログラミング初級者へレベルアップできた・・・はず.
     
    これから読む人にはScheme手習いを読んでおくことを勧めたい.
    読みにくいし後半急激に難しくなるけど,そこで継続を渡すことを覚えておくと楽になる.
    デバッグ方法も覚えておかないと4章から辛いので
    Gauche使うならプログラミングGaucheにも一通り目を通しておいたほうがいい.
     
    かなり苦しんだけど,それでも楽しい・おもしろいのほうが勝ってる.
    まだ半年は生きていけそうなのでまだまだ勉強してコード書く仕事につけるように頑張ります.
    とりあえずプログラミングの基礎 (Computer Science Library)でMLとデザインレシピに触れてからK&Rを読もうと思ってます.

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

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

Scheme手習い

Scheme手習い

プログラミングGauche

プログラミングGauche


© 2022 wat-aro