跳转到内容
← 返回先驱
个人计算先驱1940–约 17 分钟阅读

艾伦·凯

Alan Kay

面向对象Smalltalk图形界面Dynabook

1968 年,艾伦·凯(Alan Kay)还是犹他大学的一名博士生,某天他走进一个陈列室,看到一台叫 FLEX 的实验性计算机原型。那台机器可以在屏幕上直接绘制图形。他突然意识到:这台机器不应该只给专业人员使用,它应该像书本一样,属于每一个人。

这个想法后来演变成"Dynabook"的概念——一台薄而便携的个人计算设备,供儿童学习使用,永远联网,可以存储知识、运行程序。他在 1972 年的一篇论文中描述了这个设想。那一年,iPad 还在三十多年后才会诞生。

破除误解:凯不是"图形界面的发明者"

施乐公司(Xerox)的 Alto 计算机、苹果公司的 Lisa 和 Macintosh——这条线索让人们把图形用户界面(GUI)的发明归功于若干个人和公司。这里面有复杂的历史。

道格拉斯·恩格尔巴特(Douglas Engelbart)在 1968 年就演示了窗口、鼠标和超文本(即"所有演示之母",Mother of All Demos)。但把这些想法系统化成可以被任何人使用的编程环境,是艾伦·凯在 Xerox PARC 的工作。凯不只是设计了界面,他设计了驱动界面的编程语言和哲学——Smalltalk,以及"对象"这个概念。

把 GUI 专利史写成几个人的发明赛跑,会漏掉凯真正较真的那一层:计算应当是可活着被修改的介质,而不是一堆编译好的应用。图形界面若只是把命令换成图标,骨子里仍是主机时代的交付模型;Smalltalk 把窗口、菜单、调试器都做成可检查、可改写的对象,界面才第一次与语言同构。后来商业 GUI 大量采纳了外观,却把"用户可深入系统本身"这条锯掉了——这正是凯晚年反复抱怨 iPad 的根源,而不是他对圆角矩形有洁癖。

现场:Xerox PARC 的黄金时代

凯 1940 年 5 月 17 日生于马萨诸塞州斯普林菲尔德,父亲是生理学家,母亲是音乐家。他在阿德尔菲大学读音乐和数学,随后转到犹他大学攻读计算机学博士(1969 年毕业)。

1970 年,他加入刚成立的施乐 PARC(Palo Alto Research Center),那是计算机史上最富有传奇色彩的研究机构。在那里,他领导了 Smalltalk 语言和 Alto 个人计算机软件系统的开发。PARC 的研究成果包括:激光打印机、以太网、图形界面、面向对象编程,以及所见即所得(WYSIWYG)文档编辑——这些创新后来被苹果公司(部分地)在 Macintosh 上商业化,最终改变了整个行业。

PARC 的工作方式本身就带着面向对象的气味:小团队、可运行的原型、把想法做成能被同事当场试用的系统,而不是先写完规格再开工。凯后来常说,真正的计算机科学应当更像生物学与剧场——系统要能生长、能排练——PARC 那几年偶尔接近这种节奏。Alto、Ethernet、激光打印与 Smalltalk 同处一楼,不是偶然的技术堆叠,而是同一信念的不同器官:个人应拥有完整的、可塑的信息环境。

核心一:面向对象编程与 Smalltalk

凯在犹他大学时受到西摩尔·帕珀特(Seymour Papert)的 LOGO 语言、Sketchpad(Ivan Sutherland 的互动图形系统)以及 Simula 语言的影响,发展出了"面向对象"(Object-Oriented)的核心思想。

面向对象的核心隐喻:程序不是一系列命令的列表,而是一组相互发送消息的对象(objects)的社会。每个对象封装了自己的数据和行为,只通过消息(方法调用)与外界交互,外界不需要知道它内部是怎么工作的。

凯曾说,"面向对象"这个词语是他自己发明的,但他最看重的不是"对象",而是消息传递(message passing)——这个思想比后来 Java、C++ 的"对象"实现要更激进和彻底。在真正的 Smalltalk 风格里,连数字 5 和类定义本身都是对象,可以接收消息。

凯对"对象"的原始想象来自生物学。他后来解释过自己的构思:对象就像生物细胞,或者说像网络上一台台独立的小计算机——每个细胞有自己的膜(封装的状态),只通过化学信号(消息)与外界交换信息;细胞的内部机制对外界不透明,也没有必要透明。这个隐喻带来三条设计推论:

  1. 封装是绝对的。外界不能读取对象的内部状态,只能发消息。隔离让系统可以局部修改而不波及整体——就像生物体可以更换单个细胞。
  2. 消息的语义由接收者决定。同一个消息发给不同对象,行为可以完全不同(多态)。发送者只表达意图,不规定实现。
  3. 晚绑定(late binding)是安全网。消息与方法的对应关系在运行时才解析,而不是编译时钉死。代价是性能与静态检查的缺失,收益是系统可以在运行中被修改、被替换、被生长——凯认为这对"活的系统"是不可让渡的。

后来主流的面向对象语言在凯看来大多背叛了这个隐喻:C++ 把方法调用退化为编译期确定的函数调用,继承被当成代码复用工具。1997 年他在 OOPSLA 会议上那句著名的话——"我确实发明了'面向对象'这个词,但我可以告诉你们,我心里想的不是 C++"——就是在纠正这个误读。

Smalltalk 语言于 1972 年开始开发,历经数个版本。它引入了今天已经成为标准的若干概念:

  • 类(Class)与实例(Instance):类是对象的模板,实例是类的具体实现
  • 继承(Inheritance):子类可以继承并扩展父类的行为
  • 动态类型(Dynamic Typing):类型在运行时确定,而非编译时
  • 垃圾回收(Garbage Collection):内存由语言自动管理,程序员不需要手动释放
  • 即时编译(JIT)的早期实现:Smalltalk 的部分实现采用了早期形式的运行时优化

这些概念在今天听起来稀松平常,但在 1970 年代初,它们是激进的革命。

若只把 Smalltalk 记成"又一门带类的语言",会错过它与后来 OOP 主流的裂隙。凯坚持的对象,首先是通讯地址:你不知道也不应知道对方内部用什么表示,只约定消息的协议。类与继承在他看来是组织实现的便利,甚至是可替换的;元类让"类也是对象"成立,于是开发环境里的浏览器、检查器可以统一地对待一切。Live coding——改完方法立刻在正在跑的世界里生效——不是演示技巧,而是这条哲学的工程后果:系统必须在运行中保持可解释、可手术。Java 与 C++ 把对象收成带虚表的抽象数据类型之后,消息变成了早期绑定的方法调用,"活的系统"便退回成编辑—编译—重启的车间流程。

Smalltalk 的诞生本身是一个关于"语言能有多小"的实验。凯曾与同事丹·英戈尔斯(Dan Ingalls)和泰德·凯勒(Ted Kaehler)打赌:他能在"一页代码"内定义出"世界上最强大的语言"——对标的是麦卡锡自描述 Lisp 解释器的规模。凯在随后两周里每天从凌晨四点工作到八点,写出了 Smalltalk-71 的定义;几天后,英戈尔斯用 BASIC 把它实现了出来——慢得几乎不可用,但确实能跑。语言随后快速迭代:Smalltalk-72 引入了完整的消息传递模型;Smalltalk-76 从 Simula 借来类的概念,并配上带图形界面的开发环境;Smalltalk-80 引入元类(类本身也是对象),成为第一个对 PARC 之外公开发布的版本。

Smalltalk-80 的公开发布(经由 Addison-Wesley 的蓝皮书、橙皮书等)把这套环境带出 PARC,却也把它抛进了与主流工业不同的时间表:工作站昂贵、许可复杂,而 C++ 正借着系统编程的胃口迅速扩张。对象的名声传开了,消息传递的激进含义却被稀释成"封装 + 继承 + 多态"三件套教材。凯此后数十年的公共言论,很大一部分是在追讨这个词最初的用法——不是怀旧,而是担心计算教育把学生训练成在脆弱巨型程序里打补丁的人,而不是建造可生长介质的人。

核心二:图形界面与 Dynabook

凯的 Dynabook 设想(1972 年论文"A Personal Computer for Children of All Ages")描述了一台薄如笔记本的个人计算设备,有键盘、高分辨率显示屏,可以联网,运行交互式程序。这不只是技术预测,而是一份教育哲学宣言:计算机应该是人类认知的扩展工具,让儿童可以像使用乐器一样使用它,自由创作和探索。

虽然 Dynabook 从未作为独立产品推出,但它的很多理念被体现在了 Alto 计算机(1973 年)上——世界上第一台具有图形界面的个人工作站。Alto 有:桌面隐喻(Desktop Metaphor)、重叠窗口(Overlapping Windows)、图标(Icons)、鼠标驱动的光标——这就是今天你使用的任何操作系统的视觉界面原型。

在 PARC 内部,Alto 有一个更能说明其定位的名字:"过渡 Dynabook"(Interim Dynabook)——它不是凯理想中的成品,而是为了抢在真正的 Dynabook 可行之前,先把软件环境跑起来的跳板。硬件由计算机科学实验室的查克·撒克(Chuck Thacker)和埃德·麦克雷特(Ed McCreight)设计,1973 年首台机器运转。施乐前后造了上千台 Alto,却从未把它作为商品出售——大部分留在 PARC 与施乐内部,或送往麻省理工、斯坦福、卡内基梅隆等合作大学。一个耐人寻味的历史事实是:后来改变世界的那批人——苹果、微软、3Com、Adobe 的核心成员——很多正是在这批"非卖品"上学会了什么是个人计算。

1979 年,苹果公司的史蒂夫·乔布斯参观了 Xerox PARC,看到了 Alto,随即意识到这就是计算机的未来。两年后,苹果 Lisa(1983)和 Macintosh(1984)将这些概念商业化。微软 Windows 同样受到这条线索的影响。

核心三:教育计算哲学

凯一生中最执着的主题是儿童与计算机。他认为计算机对儿童的真正价值不是娱乐,而是一种新型的认知工具——就像 15 世纪印刷术改变了人类知识传播的方式,个人计算机应该赋予每个人创造和理解复杂系统的能力。

他深受心理学家杰罗姆·布鲁纳(Jerome Bruner)和让·皮亚杰(Jean Piaget)的影响,相信做中学(learning by doing)是最有效的认知方式。Smalltalk 的设计有意让孩子也能上手编程——这是后来 Scratch、Python turtle 等儿童编程工具的精神先驱。

2001 年,凯创立了 Viewpoints Research Institute,继续推进教育计算的理想。

教育对他不是"用电脑上课"的配件问题,而是表征系统问题:儿童若只能消费媒体,计算就退化成更亮的电视;若能用符号系统构造并调试自己的模型,计算机才接近印刷术曾给读写能力的那种杠杆。Smalltalk 与后来的 Squeak、Etoys,都在试着把对象世界做得足够具体,让孩子能看见因果。Viewpoints 时期他甚至推动"用极少代码定义可编程系统"的研究,想证明个人计算的内核可以小到被理解——对抗的是行业把复杂度堆进无人能读的百万行应用这一惯性。

图灵奖与反思

2003 年,凯因"在面向对象编程语言的根本性贡献和个人计算机概念的奠基"获得 ACM 图灵奖。

他的图灵奖演讲("The Computer Revolution Hasn't Happened Yet",2004)充满批评:他认为软件行业根本没有实现计算机的真正潜力,我们构建的大多数软件系统是脆弱、复杂和不可理解的。他认为软件工程的正确模型应该是生物学,而非今天的工程建设——系统应该像生命体一样,从简单到复杂地生长,而不是被从上而下地设计。

这种批评立场使他在晚年成为一个异类:他不满意于几乎所有他所影响的事物,认为它们都偏离了正确的方向。

演讲标题本身就是判词:革命尚未发生。凯的标准不是装机量,而是普通人是否获得了可阅读、可修改的动态介质。按这把尺子,电子表格偶尔接近理想,大多数应用商店里的封闭应用则远未达标。他拿生物学作类比,不是浪漫,而是工程约束清单——细胞式的封装、局部失败可隔离、系统可在运行中更新——对照今天动辄全局耦合的软件,批评便显得刺耳而具体。图灵奖肯定了他的奠基,也把他放在了一个尴尬位置:被致敬的恰恰是他觉得走歪了的那条工业路线的源头。

跨域连接

  • 皮亚杰:凯的教育计算建立在一条心理学假设上——知识不是被讲授的,而是学习者通过操作对象自己建构的。这条假设直接决定了一个技术选择:系统的每一层都必须可以被打开和改写,因为"操作"以可操作为前提。据此也能解释他对平板电脑的不满:形态对了,可修改性没了,通路断在这里。
  • 涌现:消息传递的要点不是对象,而是把正确性从"管住全局状态"改成"每个对象各自守约"。整体行为是交互的产物,没有中心。代价随之而来:这类系统很难自上而下证明,只能靠边界契约加观察来约束——今天微服务遇到的困难,形状与此完全相同。
  • 教育与文凭:Dynabook 的推论常被简化成"把设备发到孩子手里"。但设备只提供可能性,把可能性变成能力的是学校与家庭的实践情境。缺了这一层,同一台机器在不同家庭里会复制而不是缩小既有差距——这正是各类"一童一机"计划评估时最难看的那组数据。
  • 媒介与公共领域:他反复用印刷术作类比,而类比的实质不是"传播更快"。印刷真正带来的是一个可被引用、批评与累积的公共文本层;凯据此判断个人计算是否走完了同一步。用这条判据看,消费型设备产出的内容大多不可被他人接手改写,因此没有形成那一层。
  • 人机交互:图形界面的内容不是图标,而是把不可见的机器状态外化成可直接操作的对象,于是"记住命令"被换成"认出并操作"。收益是入门成本骤降,代价同样确定:只有被画出来的东西才可操作,批处理与组合能力反而更难触及。

未竟的理想

凯活得足够久,亲眼看到了他的设想被实现,但也亲眼看到了它们以他认为错误的方式被实现。iPad 符合 Dynabook 的物理形态,但凯不认为它实现了 Dynabook 的精神——它是消费设备,不是认知扩展工具;它的用户是内容的消费者,而不是工具的创造者。

这种对"自己的发明被娱乐化"的不满,使凯成为一个现代技术批评的独特声音:他不反对技术,他反对技术的错误使用方式。他的问题仍然是未被充分回答的:我们拥有了比以往任何时代都强大的计算工具,但它们是否真正增强了人类的认知能力?

对 OOP 史而言,这笔未竟也是一面镜子。主流语言拿走了类与对象的词,留下了凯最在意的消息与可塑性;Dynabook 的外形被平板兑现,创造者权限却被锁进签名与商店。要理解艾伦·凯,不能只数他影响了哪些产品,而要看他持续拒绝把哪些折中叫做成功。那份拒绝偶尔显得不合时宜,却把评价个人计算的问题维持在该有的难度上:工具是否让更多人能建造与理解系统,而不只是更流畅地消费内容。

参考文献

  • Kay, A. A Personal Computer for Children of All Ages. Xerox PARC Technical Report (1972). (Dynabook 最初构想)
  • Kay, A. & Goldberg, A. Personal Dynamic Media. Computer 10(3) (1977): 31–41. (Alto/Smalltalk 的系统性介绍)
  • Kay, A. The Early History of Smalltalk. ACM SIGPLAN History of Programming Languages Conf. (1993). (凯本人对 Smalltalk 历史的回顾)
  • Goldberg, A. Smalltalk-80: The Interactive Programming Environment. Addison-Wesley (1984).