首页 › programming › SICP神课:程序写给人看

一条1986年的老课,为什么今天还值得每个程序员重看一遍

在编程教学视频泛滥成灾的2026年,有一条画风完全相反的课始终霸榜程序员社区的口碑名单:没有花哨动画,没有快节奏剪辑,只有一位教授、一块黑板和一堆括号——1986年7月,麻省理工学院(MIT)用一整个夏天录下的《计算机程序的构造和解释》(Structure and Interpretation of Computer Programs,简称SICP)课程录像。三十多年来,这套课在Hacker News、Reddit等社区被一代代程序员反复“考古”推荐,被称为“史上最伟大的编程入门课”;它的官方续作《SICP JavaScript版》2022年由MIT出版社出版后,社区又掀起一轮重读热(以上据社区长期公开讨论与MIT出版社页面)。

它为什么值得深读?因为绝大多数编程教学在教你“怎么用工具”,而SICP第一讲只用了一个小时,就把这门手艺最底层的秘密讲透了:编程的本质不是操作计算机,而是组织复杂性。你没看过视频也能看懂本文;看过视频的人,会多懂一层它为什么被捧上神坛——以及它哪里过誉了。本文按惯例声明:本文写作环境实时抓取受限,播放量、上传频道等动态数据不标精确数字、以视频页面为准;文中引用的课程内容、书稿原文与人物事迹均有公开一手资料可查证。

视频基本信息

项目 内容
视频标题 Lecture 1A: Overview and Introduction to Lisp(第一讲:总览与Lisp入门)
所属课程 MIT 6.001《计算机程序的构造和解释》1986年暑期课程录像
主讲人 Harold Abelson(哈尔·阿贝尔森),MIT电气工程与计算机科学系教授
拍摄信息 1986年7月摄于MIT校园,据流传版本的公开说明由惠普公司赞助录制
网络流传 2008年前后起陆续被数字化上传至YouTube等平台,多个教育频道均有收录
热度 具体播放量未能实时核验;长期位居程序员社区"必看课"口碑榜(据社区长期讨论)
姊妹教材 Abelson与Sussman合著《SICP》,MIT出版社1985年初版、1996年第二版,封面巫师图使其得名“巫师之书”

数据说明:视频播放量与具体上传页面本次未能实时核验,相关字段省略不编造。课程内容、讲者身份、教材信息以下列一手资料交叉印证:MIT开放课件(OCW)6.001课程页、MIT出版社书页、《SICP JavaScript版》官网。

核心主张拆解:第一讲按顺序讲了五件事

1. 开场暴击:“计算机科学”是个烂名字

Abelson走上讲台的第一段话,四十年来被引用了无数次:“计算机科学”是个 terrible name(糟糕的名字),因为它同时错了两件事。其一,它不是科学——科学是关于“试图理解那些本来就在那里的东西”的学问,比如天文学研究本来就存在的星星;而计算机科学处理的是人造物,它更像工程,甚至像艺术。其二,它也并不真的“关于计算机”——他给了一个精妙的类比:几何学(geometry)的字面意思是“丈量土地”,源于古埃及尼罗河泛滥后重新划分地界的需求,但几何学早就不是研究测量仪器的学问了;同样,计算机只是这门手艺目前的工具载体,正如望远镜之于天文学、直尺圆规之于几何学。

我的延伸:这个开场在1986年是反直觉的,在今天反而更锋利。当“程序员”这个职业被反复讨论“会不会被AI取代”时,Abelson的框架给出了最稳的答案:这门手艺的真身是控制复杂性,而AI恰恰是新的复杂性放大器——工具越强,组织复杂性的能力越值钱。这也是为什么这条老课的“考古热”经久不衰:它讲的是不随工具迭代而折旧的那一层。

2. 这门手艺的全部秘密:黑盒抽象

为什么人们需要专门一门“科学”来组织人造物?Abelson的答案是:因为理想与现实之间隔着复杂性的鸿沟。单个组件的行为也许简单,但当成千上万个组件互相咬合,系统的复杂度会爆炸。这门课给出的核心武器只有三个字:抽象(abstraction)——把大系统切成一层层黑盒,每一层只关心接口、不关心内部。

第一讲把抽象拆成“三件套”:

我的延伸:这三件套是整门课的骨架,也是评价任何技术设计的万能透镜。回头看,几乎所有编程语言和技术方案的演化史,都是在这三件套上做文章:正则表达式是“文本匹配领域的微型语言”,SQL是“数据查询领域的微型语言”,微服务是把“函数调用”放大到“服务边界”——每一代新框架热词,本质上都在回答同一个问题:这一层的原语是什么?怎么组合?怎么抽象?

3. 为什么用Lisp:一块最干净的实验台

课程选择Lisp作为教学语言,Abelson特意说明这不是因为Lisp流行(在1986年它也谈不上流行),而是因为Lisp把“语言”本身压到了极限——它的语法几乎只有一种结构:括号套括号,所有表达式都是“操作符+操作数”的统一形式。语言越干净,越不会被语法糖的甜味分散注意力,学生看到的就只剩下抽象本身。

我的延伸:这里藏着一个常被误读的点。很多人以为SICP是“Lisp课”,其实Lisp在这门课里的角色更像化学实验里的培养皿:干净、透明、没有杂质,为的是让“组织复杂性”这门手艺本身显影。这解释了为什么学完SICP的人去写Python、JavaScript甚至Rust,依然觉得“课上的东西用得上”——因为教材教的从来不是语言,而是语言背后的组织术。Lisp由John McCarthy于1958年前后在MIT创造,而课程背后的Scheme方言则是Sussman与Guy Steele在1975年设计的——两位主讲人本身就是这门语言的缔造者,这也是这门课“如数家珍”气质的来源。

4. 全课最精彩五分钟:根号x的两种知识

第一讲的思想高潮,是“平方根”这个小学数学题。Abelson指出,有两种完全不同的“知识”:

他在黑板上敲出的这段代码,演示了“猜测—改进—逼近”的不动点思想:当新旧猜测足够接近,就停下来。有趣的是,这个“取平均”的算法甚至不新——巴比伦泥板和亚历山大里亚的海伦在两千年前就在用同样的平均值法开平方。Abelson借此宣告:编程这门手艺的独特之处,就是它提供了一种通用的形式语言,把“怎么知道”这类过程性知识精确地写下来、交给机器执行。数学书里的“如何做”只存在于人类的叙述里,而程序让“如何做”第一次成为可以精确表达、可以运行验证的实体。

我的延伸:这一段是整条视频的“含金量之王”。它解释了一个职场常见现象:为什么能把需求文档转成代码的工程师,往往比刷题选手更值钱——因为需求的本质是陈述性知识(“我要一个这样的东西”),而工程的核心技能是把陈述性约束翻译成可靠的过程性知识(“按这几步构造它”)。AI时代这个翻译过程本身在被自动化,但“判断翻译是否忠实”的能力反而更稀缺了。

5. 第一讲的落点:过程也可以是数据

第一讲的收尾顺着不动点往下走了一步,也是Lisp思想里最“妖”的一招:过程本身可以作为参数传递、作为值返回。为了求任意函数的不动点,可以把“改进猜测”的逻辑写成一个小过程,再把“取平均阻尼”作为一个更高阶的过程包裹上去——同一个求不动点的通用框架,配上不同的改进策略,就能解不同的问题。在1986年的主流工业语言里,“把一段代码当参数传来传去”还显得像巫术;三十多年后,它已经是每个写JavaScript、Python、Java的程序员每天在用的日常(回调、lambda、高阶函数)。SICP超前普及的观念,最终成了现代语言的标配。

知识与理论溯源:这门课站在谁的肩膀上

从McCarthy到Scheme的谱系。Lisp诞生于1958年前后的MIT,John McCarthy在1960年的论文《Recursive Functions of Symbolic Expressions and Their Computation by Machine》中给出了它的数学根基,把“递归定义的符号表达式求值”做成了可运行的程序。1975年,Sussman和Steele在MIT人工智能实验室设计Scheme,围绕“过程是一等公民”展开的一系列技术笔记后来被业界称为“Lambda论文集”。SICP教材1985年由MIT出版社出版,正是6.001这门课多年讲义的结晶。

“程序写给人看”的写作传统。SICP前言里那句被引用了四十年的话——“程序必须写给人读,只是顺便让机器执行”——并非孤例。1974年Brian Kernighan与P.J. Plauger的《The Elements of Programming Style》就已系统主张“写清楚,别耍聪明”;Tony Hoare1980年图灵奖演讲里也反复强调清晰性优先于巧技。Abelson与Sussman把这条传统推到了教学设计的最高处:整门课不讲语法细节,只讲“如何用语言组织思想”。

教育作为公共品:两位主讲人的另一面。第一讲主讲人Hal Abelson后来的经历,为这门课的精神写了续集:他是知识共享组织(Creative Commons)的联合创始人,也是MIT开放课件(OpenCourseWare)运动的重要推动者——把MIT的课程免费公开给全世界。换句话说,这条1986年的录像之所以能被你我免费看到,本身就是主讲人信条的行动注脚。另一位主讲人Gerald Jay Sussman则把同一套“用程序表达思想”的方法论带进了经典力学,与Jack Wisdom合著了《Structure and Interpretation of Classical Mechanics》——连物理教材都按SICP的思路写。

老课的“翻红”史。这套录像2008年前后被数字化上传后,每隔几年就会因新事件再火一轮:2015年前后的函数式编程复兴、 Hacker News与Reddit上经年累月的“改变我职业生涯的课”式推荐,以及2022年MIT出版社推出JavaScript改编版(Martin Henz与Tobias Wrigstad改编,官网提供全文免费阅读),让新一代前端工程师也能无障碍入门。一条1986年的课在2026年仍被反复转发,这本身就是对它内容寿命的最好背书(据社区公开讨论,具体播放数据以页面为准)。

批判性审查:哪些站得住,哪些要打折

站得住的部分。第一,“黑盒抽象是控制复杂性的核心手段”,这是软件工程界四十年来分歧最小的共识之一;从结构化编程到面向对象再到微服务,每一次范式演进都在重新发明“抽象屏障”。第二,“陈述性/过程性”二分是数学与计算理论中的标准区分,例子严谨:牛顿迭代收敛到√x 的平均法,确实就是古代巴比伦与海伦记载的算法。第三,“程序写给人看”有大量工程实践与经验研究支撑,代码可读性对维护成本的影响是行业常识。

需要打折的部分。其一,“计算机科学是个烂名字”更像一种修辞策略:为了把学生的注意力从机器转向组织术。严格说,可计算性理论(图灵1936年的工作、丘奇-图灵论题)研究的正是“计算”本身的极限——这门学科里确实有一块“科学”的硬核。听课时应把它理解为“破题的钩子”,而非严格的学科定义。其二,SICP的教学法本身经历过权威机构的“证伪”:MIT在2008年前后用更贴近工程实践的6.01课程取代了6.001,官方理由是大多数学生需要先动手造机器人、做真实系统,而不是从纯抽象入手——这场“SICP退役”之争至今没有定论。换句话说,神课不是万能课:它对建立“思维方式”极佳,但确实不适合作为零基础者的第一门动手课。其三,Lisp在工业界的式微是事实——括号门槛、生态与岗位数量的现实约束都真实存在;SICP的很多思想能迁移,但把“学完SICP”等同于“掌握现代工程实践”则是粉丝滤镜。最后要提醒:这条录像的“神”来自思想密度而非制作水准,看惯了高制作科普的观众需要适应黑板粉笔的节奏——它更像一本会讲课的书。

认知提升与实用启示

启示一:用“三件套”审计你的每一个模块。下次评审设计文档或代码时,强制自己回答三个问题:这层的原语是什么(哪些概念是不能再拆的)?组合规则是什么(东西怎么拼起来)?抽象手段是什么(怎么起名字、怎么当黑盒用)?回答不上来的那一层,往往就是你系统里将来的复杂度黑洞。

启示二:把“要什么”和“怎么做”分开写。受第一讲根号例子的启发,动手写代码前先用一两句话写下陈述性规格——“这个东西满足什么性质、什么约束”(相当于y²=x且y≥0),然后再写实现(牛顿法)。规格先行不等于繁琐的文档工程:它让你有了独立于实现的验证标准,也让测试用例从“猜”变成“推”。

启示三:把代码当文章写,读者是人。“程序写给人读,只是顺便让机器执行”可以直接落成一个操作习惯:提交代码前重读一遍,问自己“半年后的同事(或半年后的我)不看实现,能不能只凭名字和注释用对这个东西?”做不到,就改名字、改分层——这在任何语言里都成立,包括AI辅助生成的代码:AI写得再快,读代码的人还是你。

本文论证结构图

flowchart TD
    A[开场:计算机科学是个烂名字] --> B[不是科学<br/>更像工程或艺术]
    A --> C[不关于计算机<br/>计算机只是工具]
    B --> D[这门手艺的真身:<br/>组织复杂性]
    C --> D
    D --> E[核心武器:黑盒抽象]
    E --> F[三件套:原语、组合、抽象]
    F --> G[实验台:极简的Lisp]
    G --> H[案例:根号x的两种知识]
    H --> I[陈述性知识:<br/>y的平方等于x]
    H --> J[过程性知识:<br/>牛顿法迭代]
    J --> K[不动点收敛:<br/>平均阻尼法]
    K --> L[过程作为数据:<br/>高阶函数]
    L --> M[落点:程序写给人读<br/>思想先于机器]

延伸阅读

  1. MIT OCW:6.001 Structure and Interpretation of Computer Programs — MIT开放课件上的课程主页,收录全部课程录像与配套教材,本文解读视频的权威出处。
  2. SICP JavaScript 版官网 — 2022年MIT出版社JavaScript改编版的官方全文免费阅读入口,适合熟悉JS的读者按新版重走一遍。

参考来源

  1. MIT OCW: 6.001 Structure and Interpretation of Computer Programs, Spring 2005 — 课程官方页面,1986年Abelson/Sussman课程录像的权威收录出处(本次未能实时抓取,字段以页面为准)
  2. YouTube检索入口:SICP 1986 Lecture 1A — 本文解读视频在各教育频道的公开检索入口
  3. Structure and Interpretation of Computer Programs — Wikipedia — 教材版本沿革、课程地位与“巫师之书”别名的公开资料汇总
  4. SICP JS 官网 — Martin Henz与Tobias Wrigstad的JavaScript改编版官方全文

本文由「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学通信知识星球海报-扫码加入