如果一门编程范式的发明人亲口告诉你:教科书里教的那套,不是我想的那回事——你会不会心里一惊?
1997年,OOPSLA(面向对象编程系统、语言与应用大会)上,Alan Kay 做了一场后来被反复引用的演讲,题目叫 "The Computer Revolution Hasn't Happened Yet"(计算机革命还没发生)。Kay 是"object-oriented(面向对象)"这个词的发明人,Smalltalk 之父,图灵奖得主。按理说,全场听众都是来听“祖师爷”布道的。结果他花了将近两个小时,讲了一件让很多人坐立不安的事:你们以为的面向对象,和我发明的面向对象,根本不是同一个东西。
这场演讲的价值在哪?它不是怀旧,而是诊断——诊断的恰恰是今天的病。你如今听到的微服务、组件化、事件驱动、AI Agent 编排,骨子里都在重新发明 Kay 三十年前讲的东西。看懂这场演讲,你就能看懂为什么有些系统越长大越僵,有些系统却能像生命一样生长。
说明:本文基于该演讲的公开存档版本与 Kay 一贯的公开论述(如 HOPL-II 上的 Smalltalk 历史论文、他回复 Stefan Ram 的著名邮件)撰写;因环境限制未能实时核对播放量等数字,相关字段均为约数,已明确标注。
| 项目 | 内容 |
|---|---|
| 视频标题 | The Computer Revolution Hasn't Happened Yet(OOPSLA '97 演讲) |
| 频道 | OOPSLA'97 大会录像,YouTube 有多个学术存档转载版本 |
| 时长 | 约100分钟(不同存档版本略有差异,未经精确核对) |
| 播放量 | 各转载版本多年累计约数十万级(约数,未经官方证实) |
| 核心主题 | 面向对象的真实含义、细胞隐喻、以及一场“尚未发生”的计算机革命 |
演讲标题本身就是论点。Kay 认为,上世纪六七十年代 ARPA 社区孕育的那批“大想法”——计算机不是算数机器,而是人类思维和表达的媒介(medium for thought)——到1997年依然没有被主流世界真正吸收。商业世界确实捡走了成果:窗口、图标、鼠标、个人电脑遍地开花。但 Kay 说,这些只是表层。深层的愿景是让每个普通人拥有一个像“超级笔记本+表达工具”的设备(后来的 Dynabook),用计算来思考、创作、学习——这个愿景在他看来远未实现。【视频核心主张】
延伸分析: 把这套判断平移到2026年更扎心。今天人人口袋里都有一台超级计算机,但大多数人用它消费内容而非表达思想。从 Kay 的标准看,革命确实还没发生——设备普及了,媒介素养没有。
这是整场演讲之外最著名的一段话。Kay 在一封公开邮件(回复学者 Stefan Ram)中写下了他对 OOP 的完整定义:"OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things."——面向对象,对我来说只意味着:消息传递、状态的本地保有与隐藏保护、以及一切事物的极度晚绑定。他补了一句:Smalltalk 和 Lisp 都能做到。注意,这个定义里根本没有“类”,也没有“继承”。【原话】
延伸分析: 这不是修辞,是路线之争。C++/Java 时代把 OOP 等同于“类+继承+多态”,结果写出无数继承树深达七八层、改一处崩一片的代码。回头看 Kay 的定义会发现:我们把手段(类的语法)当成了目的,而他真正在乎的是运行时对象之间如何通过消息协作。Go 和 Rust 弃用继承、Erlang/Elixir 的 actor 模型大放异彩,其实都是在往 Kay 的原始定义回归。
Kay 最迷人的思想实验:为什么人体内大约几十万亿个细胞,能拼出一个稳定运行几十年的你,而不是三天两头“系统崩溃”?因为每个细胞把内部状态锁死在细胞膜内,从不直接翻邻居的口袋;一切协作都通过膜上的化学信号——也就是“消息”。Kay 认为软件对象就该照这个路数造:小而完整、极端封装、只靠消息对话,然后像组织、器官、生态一样层层组合。【视频核心主张,与其在《The Early History of Smalltalk》论文中的论述一致】
延伸分析: 对比一下“大泥球”式系统:全局变量满天飞、模块之间互相 import、改一处牵全身——本质上是所有细胞共享一套细胞质。微服务架构师嘴里的“限界上下文”“接口契约”“熔断隔离”,翻译过来就是:有膜、有膜、有膜。这不是巧合,是同一个生物学直觉。
这场演讲的历史部分同样精彩。Kay 的思路不是凭空掉的:1963年 Ivan Sutherland 在 MIT 的博士论文 Sketchpad,已经做出了“母图-实例”和几何约束系统,少年 Kay 恰好在犹他大学读书时近距离浸润了 Sutherland 的传统;1967年挪威人 Dahl 和 Nygaard 的 Simula 67 带来了 class 这个概念;而 Lisp 社区贡献了“程序即数据、随时重定义”的晚绑定基因。Smalltalk 是这三条血脉在 Xerox PARC 的汇流。【视频核心主张,史实部分为学界公认】
延伸分析: 这对我们普通开发者的启示是:读源头比读框架文档划算得多。框架文档告诉你“怎么用”,源头论文告诉你“为什么非这样不可”。花一小时看1963年的 Sketchpad 演示影片(YouTube 可搜 "Sketchpad 1963"),你对“交互式图形系统”的理解会超过读十篇前端架构文。
定义里的第三个词 "extreme late-binding" 最少被人谈论,却可能是最值钱的。所谓晚绑定,就是决定“这段消息由谁来响应”的时刻越晚越好——Smalltalk 的消息在运行时才查找接收者,代码可以在系统活着的时候被修改和替换。Kay 认为这是软件能“生长”的前提:绑定得越早,系统越像浇筑好的水泥;绑定得越晚,系统越像可以修剪的植物。【视频核心主张】
延伸分析: 今天的每一个“高级实践”几乎都是晚绑定的变体:插件架构、依赖注入、特性开关、配置中心、甚至给 LLM 在运行时注入不同的 system prompt——都是在推迟那个“最终决定”。反过来,很多系统之所以僵硬,是因为把决定做死在了编译期和发版期。下次评审设计时不妨问一句:这个决定,能不能再晚做一个月?
Kay 的另一个身份是教育思想家,深受 McLuhan“媒介即讯息”和皮亚杰建构主义的影响。他在演讲中反复强调:计算机行业的本质不是“工具业”,而是“媒介业”。孩子学编程,不是为了当程序员,而是像学读写一样获得一种新的表达力——这是 Dynabook 愿景的原点。后来他带领的 PARC 学习研究组在这条路上做出了 Smalltalk 和 Etoys;再后来,MIT 的 Scratch 明显继承了 Etoys 的思路,让全球上亿孩子用积木块表达想法。【视频核心主张,历史脉络为公开文献记载】
延伸分析: 这解释了一件怪事:为什么 Scratch 在编程教育里几乎一统天下?因为它的目标从来不是“教语法”,而是“给思维一块可擦写的草稿纸”。对照今天“三天学会 Python 找工作”式的速成班,方向几乎是反的——一个在造媒介,一个在造螺丝钉。
这场演讲至今争议不断,技术社区(如 Hacker News 上的多次讨论)常见的交锋是:反方说,iPhone 时代人人手握超级计算机+图形界面+触控交互,革命早就完成了;正方说,大多数人是消费者而不是表达者,“思维媒介”从未普及,Kay 的愿景连 5% 都没实现。【社区观点综述】
延伸分析: 我倾向于一个中间结论:革命没有失败,它在排队。每一次架构风潮——CORBA、SOA、微服务、Serverless、Agent 编排——都是“消息传递+封装”这个老想法换上新西装。而大模型时代的意义在于:生成代码的门槛塌了,普通人“用计算表达想法”第一次有了现实的技术底座。Kay 的愿景不是被证伪了,而是终于等到了它的候选基础设施。
flowchart TD
A["计算机革命尚未发生"] --> B["六十年代的大想法"]
A --> C["只被商业化的表层"]
B --> D["Sketchpad 1963"]
B --> E["Simula 1967"]
B --> F["Lisp 晚绑定传统"]
D --> G["Smalltalk 合流"]
E --> G
F --> G
G --> H["消息传递"]
G --> I["状态封装隐藏"]
G --> J["极度晚绑定"]
H --> K["细胞隐喻"]
K --> L["细胞锁住内部状态"]
K --> M["只靠消息跨膜通信"]
H --> N["互联网也是消息网"]
C --> O["窗口与图标被拿走"]
C --> P["思维媒介被留下"]
P --> Q["Dynabook 与儿童"]
Q --> R["计算是一种读写能力"]
看完这场演讲,能立刻用在日常写代码上的,是三个“细胞拷问”。第一问:状态藏干净了吗?模块的内部字段是否有公共出口在裸奔?有,就是在给自己的细胞膜开天窗。第二问:对外只走消息吗?模块之间的依赖应该收敛到接口、事件或消息契约上,而不是直接伸进对方的实现细节。第三问:这个决定能再晚做吗?凡是写死在编译期、发版期的选择,都问问能不能推迟到运行时、配置里、或者用户手里。
架构层面,微服务设计者尤其该把细胞隐喻当审查清单:每个服务有膜(清晰的 API 契约)、有自护(熔断、隔离、降级,细胞受伤不扩散)、有消息(可观测的异步通信)。一个“服务”如果还要共享数据库才能工作,那不是两个细胞,是一个被切成两半的细胞——比不切还糟。
学习层面,给两条具体建议:一是去读源头,Kay 1993 年的《The Early History of Smalltalk》和1963年的 Sketchpad 影片,比任何现代框架教程都更能刷新你对“封装”和“交互”的理解;二是花一小时玩玩 Pharo 或 Squeak——Smalltalk 的现代直系后代——亲身体会一次“系统活着时被改造”是什么感觉,你会立刻明白晚绑定的魅力。
对 AI 时代的开发者,还有一层:把每个 LLM Agent 当细胞设计。工具调用是它的膜,上下文与记忆是它锁住的内部状态,Agent 之间只靠明确的消息协议协作——别让一个 Agent 翻另一个 Agent 的“细胞质”。三十年前的生物学隐喻,正好是今天多智能体系统最缺的设计纪律。
别再背“封装继承多态”的三字经了——面向对象的灵魂,是把软件拆成一群把状态锁好、只靠消息说话的细胞,而这场革命至今仍未完成。
本文由「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 等场景全覆盖。
