SICPについていろいろ書く

自己紹介

詳しくはこちら 最近更新してないですが…


最近の私

毎週水曜日に社内勉強会でSICP読書会に参加してます.


SICPって何

  • 計算機プログラムの構造と解釈(Structure and Interpretation of Computer Programs)の略
    • 通称「魔術師本」
  • Lispの方言であるSchemeを題材に計算機プログラムを設計・実装していく感じの内容
  • MITの入門コースで使う計算機科学の優れた教科書(らしい
  • 原文は英語だが,和田英一氏翻訳の日本語版がこちらにある

SICPの良いところ

1. 効率の良いプログラムを書く意識が芽生える

アルゴリズムとかSchemeの言語そのものを学ぶのではなくて,コードを書く量を減らすだとかパフォーマンスの良い実装だとか,そういった考え方を身につけれます.

2. 練習問題があって,解答がない

問題ついてると理解度が高まるのはいいですが,解答がついてると詰まった時についつい頼ってしまいがち… SICPは解答が一切ありません.そりゃ実装方法はいろいろあるでしょ.

もしどうしてもわからないだとか,解答が気になる人は,ググればいっぱい見つかると思います(笑)

3. 学習にかかるコストが低い(実質無料

Amazonで買うとだいたい2000円 - 3000円くらい. Web公開版なら0円. ね、安いでしょ?


この本の悪いところ

  • 分量が多い・時間がかかる
  • 数学的知識が必要
  • 日本語訳が変なところもある
    • そのあたりは原文に目を通すか,作者に問い合わせるか,念じるしかない
  • ところどころ難問がある
    • まぁ無理に解く必要はないです.1問くらい飛ばしても理解できなくはないので…
  • 実用性がなくて学習効果が見えにくい
    • 流行はRubyか…

4月から勉強会に参加して週1ペースで読んで、1章を読み終わったのが8月上旬?だったかな.
今週は2.4.3まで読みました.
ちなみにこの本,5章まであります. 長い.

あと,数学的に難しい系の難問がいくつかあるけど,飛ばしてもいいのではないかと思います.


実用性が無いのなら読む意味がないのでは?

実用性が無い=学ぶ気になれない,って人結構いると思うんですよ. 最近こんな記事を見つけました

2017年に学ぶべき年収の高いプログラミング言語トップ15

なんとScalaObjective-Cを挟んで第3位にSchemeがランクイン. SICPが影響しているかどうかは不明ですが,Scheme自体そんな複雑な言語では無く,言語特有の闇が少ないといった感じです. なので,効率の良い実装方法を知るとか,データ抽象化だとか普遍的な技術体系を学ぶ上では非常に良い本では無いかと思います.

あと,最近C#とかJavaでもlambda式が使えるようになって,「lambdaってなんぞや??」っていう人もいると思います. SICPでもlambdaが出てくるので,lambda式知らない人は是非読むと理解ができるかと思います. (私もSICP読むまでlambda式さっぱりわからない人でした)


まとめ

Ruby on Railsとかnode.jsとか,実用性のある流行りの技術を学ぶことは当然有意義だと思いますが, 学習コストがかかるとか次から次へと新しい技術が出てきて学習しにくい人もいるのではと思います.

SICPはそういった実用性はないけど,学習コストはそんなかからないし 変わることのない普遍的な技術を学べるので何か得られるものがあるのではと思います.

技術的勉強したいけど何やったらいいかわからない人は、ここから始めても良いと思います. 結構読み応えあるし,一人で読むの難しい人はみんなで週1ペースで読むとか. 1つの勉強会のネタになるかなと.


よろしかったら参考までに

SICPはいいぞ。