我打算开一个系列,来介绍所有的图灵奖获得者。1966年,首届图灵奖颁给了艾伦·佩利,这绝对是实至名归!他不仅在ALGOL语言的定义和发展上做出了巨大贡献,还奠定了计算机科学教育的基础,让它成为了一门独立的学科。
1922年出生在美国宾州的匹兹堡,原本在卡内基理工学院学的是化学,1942年毕业后正好赶上二战,就去参军当了空军。战争结束后,他重返校园,这次他选择了数学,先是在加州理工学院拿到了硕士学位,然后又去了麻省理工学院深造,1950年获得了博士学位。毕业后,他去了马里兰州一个军方的弹道研究实验室工作了一年,这个实验室可是大名鼎鼎的冯·诺依曼曾经待过的地方。之后,他回到了母校MIT,加入了当时非常重要的“旋风”计算机项目,成为了一名程序员。要理解佩利参与“旋风”项目的重要性,我们得先简单回顾一下早期计算机的发展历史。
大家都知道,世界上第一台计算机就是”ENIAC”,全称Electronic Numerical Integrator and Computer,也就是”电子数字积分器和计算机”的缩写。这玩意儿是宾夕法尼亚大学莫尔学院根据1943年与联邦政府签订的10万美元的合同,在阿伯丁弹道研究实验室为各种火炮计算弹道、编制射击表的需要下研制而成的。
整个项目是由约翰·莫奇利(John William Mauchly,1907-1980)负责逻辑设计,伊克特(John Presper Eckert, Jr,1919-1995)负责电路设计的。ENIAC可不是一般的计算机,它是一台十进制并行计算机,可以同时处理10个十进制数,而且是用电子管电路做的。时钟频率高达100,000Hz,加法只需要0.2毫秒,乘法也就2.8毫秒而已。
这个庞然大物得用1,500平方英尺(约139平方米)的地方,重达30吨,功耗高达150千瓦。它在1946年2月完成,虽然没参加二战,但它在洛斯阿拉莫斯国家实验室帮忙计算原子弹爆炸的问题,后来又在阿伯丁的空军试验场用了一圈,直到1955年10月才停止运行。
可这个故事还有点戏剧性呢,虽然大家都认可莫奇利和伊克特是ENIAC的发明者,但在两家计算机公司的官司里,法院说他们抄袭了约翰·阿塔那索夫(John Vincent Atanasoff,1903-1995)的设计。在我的电台里,我讲过阿塔那索夫的故事,一个漫长的官司,把美国闹得沸沸扬扬。然而,有趣的是,尽管阿塔那索夫确实在1941年和莫奇利提过他的计算机构思,甚至给了他点启发,莫奇利还写了份报告并设计出了ENIAC,但奇怪的是,大家似乎都不太买账。现在说起ENIAC,几乎都会想到莫奇利和伊克特,很少有人会想到阿塔那索夫。
虽然ENIAC被誉为世界上第一台电子计算机,但它并没有存储程序的功能,每次运行程序都需要通过外接电路来输入。这意味着要更改程序,就必须重新设计相应的电路板,对于每一种任务都要单独设计外接插板,这种设计显然不符合当时冯·诺伊曼提出的存储程序的理念。
那么,世界上第一台真正具备存储程序功能的计算机是哪一台呢?一些资料认为是曼彻斯特大学的MARK I,但现在一般的观点是英国剑桥大学威尔克斯(M.V. Wilkes,1967年图灵奖得主)在1949年5月完成的EDSAC。然而,实际上最早开始设计和实施存储程序式计算机的是莫尔学院的EDVAC(Electronic Discrete Variable Automatic Computer,即”电子分离变量自动计算机”)。
该计划始于1945年3月,当时ENIAC还在安装调试阶段。这个设计方案是由冯·诺伊曼与莫奇利、伊克特等人在经过两天的会议和讨论后制定的,采用了电子管和半导体二极管,用水银延迟线作为存储器,时钟频率达到1 MHz,字长为32位。然而,由于ENIAC的原因,EDVAC的研制工作直到1947年才正式开始,加上莫奇利和伊克特后来因故离开了莫尔学院,这导致了工程进展缓慢。直到1952年EDVAC才最终完成,这使得威尔克斯的EDSAC在技术上”后来居上”。
但无论是EDSAC,它们都属于串行计算机(serial computer)。也就是说,数据的传输和运算都是逐位进行的,这样的计算机虽然运算部件较少,操作简单,但速度较慢,无法满足某些应用的需求。那么,世界上第一台存储程序式的并行计算机又是哪一台呢?这就是前文提到的”旋风”计算机。
“旋风”的主要设计者和研制者是麻省理工学院的弗里斯特(Jay Wright Forrest)。弗里斯特受军方委托,本来是为了处理飞机稳定性的数据,而设计了”旋风”。这个机器受到了EDVAC的影响,采用了存储程序的方式。但由于飞机稳定性需要处理的指令数量超过了2000条,必须将计算方式从串行改为并行,同时要注意不让机器体积过大,因此设计成了16位字长的并行计算机。当时冯诺伊曼本来对这个机器很有兴趣的,但是听到只支持16位运算,瞬间就不感兴趣了。”旋风”的另一个创新是采用了英国曼彻斯特大学的威廉斯(Frederic Calland Williams,1911-1977)不久前发明的阴极射线管作为内存储器。”旋风”的研制工作始于1946年,直到1950年才成功进行了试运行。
在20世纪50年代,随着冷战的加剧,美国军方对”旋风”寄予了极大的希望。每年,美国空军投入了100万美元的资金用于研发,与此相比,ENIAC的总经费仅为10万美元。麻省理工学院也特地成立了著名的”林肯实验室”,以弗里斯特原先的实验室为核心,专门研究”旋风”的军事应用。
在1951年,”旋风”与当时著名的SAGE(Semi-Automatic Ground Environment,即半自动地面防空系统,覆盖了全美17个防区)首次实现了连接。它将位于卡德角的防空警戒雷达所获取的信息传送到麻省理工学院,由”旋风”计算机进行处理、分析和存储。这标志着历史上计算机与通信相结合的先驱。同时,值得一提的是,弗里斯特和美籍华人科学家兼企业家王安(Wang An,1920-1990)几乎同时独立地发明了磁心存储器。他们将这项技术应用到了”旋风”中,取代了原先的阴极射线存储器,进一步提高了”旋风”的性能。
在1952年9月,佩利离开了”旋风”项目,并加入了普渡大学。在那里,他创立了全美大学中的第一个计算中心,成为该中心的首任主任。佩利的努力使得该中心首先安装了一台IBM的CPC计算机(Card Programmed Calculator),后来又更新为Datatron 205。同时,他设计了一种称为IT(Internal Translator)的语言,并开发了IT的编译器。
1956年,佩利转至卡内基理工学院,再次推动了该校计算中心的建立,并担任了该中心的主任。他配置了IBM 650计算机,并将他在普渡大学开发的IT语言和编译器移植到了IBM 650上。这项工作在美国许多大学的IBM 650上得到了广泛应用。在IT的基础上,佩利与史密斯(J. Smith)、佐轮(H. Zoren)、伊万斯(A. Evans)等人合作,为IBM 650设计和开发了新的代数语言和汇编语言。这些工作奠定了佩利作为计算机程序设计语言先驱的地位。
因此,当ACM于1957年成立了程序设计语言委员会以便与欧洲同行合作,设计通用的代数语言时,佩利被认为是最佳人选,并被任命为该委员会的主席。1958年,在苏黎世举行的ACM小组和以当时联邦德国的应用数学和力学协会GAMM为主的欧洲小组的联合会议上,两个小组综合了关于算法表示法的建议,形成了Algol 58(最初称为”国际代数语言”,简称IAL)。
在Algol 58的基础上,1960年1月,在巴黎举行的全球软件专家讨论会上确定了程序设计语言Algol 60,并发表了”算法语言Algol 60报告”。1962年,又发表了”算法语言Algol 60的修改报告”。Algol 60是程序设计语言发展史上的一个里程碑,标志着程序设计语言从一种”技艺”转变为一门”科学”,开启了程序设计语言研究领域的新纪元,为后来的软件自动化工作和软件可靠性问题的发展奠定了基础。
随后,像1967年首次引入”类型”概念、形成现代抽象数据类型的开端以及第一个面向对象的语言SIMULA 67,以及1971年出现的著名语言PASCAL,都是在Algol 60的基础上进行扩充和发展的。Algol 60的主要特点包括:
- 局部性:首次引入局部性概念,不仅扩展了语言的表达能力,还能够节省内存空间,提高程序的紧凑性。
- 动态性:语言中包含动态成分,显著提升了语言的表达能力,尽管这也相应增加了实现中的开销。
- 递归性:引入了递归性,拓展了软件研究的领域,推动了软件的发展。
- 严谨性:语言的语法和语义均有严格的描述,特别是语法部分采用了著名的巴克斯范式(BNF),结构清晰,理论严谨。
在Algol 58和Algol 60的形成和修改过程中,佩利起到了核心和关键的作用。他在这方面的重大贡献是他荣获首届图灵奖的主要原因。
在佩利的积极组织下,卡内基理工学院率先在大学生中开设了程序设计课程。在此之前,有关程序设计的知识通常是作为”数值分析”课程的一部分介绍的。程序设计课的开设标志着计算机科学教育的开端。这引起了美国国防部的关注,特别是由其高级研究计划署ARPA提供资金支持,用于计算机科学及其教育的立项研究。结果,在20世纪60年代中期,卡内基理工学院、斯坦福大学、麻省理工学院等少数几个大学率先建立了计算机科学系和计算机科学研究生院,使得计算机科学从电气工程、数学等学科中独立出来成为一门独立的学科。
考虑到佩利在此过程中所起的重要作用,他被誉为”使计算机科学成为独立学科的奠基人”。在卡内基理工学院(现卡内基-梅隆大学),佩利与西蒙(H. A. Simon)和纽厄尔(A. Newell,1975年图灵奖获得者)共同合作,被称为”计算机系的三驾马车”。
1971年,佩利离开了卡内基-梅隆大学,加盟了新成立的耶鲁大学计算机系,曾多次担任该系的系主任,为耶鲁大学计算机系的建设和发展做出了重大贡献。期间,他在1977年至1978年间还曾在加州理工学院执教。因此,佩利可谓”桃李遍布天下”,尤其是美国的第一批计算机科学博士生,绝大部分都是佩利的学生。
佩利同时也是计算机学术组织和学术交流活动的积极倡导者和组织者。他在1962年至1964年期间担任ACM主席,这一职位也是由他提议创立的。此外,在1958年至1962年间,他还担任了ACM的第一任主编。作为一位国际知名学者,他经常在世界各地讲学或发表演讲,足迹遍及前苏联、丹麦、意大利、以色列、墨西哥、秘鲁、英国、荷兰、委内瑞拉等国家。他还两次到中国讲学。此外,他也是”乒乓外交”后,最早于1972年7月访问中国的美国计算机科学家代表团的成员之一。
佩利曾说过:”任何名词都可以变为动词”。他的意思是,通过努力和不懈的实践,任何远大的理想、志向、抱负以及对新事物的追求都是可以实现的。这句话是佩利总结自己一生的至理名言。
佩利的主要著作包括:
- 《对程序设计语言的思考》(A View of Programming Languages,Addison-Wesley,1970)
- 《计算机科学导论》(Introduction to Computer Science,Harper & Row,1972,1975)
- 《软件可重用性》(Software Reusability,ACM Pr.,1989)
最后这部书分为两卷,第一卷为《概念与模型》(Concepts and Models),第二卷为《应用与经验》(Applications and Experience),是与比格斯托夫(T. J. Biggerstaff)合编的。这是佩利生前的最后一部著作,反映了他晚年对软件工程的关心和重视。
1973年,佩利当选为美国艺术和科学院院士,1976年则成为美国工程院院士。除了获得图灵奖外,他还于1984年获得了AFIPS的教育奖,并受到曾渡大学、滑铁卢大学等多所大学的授予名誉博士学位。1990年2月7日,佩利因心脏病在康涅狄格州的纽哈芬去世,享年68岁。
佩利于1966年8月在ACM第21届全国大会上获得了图灵奖。在颁奖典礼上,他发表了题为《算法系统的综合》(The Synthesis of Algorithmic Systems)的演讲。
当时,编程仍然需要通过专门设计的”编码纸”和穿孔卡片进行。然而,佩利的眼光却已经投向了未来。他强调了图灵计算模型的重要性,并讨论了程序设计语言和系统未来的发展方向,包括更丰富的数据类型和数据结构,以及与之相应的更丰富的操作等。
佩利所指出的这些方向中,一些已经在随后的研究与开发中得以实现,如LISP、Smalltalk,而另一些则至今仍待进一步的研究。
早期的很多计算机项目名词我理解都是数学术语,因此吹毛求疵一下
numerical是数值的意思
Discrete是离散的意思