<!-- title: SICP神课深读：程序员都是念咒的巫师 -->
<!-- domain: programming -->
<!-- video: https://www.youtube.com/watch?v=2Op3QLzMgSY -->

## 一门四十年前的课，凭什么还在被百万人反复看

1986年夏天，MIT的两位教授Hal Abelson和Gerald Jay Sussman，在惠普公司的场地里，对着一块黑板和一群工程师，录下了编程史上最著名的一门课——6.001《计算机程序的构造和解释》（SICP）。将近四十年过去，这套粉笔板书的老录像在YouTube上的播放量依然是百万级，第一讲更是被程序员们像传家宝一样转发了无数遍。

这件事本身就很反常。技术圈是个喜新厌旧的地方，三年前的框架都嫌老，为什么一门用Lisp讲课、画面发黄的录像能活四十年？

答案恰恰藏在它的第一句话里。Abelson开口就是一句暴击：**“计算机科学是个糟糕的名字。”** 他接下来花了整整十分钟论证：这个领域既不是科学，也不真正关于计算机。它研究的东西，比任何一台机器、任何一门语言都活得久。当你被“每个月出一个新框架”追得精疲力尽的时候，这十分钟可能是最好的解药——它告诉你，哪些东西值得学一辈子。

| 项目 | 内容 |
|------|------|
| 视频标题 | Lecture 1A \| MIT 6.001 Structure and Interpretation, 1986 |
| 频道 | MIT 6.001 课程录像（YouTube） |
| 时长 | 约55分钟 |
| 播放量 | 百万级（全系列中最高讲次之一） |
| 核心主题 | 什么是“过程”，如何用抽象驾驭复杂度 |

---

## 核心内容拆解

### 1. 开场暴击：计算机科学是个错名字

Abelson给出的理由有两条。第一，它不是科学：科学研究的对象是自然界原本就存在的东西，而计算机里的“过程”是人造物，这门手艺更像工程和艺术，不像物理化学。第二，它也不真正关于计算机——他的原话是：就像几何学（geometry）词源上是“丈量大地”、起源于古埃及量地，但没有任何几何学家认为自己在拿仪器量地。

计算机之于这门学问，只是个放大器，不是主角。

**【延伸分析】** 这个区分在1986年是学究气，在今天成了救命稻草。Dijkstra那句流传更广的话是同一个意思：“计算机科学之于计算机，就像天文学之于望远镜。”工具的半衰期是三年，但“如何组织过程”的半衰期是三十年。你焦虑的“学不动了”，多半是因为你在拼命追放大器，而不是在学放大器放大的那个东西。

### 2. 程序员的真实身份：念咒的巫师

Sussman在这讲里给程序员下了一个我见过的最迷人的定义：他说，我们是用咒语（spell）唤起计算机里的精灵（spirit）的人。程序就是咒语，运行起来的过程就是被唤出来的精灵——它看不见、摸不着，只会严格按照咒语行事。

所以这门课的自我定位，是一家“魔法学校”。

**【延伸分析】** 这个比喻不只是浪漫，它精确描述了程序员的工作困境：你的操作对象是不可见的。木匠刨歪了木头，看得见；你写的条件差了一个等号，精灵只会安静地执行错误指令，直到某天深夜爆炸。正因为对象不可见，**精确的语言是唯一的杠杆**——这解释了为什么程序员对命名、对语法、对规范有近乎洁癖的执着，那不是矫情，是职业本能。

### 3. 两类知识：数学教“是什么”，计算机只会“怎么算”

这讲最硬核的十分钟，是现场手写求平方根的程序。Abelson先写出数学书上的定义：√x 就是那个 y，满足 y 自乘等于 x。这叫**声明性知识**（declarative knowledge）——它陈述“是什么”，人能看懂，但机器不会执行。

计算机需要的是**过程性知识**（imperative knowledge）：一套逐步执行的步骤。于是他写下牛顿法：先猜一个数，然后不断用“y 与 x/y 的平均值”替换猜测，几次迭代后就能逼近真值。

```mermaid
flowchart TD
    Q["求 x 的平方根"] --> D["声明性：y 自乘等于 x"]
    Q --> P["过程性：牛顿迭代法"]
    P --> P1["先猜一个数"]
    P1 --> P2["改进：取 y 与 x/y 的平均"]
    P2 --> P3["再猜，直到足够接近"]
```

**【延伸分析】** 这个“是什么/怎么算”的分界线，在AI时代出现了历史性的松动——大语言模型第一次让机器能直接回答“是什么”。但只要进入生产系统，你仍然要把它变成可控、可验证、可复现的“怎么算”。理解这条分界线的人，才不会被“AI会不会取代程序员”吓到：机器正在学会陈述，而把陈述变成可靠过程的能力，依然是人的地盘。

### 4. 愿望思维：一门“合法的白日梦”工程学

接下来是全课最实用的思想武器。写平方根程序时，Abelson在总控逻辑里直接调用了一个**还不存在的子过程**——假装它已经写好了，先把顶层的思路写通，回头再来兑现这个愿望。他管这叫 wishful thinking（愿望思维），并且明确说这是一种严肃的方法，不是偷懒。

先许愿，再还愿。整棵程序树就是这样从顶上长出来的。

**【延伸分析】** 你会发现今天所有流行的工程实践，都是这个思想的仪式化：TDD先写测试，等于先把愿望用代码固定下来；contract-first先定接口再写实现，等于先许愿再分活；微服务拆分的第一步也是“假设下游已存在”。1986年没有这些名词，但思想是同一颗：**复杂性只能被推迟，不能被消灭——那就把它推迟到可以单独处理的时候。**

### 5. Lisp：一门几乎没有语法的语言，为什么要用它教学

观众看到满屏括号都会皱眉，Abelson专门为此辩护。他说评价一门语言要看三个维度：**基本表达式**（有哪些原子）、**组合手段**（原子怎么拼成复合体）、**抽象手段**（怎么给复合体命名、当新原子用）。Lisp在这三个维度上都推到了极限——前缀加括号的S表达式，让整个语言只剩下一条语法规则，而且代码和数据长得一模一样。

**【延伸分析】** “代码即数据”不是怪癖，是超能力：它意味着程序可以像处理数据一样生成和改写程序，这就是宏、DSL、以及后来无数语言特性（连eval、装饰器都有它的影子）的血统源头。更重要的启示是那个“三维度”框架——你今天学的任何新语言，Rust也好，Swift也好，仍然只是在这三个维度上做不同的取舍。有了这个框架，学新语言的恐惧感会下降一大半：你不是在学一门外语，是在看老三维度的又一次排列组合。

### 6. 黑盒：抽象的本质是“你不需要知道”

定义了 square 之后，Abelson反问：使用者需要知道里面写的是 x 乘 x，还是把 x 加了 x 遍，还是查了张表吗？不需要。这就是**过程抽象**——把“怎么做的”封进黑盒，只对外出售“是什么”。

他进一步点题：这门课从头到尾只关心一个问题——当系统大到没人能装进脑子时，怎么控制它的复杂度。答案是唯一的：一级一级地造黑盒。配套的还有书序里那句被引用了四十年的话：**“程序是写给人读的，只是顺便能在机器上执行。”**

**【延伸分析】** 从函数到类，从类到API，从API到微服务，四十年来所有架构话术，本质都是这个思想的不同折扣价版本。判断一个抽象好坏的标准也因此变得极其朴素：看它的接口文档会不会被迫解释实现细节。一旦解释了，黑盒就在漏水。

### 7. 结局的反讽：MIT自己换掉了它，它却没死

这门课的后续故事很有戏剧性。2008年前后，MIT用更工程化的6.01（Python加机器人）取代了6.001，技术圈一片哀嚎。据Sussman当时的解释，理由很务实：今天的工程师面对的是海量现成组件，拼装系统的能力比从零造轮子更稀缺。

**【延伸分析】** 但看这门课今天的观看数据——百万级播放，评论区挤满工作多年的工程师——你会发现两件事同时为真：**入门靠拼装，天花板靠抽象**。这门课没死，只是换了一批观众：从被迫修学分的大一新生，变成了碰过复杂系统、回头补内功的职业程序员。这可能是对它最好的评价——它是那种你越写代码、越能读懂的书。

---

## 知识结构图

```mermaid
flowchart TD
    ROOT["SICP第一讲知识地图"] --> M1["正名：它不是什么"]
    ROOT --> M2["正身：它是什么"]
    ROOT --> M3["方法论三件套"]
    M1 --> A1["不是科学，是手艺"]
    M1 --> A2["不关计算机，像几何不关量地"]
    M2 --> B1["研究对象：过程"]
    M2 --> B2["程序是咒语，唤起机器里的精灵"]
    M3 --> C1["基本表达式"]
    M3 --> C2["组合手段"]
    M3 --> C3["抽象手段"]
    C3 --> D1["命名与黑盒"]
    C3 --> D2["愿望思维，先用后造"]
    D1 --> E1["把复杂封进盒子"]
    D2 --> E2["自顶向下分解"]
```

---

## 实战启示

看视频是输入，怎么变成输出？给你四条明天就能用的行动指南。

**第一，写函数前先写“愿望清单”。** 动手前先假设所有理想构件都存在，把顶层逻辑一气写通，再逐个下潜实现。读代码时反过来用：先读主流程许了什么愿，再决定要不要下潜——很多烂代码的问题不是写得差，是根本没许过愿，想到哪写到哪。

**第二，给每个抽象做“黑盒体检”。** 写完一个模块，问自己：使用它的人，需要知道里面的实现吗？如果接口注释里出现了“内部会先……再……”，说明黑盒漏了。漏水的黑盒是所有系统腐化的起点。

**第三，AI结对时代，你的价值从“念咒”变成“审咒”。** Copilot们生成的是过程，但判断一段生成代码对不对、边界齐不齐、半年后能不能维护，靠的正是这门课教的过程思维。工具越自动，审查者的品味越值钱——而品味只能从这种“内功课”里来。

**第四，每年重读一门老课。** 这讲55分钟的信息密度，不如任何一个新框架的发布会刺激，但它决定的思考层次高得多。工具会旧，判断力不会——这就是四十年前的粉笔板书，能打赢每年新出的精品课的原因。

---

## 延伸学习路径

1. **SICP全书官方免费在线版**——MIT Press开放了全书全文，配合视频逐章精读，习题选做1.1–1.3节即可入门。
2. **MIT OCW课程页（6.001, Spring 2005）**——讲义、习题集、考试题齐全，适合想要完整课程体验的人。
3. **1986年录像全系列（1a–10b共20讲）**——本讲只是开篇，1B的高阶过程、3A的流式计算，一讲比一讲精彩。
4. **Berkeley CS61A**——SICP血统的现代改编版，教材《Composing Programs》用Python重写了全部思想，适合嫌Lisp门槛高的人。
5. **《The Little Schemer》**——用一问一答把递归讲到骨头里的另类神书，读完再看第一讲会有“原来如此”的补票感。

---

## 一句话总结

工具每年都在换，这门课四十年只教一件事：把复杂封进黑盒，用精确的咒语驾驭看不见的过程——这才是程序员真正的内功。

## 参考来源

1. [Lecture 1A | MIT 6.001 Structure and Interpretation, 1986](https://www.youtube.com/watch?v=2Op3QLzMgSY) — 本文分析的核心视频
2. [SICP 全书官方免费 PDF（MIT）](https://web.mit.edu/6.001/6.037/sicp.pdf) — 课程配套教材原书
3. [MIT OCW: 6.001 Structure and Interpretation of Computer Programs](https://ocw.mit.edu/courses/6-001-structure-and-interpretation-of-computer-programs-spring-2005/) — 课程讲义与习题
4. [Wikipedia: Structure and Interpretation of Computer Programs](https://en.wikipedia.org/wiki/Structure_and_Interpretation_of_Computer_Programs) — 课程沿革与MIT课程调整背景
5. [UC Berkeley CS61A](https://cs61a.org) — SICP思想的现代改编课程

---
> 本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵**爱卫生**（微信ID： gprshome201101）维护，聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。
> 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。

> [!tip] 51学通信知识星球
> **星主：爱卫生**（微信：gprshome201101）——公众号「51学通信」创办者，19 年通信行业运维与讲师经验，著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书（各大电商平台有售）。
> **星球定位**：深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域，主打运维岗位与信令分析。
> **当前规模**：5200 篇主题 / 990 个回答，198 元/年。
> **加入福利**：加入星球后请加爱卫生微信，拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题，另有群内分享。
> **AI 加持**：51学通信知识星球已作为 skill 接入 WorkBuddy，使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例，做总结、找文档和 PPT 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
