1968 年,艾伦·凯(Alan Kay)还是犹他大学的一名博士生,某天他走进一个陈列室,看到一台叫 FLEX 的实验性计算机原型。那台机器可以在屏幕上直接绘制图形。他突然意识到:这台机器不应该只给专业人员使用,它应该像书本一样,属于每一个人。
这个想法后来演变成"Dynabook"的概念——一台薄而便携的个人计算设备,供儿童学习使用,永远联网,可以存储知识、运行程序。他在 1972 年的一篇论文中描述了这个设想。那一年,iPad 还在三十多年后才会诞生。
破除误解:凯不是"图形界面的发明者"
施乐公司(Xerox)的 Alto 计算机、苹果公司的 Lisa 和 Macintosh——这条线索让人们把图形用户界面(GUI)的发明归功于若干个人和公司。这里面有复杂的历史。
道格拉斯·恩格尔巴特(Douglas Engelbart)在 1968 年就演示了窗口、鼠标和超文本(即"所有演示之母",Mother of All Demos)。但把这些想法系统化成可以被任何人使用的编程环境,是艾伦·凯在 Xerox PARC 的工作。凯不只是设计了界面,他设计了驱动界面的编程语言和哲学——Smalltalk,以及"对象"这个概念。
现场:Xerox PARC 的黄金时代
凯 1940 年 5 月 17 日生于马萨诸塞州斯普林菲尔德,父亲是生理学家,母亲是音乐家。他在阿德尔菲大学读音乐和数学,随后转到犹他大学攻读计算机学博士(1969 年毕业)。
1970 年,他加入刚成立的施乐 PARC(Palo Alto Research Center),那是计算机史上最富有传奇色彩的研究机构。在那里,他领导了 Smalltalk 语言和 Alto 个人计算机软件系统的开发。PARC 的研究成果包括:激光打印机、以太网、图形界面、面向对象编程,以及所见即所得(WYSIWYG)文档编辑——这些创新后来被苹果公司(部分地)在 Macintosh 上商业化,最终改变了整个行业。
核心一:面向对象编程与 Smalltalk
凯在犹他大学时受到西摩尔·帕珀特(Seymour Papert)的 LOGO 语言、Sketchpad(Ivan Sutherland 的互动图形系统)以及 Simula 语言的影响,发展出了"面向对象"(Object-Oriented)的核心思想。
面向对象的核心隐喻:程序不是一系列命令的列表,而是一组相互发送消息的对象(objects)的社会。每个对象封装了自己的数据和行为,只通过消息(方法调用)与外界交互,外界不需要知道它内部是怎么工作的。
凯曾说,"面向对象"这个词语是他自己发明的,但他最看重的不是"对象",而是消息传递(message passing)——这个思想比后来 Java、C++ 的"对象"实现要更激进和彻底。在真正的 Smalltalk 风格里,连数字 5 和类定义本身都是对象,可以接收消息。
凯对"对象"的原始想象来自生物学。他后来解释过自己的构思:对象就像生物细胞,或者说像网络上一台台独立的小计算机——每个细胞有自己的膜(封装的状态),只通过化学信号(消息)与外界交换信息;细胞的内部机制对外界不透明,也没有必要透明。这个隐喻带来三条设计推论:
- 封装是绝对的。外界不能读取对象的内部状态,只能发消息。隔离让系统可以局部修改而不波及整体——就像生物体可以更换单个细胞。
- 消息的语义由接收者决定。同一个消息发给不同对象,行为可以完全不同(多态)。发送者只表达意图,不规定实现。
- 晚绑定(late binding)是安全网。消息与方法的对应关系在运行时才解析,而不是编译时钉死。代价是性能与静态检查的缺失,收益是系统可以在运行中被修改、被替换、被生长——凯认为这对"活的系统"是不可让渡的。
后来主流的面向对象语言在凯看来大多背叛了这个隐喻:C++ 把方法调用退化为编译期确定的函数调用,继承被当成代码复用工具。1997 年他在 OOPSLA 会议上那句著名的话——"我确实发明了'面向对象'这个词,但我可以告诉你们,我心里想的不是 C++"——就是在纠正这个误读。
Smalltalk 语言于 1972 年开始开发,历经数个版本。它引入了今天已经成为标准的若干概念:
- 类(Class)与实例(Instance):类是对象的模板,实例是类的具体实现
- 继承(Inheritance):子类可以继承并扩展父类的行为
- 动态类型(Dynamic Typing):类型在运行时确定,而非编译时
- 垃圾回收(Garbage Collection):内存由语言自动管理,程序员不需要手动释放
- 即时编译(JIT)的早期实现:Smalltalk 的部分实现采用了早期形式的运行时优化
这些概念在今天听起来稀松平常,但在 1970 年代初,它们是激进的革命。
Smalltalk 的诞生本身是一个关于"语言能有多小"的实验。凯曾与同事丹·英戈尔斯(Dan Ingalls)和泰德·凯勒(Ted Kaehler)打赌:他能在"一页代码"内定义出"世界上最强大的语言"——对标的是麦卡锡自描述 Lisp 解释器的规模。凯在随后两周里每天从凌晨四点工作到八点,写出了 Smalltalk-71 的定义;几天后,英戈尔斯用 BASIC 把它实现了出来——慢得几乎不可用,但确实能跑。语言随后快速迭代:Smalltalk-72 引入了完整的消息传递模型;Smalltalk-76 从 Simula 借来类的概念,并配上带图形界面的开发环境;Smalltalk-80 引入元类(类本身也是对象),成为第一个对 PARC 之外公开发布的版本。
核心二:图形界面与 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,继续推进教育计算的理想。
图灵奖与反思
2003 年,凯因"在面向对象编程语言的根本性贡献和个人计算机概念的奠基"获得 ACM 图灵奖。
他的图灵奖演讲("The Computer Revolution Hasn't Happened Yet",2004)充满批评:他认为软件行业根本没有实现计算机的真正潜力,我们构建的大多数软件系统是脆弱、复杂和不可理解的。他认为软件工程的正确模型应该是生物学,而非今天的工程建设——系统应该像生命体一样,从简单到复杂地生长,而不是被从上而下地设计。
这种批评立场使他在晚年成为一个异类:他不满意于几乎所有他所影响的事物,认为它们都偏离了正确的方向。
跨域连接
- 皮亚杰:凯的教育计算建立在一条心理学假设上——知识不是被讲授的,而是学习者通过操作对象自己建构的。这条假设直接决定了一个技术选择:系统的每一层都必须可以被打开和改写,因为"操作"以可操作为前提。据此也能解释他对平板电脑的不满:形态对了,可修改性没了,通路断在这里。
- 涌现:消息传递的要点不是对象,而是把正确性从"管住全局状态"改成"每个对象各自守约"。整体行为是交互的产物,没有中心。代价随之而来:这类系统很难自上而下证明,只能靠边界契约加观察来约束——今天微服务遇到的困难,形状与此完全相同。
- 教育与文凭:Dynabook 的推论常被简化成"把设备发到孩子手里"。但设备只提供可能性,把可能性变成能力的是学校与家庭的实践情境。缺了这一层,同一台机器在不同家庭里会复制而不是缩小既有差距——这正是各类"一童一机"计划评估时最难看的那组数据。
- 媒介与公共领域:他反复用印刷术作类比,而类比的实质不是"传播更快"。印刷真正带来的是一个可被引用、批评与累积的公共文本层;凯据此判断个人计算是否走完了同一步。用这条判据看,消费型设备产出的内容大多不可被他人接手改写,因此没有形成那一层。
- 人机交互:图形界面的内容不是图标,而是把不可见的机器状态外化成可直接操作的对象,于是"记住命令"被换成"认出并操作"。收益是入门成本骤降,代价同样确定:只有被画出来的东西才可操作,批处理与组合能力反而更难触及。
未竟的理想
凯活得足够久,亲眼看到了他的设想被实现,但也亲眼看到了它们以他认为错误的方式被实现。iPad 符合 Dynabook 的物理形态,但凯不认为它实现了 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).