SICPビデオ講義(1986)
(ocw.mit.edu)- MIT 6.001
Structure and Interpretation of Computer Programsの全体の流れを20本のビデオ講義で追えるため、SICPを体系的に復習するのに適した資料 - 講義は1986年7月にHewlett-Packardの社員向けに実施され、Hewlett-Packard Televisionが専門的に制作
- 映像はMIT OCWと別の提供サイトで視聴でき、商用利用と互換性のあるCreative Commonsライセンスで提供
- 講義内容は1985年のSICP第1版を基準としており、1996年の第2版では一部プログラムの書き直しと新資料の追加があった
- 全体のテーマと発表順は維持されているため、第2版で学ぶ学習者にとっても依然として参考価値がある
講義構成と提供方法
- Hal AbelsonとGerald Jay Sussmanによる20本の講義が、MIT 6.001
Structure and Interpretation of Computer Programsのコースを完全な形で扱う - 講義は1986年7月にHewlett-Packardの社員向けに実施され、Hewlett-Packard Televisionが専門的に制作
- 映像はHal AbelsonとGerald Jay Sussmanが提供した資料であり、許可を得て使用されている
- 同じ映像はMIT OCWのほか、別の提供サイトでも提供されており、商用利用と互換性のあるCreative Commonsライセンスに従う
教材の版に関する注意点
- この講義は、1985年に出版されたStructure and Interpretation of Computer Programs 第1版を基準に進められる
- 1996年の第2版では、講義で扱われた複数のプログラムが書き直され、新しい資料が追加された
- 全体のテーマと発表順は変わっていないため、第2版を使う学生にとってもこのビデオ講義は有用
講義一覧
-
Lispと手続き抽象
- 1A: Overview and Introduction to Lisp: Lispの概要と紹介
- 1B: Procedures and Processes; Substitution Model: 手続き、プロセス、置換モデル
- 2A: Higher-order Procedures: 高階手続き
-
データと記号処理
- 2B: Compound Data: 複合データ
- 3A: Henderson Escher Example: Henderson Escherの例
- 3B: Symbolic Differentiation; Quotation: 記号微分とクォート
- 4A: Pattern Matching and Rule-based Substitution: パターンマッチングとルールベースの置換
- 4B: Generic Operators: ジェネリック演算子
-
状態、オブジェクト、ストリーム
- 5A: Assignment, State, and Side-effects: 代入、状態、副作用
- 5B: Computational Objects: 計算オブジェクト
- 6A: Streams, Part 1: ストリーム 第1部
- 6B: Streams, Part 2: ストリーム 第2部
-
評価器と論理プログラミング
- 7A: Metacircular Evaluator, Part 1: メタ循環評価器 第1部
- 7B: Metacircular Evaluator, Part 2: メタ循環評価器 第2部
- 8A: Logic Programming, Part 1: 論理プログラミング 第1部
- 8B: Logic Programming, Part 2: 論理プログラミング 第2部
-
マシンモデルとコンパイル
- 9A: Register Machines: レジスタマシン
- 9B: Explicit-control Evaluator: 明示的制御評価器
- 10A: Compilation: コンパイル
- 10B: Storage Allocation and Garbage Collection: 記憶領域割り当てとガベージコレクション
1件のコメント
Hacker Newsのコメント
SICPを学ぶなら MIT Scheme を使ってもよいし、別の選択肢として Racket や DrRacket にこのアドオンパッケージを追加して使うこともできる: https://docs.racket-lang.org/sicp-manual/
ほかのものは周辺機能が多すぎて気が散る可能性がある
MIT Scheme は Apple Silicon で動くようには作られておらず、多少の工夫で amd64 版を最新の Mac で使うことはできるが、Apple が Rosetta2 を廃止すれば使えなくなる可能性が高い
そのため Racket のほうがよりよい選択かもしれない
まともな Scheme 実装であればほとんど何でも SICP に使えるが、第2版以降でも言語が変わっているため勧めはしない
ただし自分のプロジェクトを始めた後なら別のシステムを使ってもよく、古いイディオムに対応する現代的な書き方を探すにはドキュメントを読む必要があるかもしれない
すべてのプログラマは LISP を学ぶべきであり、少なくとも真剣に学んでみるべきだ
たいていの応用プログラマは C プログラマのように手続き的にしか考えない方法を身につけている
LISP はハードウェアではなく概念を扱う「美しい」言語で、1990年に母校で数年間大学院プロジェクトに携わって使ったとき、考え方が完全に変わった
以前、本だけで SICP をやってみたことがあるが、講義のほうがずっと良く、本は補助的な参考資料の役割だと思う
練習問題を解いたり、本を逐一追ったりする必要はない
この分野に新しく入った人でも、何十年もの経験がある人でも、まだこの映像を見ていなかったり SICP の授業を受けたことがなかったりするなら、ほとんど誰にとっても役に立つはずだ
この映像と本を最後まで一通り学び、ニュースグループを通じて オフラインの勉強会 も組んだ
本当に楽しく、大きな突破口になったが、本の中盤あたりから参加者が減り始めた
SICPを読め という助言は、/g/ でもらった助言の中で最高だった
これで Lisp を学び、その後 Clojure を学んで、それを軸にキャリアを築いた
かなり好きな言語だ
本当に強く勧めたい
最初の講義を見るだけですぐ引き込まれる
システムプログラミング に関心のある人が、ここから得られるものは何だろう?
だからシステムプログラミングが主として状態管理と抽象化に関わるものだとするなら、非常に深く関係していると思う
ただし「システムプログラミング」を、既存の雑然としたシステムを無理やりつなぎ合わせることや、サードパーティ製ライブラリへの勘所を養うことだと捉えるなら、あまり関係ないかもしれない
それでもここには洞察がある。Sussman が SICP をいったん脇に置き、MIT に新しい入門課程を作るよう求められた理由を説明する映像を見たが、それは自分が磨き上げてきた宝石を丁重かつ思慮深くしまい込む姿のようだった
つまり、あらゆる抽象化レイヤーを横断して見通せることを私たちが期待できる時代は終わったということだ
この講義は 音質がひどく悪い
きれいに補正する方法はあるだろうか?