コンピュータプログラムの構造と解釈が重要な理由
SICPの革新
- 知的水準の向上: SICPは、初級コンピュータサイエンス教育の知的水準を大きく引き上げた。従来の最初のCSコースは特定のプログラミング言語の細部を学ぶことに集中していたが、SICPはプログラミングという営みの全体像を学ぶことに重点を置いた。
- 抽象化の強調: 具体的な問題の中から一般的なパターンを見つけ出し、それぞれのパターンを実装するソフトウェアツールを作るという、抽象化の重要性を強調した。
- 関数のデータ化: 関数をデータとして使えるというアイデアを中心的に扱った。これは学ぶのが難しいが、いったん身につければ非常に強力な概念である。
- 多様なプログラミングパラダイム: 関数型、オブジェクト指向、宣言型という3つのプログラミングパラダイムを、最初のCSコースに統合した。
Scheme言語の選択
- 単純で一貫した記法: Schemeは、あらゆるものに対して非常に単純で一貫した記法を持っている。他の言語では変数代入、条件実行、反復、関数呼び出しなどにそれぞれ異なる記法を使うが、Schemeは1つの記法ですべてを扱う。
- 多様なパラダイムを学べる: Schemeの単純さのおかげで、さまざまなプログラミングパラダイムを容易に学べる。特に、オブジェクト指向プログラミングがどのように実装されるのかを理解できるようにしてくれる。
- 未来への備え: SICPは学生に、新しいプログラミング言語を学ぶ力を育てる。「将来使う言語はまだ発明されていない」という哲学を持っている。
SICPの楽観的なアプローチ
- 高い期待値: SICPは、大学1年生が達成できることについて楽観的な期待を持っている。学生は通常、上級生が扱うようなプログラミング言語インタプリタを書くことになる。
- 深い学習: テキスト自体は決して読みやすくはないが、すべての文が重要であり、それぞれの練習問題が重要な新しいアイデアを教えてくれる。
SICPの影響
- 継続的な影響力: SICPベースのコースは少数派だったが、その影響力は非常に大きかった。多くの後続の教科書が、SICPの基準に従おうと努めた。
- Schemeの拡大: 学習言語としてSchemeを使う範囲は、中学校から大学院まで拡大した。
- アイデア中心のコンピュータサイエンス: コンピュータサイエンスはアイデア中心であるべきだという概念が広く浸透した。
SICPの持続性
- 長い寿命: SICPは25年以上にわたって読み継がれ、現在も刊行されている。コンピューティング環境は大きく変わったが、その背後にある大きなアイデアは変わっていない。
- コースの変化: SICPベースのコースは、時間の経過とともに並列性、並行制御、ユーザーインターフェース設計、クライアント/サーバーパラダイムなどを追加していった。
MITのカリキュラム変更
- 応用中心のカリキュラム: MITは、トピック中心のカリキュラムから応用中心のカリキュラムへと転換した。プログラミング言語の選択は、その決定の中では最も小さな部分だった。
- 新しいアプローチの難しさ: 新しいアプローチは教えるのがより難しく、各コースで電気工学およびコンピュータサイエンスの教員の協力を必要とする。
学生たちの反応
- 後から高い評価: 学生たちは授業中には自分たちがどれほど多くを学んでいるのかをあまり実感しないが、後になって最も人気のあるコースの1つだったと評価する。卒業後も学んだ内容を実務で使っているというフィードバックが寄せられている。
GN⁺の意見
- SICPの教育哲学: SICPは、プログラミング言語の細部よりも大きなアイデアを学ぶことに重点を置き、学生が新しい言語を容易に学べる力を育てる。
- Schemeの利点: Schemeの単純さと一貫した記法は、初学者にとって非常に有益である。多様なプログラミングパラダイムを容易に理解できるようにしてくれる。
- MITの変化: MITのカリキュラム変更は応用中心の学習を重視しており、これは実務により近い経験を提供できる。
- 教育の持続性: SICPの長い寿命は、その教育哲学と内容が今なお有効であることを示している。これは教育の本質的な価値を強調している。
- 実務とのつながり: SICPベースの教育は、実務にすぐ応用できる力を育て、卒業後も大きな助けとなる。
1件のコメント
Hacker Newsのコメント
Abelson教授の講義はYouTubeで視聴でき、時間をかける価値がある: コンピュータサイエンスへの深い理解を与えてくれ、最近の誇大宣伝を差し引いて考える助けになるかもしれない。
本の前半は軽くて面白い読み物だった: オブジェクト指向の部分で苦戦し、個人的には関数型の考え方のほうが自分に合っていた。
YouTubeで80年代初頭の講義を見ることができる: ユーモアや初期のグラフィックの試み、70年代のファッションも含まれていて教育的だ。
かなり経験のあるプログラマにとっても、この本が今なお読む価値があるのか気になっている。
SICPの目的は、コンピュータサイエンスを楽しめない人たちを怖がらせることだと思っていた: 実際には非常に価値のある基礎課程だったが、一部の人は別の専攻に進むきっかけになった。
最初の数ページを超えられなかった: もし必修科目だったなら、別のことをしていただろう。
BerkeleyでCS 61AのTAをしていた: Scheme言語の単純で統一された記法は教育に役立つと主張されるが、実際には学生たちは混乱していた。Schemeの何もかもが同じに見える特性はバグだと思う。
SICPで学んだ最高の教訓は、最初の関数を書いた瞬間に、ドメインの問題を解くためのDSLを作っているということだ: この洞察がプログラマとしての自分のレベルを引き上げてくれた。
SICPについて読むたびにJavascriptへの苛立ちを感じる: JavascriptがSchemeだったなら、Web開発はもっと良くなっていただろう。
SICPとPAIPを比較してほしいという依頼: SICPは関数型プログラミングとコンピュータサイエンスの基礎を扱い、PAIPはより一般的なプログラミング実践に重点を置いているように見える。