-
本の紹介
- 学生に夏の間に読む本として貸した本がある
- この本はコンピュータサイエンスにおける最も重要な著作の一つであり、個人のキャリアや研究に大きな影響を与えた
- 書名は Hal Abelson と Jerry Sussman による Structure and Interpretation of Computer Programs (SICP)
-
本の重要性
- この本はコンピュータサイエンスに初めて触れるとき、大きな影響を与える
- プログラミングの基本要素を紹介し、さまざまなテーマを探究する
- テーマにはラムダ抽象、高階計算、複雑なデータ構造、モジュール性、ストリーム、遅延評価、インタプリタおよびコンパイラの構築、記憶管理などが含まれる
-
言語設計へのアプローチ
- Hal と Jerry はあらゆるものを言語設計の演習として捉えている
- 複雑なシステムを階層化された設計として構造化するという概念を紹介する
- 各階層は、その階層で原始的と見なされる部分を組み合わせて構成される
-
コンピュータサイエンスの本質
- コンピュータ革命は、思考の方法と表現の方法の革命である
- 手続き的認識論という概念を紹介し、これは命令的な観点から知識構造を研究するものだ
- コンピュータサイエンスは「どのように」に対するフレームワークを提供する
-
本の持続的な関連性
- 1988年に購入したこの本は、今なお関連性を保っている
- コンピュータサイエンスにおいて、時が経っても価値を失わない数少ない本の一つである
- Feynman の Lectures on Physics と同様に、コンピュータサイエンスの本質をよく捉えている
-
更新
- 2024年1月27日に更新
- この本は注釈付き Lisp 参考文献にも含まれている
1件のコメント
Hacker Newsのコメント
Abelson と Sussman の1986年の講義動画で本の内容を学べる。彼らの抽象化の階層化に関する説明は、個人的にもメンターとしても役に立つ
SICP のような古典的なテキストはプログラム設計について語っているが、最近ではシステム設計のほうが重要だと思う。分散システムがコンピュータサイエンスの一部かどうかは分からないが、解くべきより一般的な問題だ。システムはできるだけ単純に書き、観測ツールを使って設計上の欠陥を把握し、その後でデータ構造やほかのコンピュータサイエンス的な手法を使って問題を解決する。たいていの場合、ビッグオー記法や実行時の計算量は重要ではなく、配列と高速な CPU でほとんどの問題を解決できる。実行時の問題があるときは、プログラムをプロファイリングしてホットスポットを見つけるべきだ。コンピュータサイエンスは CPU のメモリキャッシュの動作までは教えてくれない。洗練されたグラフアルゴリズムが良い計算量を持っていても、CPU キャッシュを完全に台無しにしてしまい、配列を使えばもっと速く処理できたかもしれない。より一般的な問題は、耐障害性、分散ロックとキューの正しさ、システムのスケーラビリティだ。自分はコンピュータ工学/電気工学の背景があるので、そのバイアスかもしれない
無料版へのリンクが壊れている。2001年ごろには HTML 版だけが無料で提供されていて、誰かがそれを TeXinfo に変換した。今 SICP を学びたいなら、MIT Scheme や DrRacket でコードを実行できる
"The Elements of Programming Style" は3回読む価値があり、それ以上読んでも多くの恩恵を得られた。2010年のレビューを参照できる
SICP を好きになりたかったが、Lisp は難しく感じる。Haskell と Standard ML は好きだ。ほかの人も同じような経験をしたのか気になる。SICP に近い精神を持つ本を別の言語で読むのは面白いかもしれない。JavaScript で SICP をやりたいとは思わない
"Software Design for Flexibility: How to Avoid Programming Yourself into a Corner" についてどう思うか気になる
SICP は、さまざまなプログラミングモデルが存在することを理解する助けになった。この本は、言語、ライブラリ、フレームワークのドキュメントを読み、方向性をつかむ助けになる
25年間プログラミングをしていて、この本は10年ほど前から持っていた。最近 Dr. Racket で始めた。Dr. Racket の良いところは、変数にマウスオーバーするとコード内のほかの位置とのつながりを視覚的に確認できる点だ。ただ、VS Code ではないのが少し不満だった。そこで VS Code(実際には Cursor)を使って練習問題を解ける環境を整えた。LLM 統合がすばらしく、コードと自分で書いたナラティブを渡してフィードバックを求められる。演習を少し進めたところだが、コード変換や自分の回答、LLM から受け取ったフィードバックを静的サイトにまとめた。時間の使い方としては面白かった。LLM の助けなしに SICP を完全に理解できるわけではないが、LLM を演習にどう組み込めるかを見るのは興味深い
2回目に読んだとき、脚注や参考文献をたどるようになり、そこに美しい世界があることを知った。Sussman とそのチームが天体の特性を計算するためにカスタムのプログラマブルプロセッサを設計した論文がある。いつも驚かされる
原著版と JavaScript 版へのリンクを載せている