预测未来的最好方法是创造未来,艾伦·凯与Smalltalk语言

您知道左面挂着图灵奖奖章的人是谁吗?他是世界上第二个面向对象语言——Smalltalk的发明人艾伦.凯(Alan.Kay),1972年,艾伦等人在Flex系统的基础上开发成功Smalltalk语言,为此,Alan.Kay被誉为Smalltalk语言之父。2003年,Alan.Key因为在面向对象程序设计上的杰出贡献,获得了有计算机界的诺贝尔奖之称的图灵奖(ACM Turing Award)。 

艾伦.凯不是一位公众人物,但在计算机界,尤其是在技术圈子内,他是能让大家都心服口服屈指可数的大师之一。成为硅谷的又一位亿万富翁或让他当麻省理工学院院长的难得机遇,都无法激起他的兴奋,但他却有足够的耐性与一群8岁左右的孩子一起玩电脑。他平生最大的乐趣就是搞小发明。

在计算机界,阿伦·凯可算得上是一个不可多得的全才,他不仅是Smalltalk面向对象编程环境语言的发明人之一,也是面向对象编程思想的创始人之一,同时,他还是笔记本电脑最早的构想者和现代Windows的图形用户接口GUI的建筑师。

近年来有一句话挺流行:“预测未来的最好办法,就是把它创造出来。”不少人误以为此言出自尼葛洛庞帝(Negroponte)之口,实际上,这句话是阿伦·凯的名言。有很多人说布兰德是第一个使用个人计算机PC一词的人,但布兰德说自己也是顺手牵羊,最早提出“PC”概念的就是阿伦·凯。在20世纪70年代的一份备忘录上,艾伦·凯还正确地预言到,“20世纪90年代将有成百万的个人计算机,而且都将连接到全球公用的信息设施上”这不正是今天的互联网吗? 

艾伦.凯,1940年5月17日生于美国麻萨诸塞州的Springfield,但是出生后不久艾伦全家即搬迁到澳大利亚。在风光宜人的澳大利亚黄金海岸,他度过了自己的儿童时光。可是好景不长,二战爆发,艾伦全家又重返美国。  

“神童”艾伦·凯

艾伦聪明过人,是个超智商的“神童”。他三岁就能阅读,五岁便会自学,等到上小学的时候,他已经读了几百本书了。学校给艾伦安排的课程他早就自学过了。随着年纪的增长,艾伦的求知欲变得更加旺盛,他还发现学校的教育不能满足他。 “学校里充斥着一种观点:老师的观点或者是教科书的观点,除此之外,再无其他,这是很荒唐的。”艾伦回忆道。 

艾伦在IT行业出名以后,有人专门去研究他的家史,看看神童的基因是不是家族遗传的。说起艾伦的父母也倒是一般,父亲是个建筑工程师,母亲是个音乐家兼艺术家。他们对艾伦惟一的早期教育是父亲教授数学,母亲执教音乐,所以艾伦的音乐功底深厚,他是学校合唱团的男中音独唱,还会演奏吉他。艾伦一度还有想当一名专业音乐家的想法。  

1961年,因为出面维护犹太移民,艾伦被迫从他就读的西佛吉尼亚 Bathany音乐学院离开。他辗转来到丹佛,以教授吉他课程为生,生活极为潦倒。但是,在他参加志愿服役之后,参加了一项计算机编程潜在能力测试,由此改变了他的命运,在编程中,他发现自己除了音乐之外,在计算机领域也富有天才。随后,艾伦被送到了美国空军,在IBM 1401大型计算机上编程。  

两个发现改变艾伦  

离开空军以后,艾伦被科罗拉多大学录取,主修数学和分子生物学,并于1966年从该校毕业,获双学士学位。20世纪60年代,电子学、微电子学开始在美国兴起,艾伦对其产生浓厚兴趣,他放弃了进一步在数学上深造的机会,来到美国中部的犹他州研读电子电气工程师的课程。促使艾伦来到犹他州的主要原因是当时创新性的编程语言SketchPad语言的创始人爱尔文·苏姗兰德在犹他州执教。在名师指点和自己刻苦钻研下,艾伦充分借鉴了其它编程语言的长处,还从自己过去的分子生物学中汲取了有益养分,创立了“生物类比”理论。“我假定未来理想的计算机能够具备生物组织一样的功能,每个“细胞”能够独立运作,也能与其它功能一起完成复杂的目标。“细胞”能够相互重组,以解决问题或者完成功能。”艾伦在其论文中写道。  

1968年夏天,艾伦第一次遇到麻省理工人工智能实验室的负责人西摩·潘博得,开始对Logo语言发生浓厚兴趣。“当我在实验室里看到,西摩和他的同事正在教一群小孩子学习使用Logo语言时,我脑海中整个对社会的认识观念都发生了动摇。计算机编程真的可以改变我们的生活,创造新的未来。”。在西摩的实验室里,艾伦还看到了最原始的手写识别系统。这个系统让他欣喜若狂,并对他产生很大影响,“就是那种感觉,就是那种感觉,我找到它了!”艾伦对友人这样说。“把手写识别应用到计算机上,我能创造出一种超媒体——就像现在的报纸,但它是电子化的。”在这种思路的基础上,艾伦设想出作为现代笔记本电脑原型的“Dynabook”。 除了手写识别之外,1968年,还有一件事情让艾伦感到深深震撼。学者道格·安哥博特提出一种假想,计算机主机就像铁路系统,由某个机构主管,它决定你“能够做什么”、“什么时候做”。艾伦认为道格的思想很像当时福特汽车的总裁亨利·福特,“每个人都想拥有自己的PC,就像每个人都想拥有自己的汽车。”从这点出发,为艾伦日后研究个人计算技术打下了基础。 

Smalltalk名震天下

1969 年,艾伦在犹太州立大学被授予计算机科学博士学位。论文主题是面向图形对象的编程。离开高校后,艾伦的第一份工作是服务于斯坦福大学人工智能实验室,担任教授一职。 教学工作之余,艾伦开始思考,如何使得庞大的计算机变得更小,比如说变得像一本书那么大。这种PC机对儿童来说会非常方便,他们可以用它来代替纸。艾伦把这种新型PC称为“KiddieKomp”,这种PC需要一种新的语言,于是艾伦便设计出了后来名震业界的Smalltalk语言。 Smalltalk语言再现了艾伦过去提出的“分子PC”的思想,他认为,程序好比一个个生物分子,它们可通过信息相互联接。Smalltalk 的这种思想被业界公认为“面向对象编程系列语言”的代表作品。  

1970年,艾伦任职于施乐帕洛阿尔托研究中心。他开始实验把Smalltalk语言用于儿童教育。研究中心招来很多孩子,让他们学习使用电脑,在学习过程中,儿童的种种表现都被记录下来,作为分析研究的素材。 通过大量的实验,艾伦得出结论:“较之于通过文字,儿童通过图像和声音能更好地学习使用PC。”他主持领导帕洛阿尔托中心全力抢攻图形化设计这一IT技术的战略制高点。帕洛阿尔托研究中心研发了简易的PC系统,重点研究图形和动画效果。除了领导研究中心的研究工作外,艾伦还在笔记本电脑、以太网研究、激光打印和“客户端服务器”网络模式方面颇有建树,但是令人遗憾的是,艾伦想象中的那种“Dynabook”始终没有出现。伦非常想将这个梦想变成现实,于是他向施乐研究中心的管理层寻求资金支持,但是管理层对艾伦的奇思怪想并不支持,他们不愿意调动资源给一个虚无缥缈的设想。然而,当1979年,斯蒂夫·乔布斯、杰夫·洛金森和其它几个苹果公司的创始人来到帕洛阿尔托中心,他们的想法竟然与艾伦不谋而合。当时苹果公司正在设计一种新颖的图形用户界面,他们发现了Smalltalk语言,“它灵活、易用,简直就像是为苹果机量身定做的。”乔布斯兴奋地对同事说。

纵观图形界面的发展史,无论是微软的Windows操作系统也好,图形化的Linux也好,苹果机的Macintosh也好,追溯其源都是艾伦当时超前思想的后继者。  

预测未来不如创造未来

因为在施乐公司得不到支持,1983年艾伦离开了帕洛阿尔托研究中心,去了一家名叫Atari的计算机公司当程序员。后来Atari公司裁员,1984年,艾伦 来到了苹果公司。这一年是PC历史上划时代的一年——苹果公司的Macintosh机,第一款图形界面操作的微机问世。为了普及推广PC机,艾伦跑遍了全美国,给小学生教授苹果机,PC行业发展二十年多来,人们非常好奇,还有哪些技术可以为PC带来突破?如今,艾伦还在研究什么?1991年,艾伦接受媒体采访时透露,他正在研究一种新语言,该语言能够帮助PC机模拟人工智能,自行决定“做些什么”。

艾伦的一句名言至今仍让IT业界的后辈们记忆犹新:预测未来的最好方法是创造未来(The best way to predict future is to invent it.)。与其坐等未来,不如主动探索,以人类的创新和进取精神去创造属于自己的未来。这位计算机大师以自己40年的职业生涯生动地诠释了这一点。  

Smalltalk语言 

Smalltalk 语言最初由艾伦为首的软件概念小组开发成功,后经不断的试验和改进,陆续推出若干版本,其中最有影响的是1981年推出的Smalltalk-80,但该版本直到1984年才作为正式产品公开。

与其他面向对象的语言类似,Smalltalk也有5个核心概念,即对象、类、实例、消息和方法。对象是面向对象系统的唯一元素,它的外部特征包括内部使用的若干私有变量和一组方法。类描述了性质相似的一组对象,而类的每个对象称为该类的一个实例。消息是发送者(对象)传递给接受者(对象)的请求,要求接收者执行所指出的操作。方法描述了操作的实现细节。 

继承性是Smalltalk的特色,它指的是,子类继承父类的一切属性和操作,整个系统的数据是通过子类机构组织成树型结构的。这种机构为信息共享提供了有效的支持。

Smalltalk 的基本语法结构是表达式。表达式是一个字符序列,它描述的对象称为表达式的值。Smalltalk共有4种表达式:

  1. 文字表达式:它描述的对象是一个确定的常量,即总是代表同一个对象;
  2. 变量名表达式:它描述的对象是可供使用的变量,变量之值指该变量当前所指的对象;
  3. 消息表达式:它描述传送给接收者的消息,其值由该消息所引用的方法来确定;
  4. 块表达式:它描述的对象表示一系统被延迟的活动,常用来实现各种控制结构。 

在Smalltalk中,建立程序就是根据类创建对象,执行程序就是不断向对象发送消息的过程。Smalltalk的主要特点是:

  1. 信息表示与处理的高度一致 性
  2. 弱类型语言
  3. 比较完善的抽象机制
  4. 语言融合于环境之中

Smalltalk在继承和并发方面的功能较弱。然而,它既推动了混合型面向对象语言(如C++)的开发,又促进了纯面向对象语言(如Eiffel)的深入研究。自1986年以来,还推出了很多Smalltalk 的增强版本。例如,运行在微机DOS下的Smalltalk/V,增加并行性的Concurrent Smalltalk。