《纽约时报》的讣告专栏,今天报道了计算机科学先驱之一、FORTRAN之父、1977年图灵奖得主、BNF(巴克斯-诺尔范式)的发明者之一、美国科学院院士和工程院院士、John W. Backus(1924.12.3-2007.3.20)逝世的消息。
他的图灵奖颁奖词是:
For profound, influential, and lasting contributions to the design of practical high-level programming systems, notably through his work on FORTRAN, and for seminal publication of formal procedures for the specification of programming languages.
因为他对实际的高级编程系统的设计、尤其是通过FORTRAN上的工作所做出的影响深远的贡献,和关于编程语言精确描述的形式化过程的开创性论文。
他的颁奖典礼上发表的演说是:“Can Programming Be Liberated From the von Neumann Style? ”(程序设计能脱离冯诺伊曼风格吗? )
【相关链接】Frances Allen荣获2006年图灵奖;UML之父Grady Booch荣获DDJ程序设计杰出大奖
混沌岁月
Backus 1924年生于美国费城,家庭富裕。他的父亲曾供职于一家火药公司,因为善于分析问题,找到了公司常常发生爆炸事故的原因(原来是德国进口的温度计惹的祸),从普通员工升为公司首席化学家。一战期间军火业火爆,他的父亲因此致富。战后他成为证券经纪人,也非常成功。因为家庭条件优越,小Backus无忧无虑,在人生的最初岁月,大有玩世不恭的意思,成了一个纨绔子弟。在宾夕法尼亚州著名的Hill中学,他经常考试不及格,而且常常旷课。据他自己回忆:“那时我讨厌学习,功课老不及格,只是晃来晃去地消耗时间。一心想着暑假去新罕布什尔州的夏令营,划船,玩耍。”“学校里有趣的地方就是有那么多规矩你可以去违反。”(The delight of that place was all the rules you could break)
直到18岁时(1942年)才进入弗吉尼亚大学。化学家出身的父亲让他子承父业,他喜欢化学理论,但对摆弄瓶瓶罐罐做试验可不感冒,因此到第二学期的时候,每周就只上一堂课(据说还是音乐欣赏课)了,最终被学校开除,结束了短暂的第一次大学生涯。
很快Backus就参军入伍,在佐治亚州Stewart军事基地担任防空任务。但在能力测试中,他表现出色,被美国军方送到匹兹堡大学学习工程预科,在另一次能力测试中,他显示出医学才能,于是又被送到了哈弗福德学院(Haverford College)医学预科学医。期间他被诊断出脑瘤(一说骨瘤),手术植入了一块金属板。1945年他进入纽约一家医学院,但是他发现学校里“不鼓励思考,只是死记硬背”,9个月后就退学了。
【相关链接】帮助寻找图灵奖得主Jim Gray
转折点
在又一次脑部手术之后,1946年Backus退伍了。他自己住在纽约,不知前途何在。他后来回忆说:“我真不知道自己这一辈子到底该干什么。我想弄一套好的高保真音响,可那时候这种东西还不存在。于是,我进入了一家无线电技师学校。在那里我遇到了一位好老师——这可是我人生的第一次,他让我和他一起为一个杂志计算某些电路的特性。计算很繁琐,但是它让我对数学发生了兴趣。我发现,原来数学是有实际用途的。”
他从头再来,进入 哥伦比亚大学学习数学。在1950年毕业前,他偶然地参观了IBM公司麦迪逊大街计算机中心,被宏伟的SSEC大型电子管计算机迷住了。其间他告诉讲解员自己在找工作,这位女讲解员建议他去找主管谈谈。Backus觉得自己蓬头垢面邋邋遢遢的,不想去,但架不住讲解员一个劲儿的鼓励。没想到,只是被不那么正式地口头提问了一些数学题,他就当场通过,这样进入了IBM。
SSEC的控制台
1950年,他成为IBM的程序员。他的工作除了编程(使用打孔带)之外,就是维护那台1948年建成、由一万多个真空管和两万多个继电器组成、还为1969年阿波罗登月计划立下汗马功劳的 SSEC。三年中,除了一个复杂的计算月亮位置的程序外,他还开发了一个名为Speedcoding的程序,第一次实现了用诺伊曼提出的比例因子存储和计算浮点数。
【相关链接】Ada之父逝世
FORTRAN的诞生
二进制层次编程的艰辛和困难,使Backus意识到高级语言的必要性。1953年,他向IBM高层提交了一份备忘录,提出为新型的704计算机开发一种高级编程语言,降低开发成本。他论证说,当时程序员的薪水已经赶上硬件成本。负责应用科学部的Cuthbert Hurd很快就批准了这一计划。Backus后来称赞:“他真的很懂行。”这其中还有一个 小插曲,当时冯诺伊曼正在担任IBM公司顾问,每周一次“升堂”审查公司的各种新科研计划。他当时看到了FORTRAN的想法,丝毫没有兴奋之感,反而这样问Backus:“为什么除了机器语言之外,你还想弄点别的呢?” 当时也在场的Frank Beckman回忆到,冯诺伊曼将这一计划斥为“图灵short code概念的一种应用”。有趣的是,冯诺伊曼此后还一直坚持这种观点,他在普林斯顿的学生Donald Gillies回忆说,为了不像大家那样手工将程序汇编为二进制代码,他曾经开发了一个汇编程序,冯诺伊曼发现后非常生气,说:“这是在浪费宝贵的科学计算设备来干琐碎的杂事!”
最初的FORTRAN语言的用户手册
1954年,Backus很快招募到了Irving Ziller和Harlan Herrick,开始了项目的开发。项目小组最后有10个人,都是二三十岁的年轻人,背景出处各不相同,Backus注重的只有一点:解决问题的能力。Backus的管理非常灵活,没有太正式的工作时间,虽然可能会很长,冬天工作后大家都出去打雪仗,对于公司一套严格的考评制度,Backus认为不适合程序员,将其束之高阁。
设计一种语言并不难,描述FORTRAN语言草案的论文 Preliminary Report, Specifications for the IBM Mathematical FORmula TRANslating System, FORTRAN 于当年年中发表。难的是编译器的设计,Backus本来希望在六个月内完成,最后却花了两年多。1956年,语言手册完成,1957年4月,有25000行代码存储在磁带上的第一个FORTRAN编译器发布。一个新的时代开始了。
其他贡献
受FORTRAN影响,ACM和德国应用数学与力学学会(GaMM)共同提议开发一种标准化的高级语言。1958年5月于苏黎世举行的国际性会议群贤毕集,有Backus、 Bauer、 Perlis等等大师。这个国际协作的结果,就是 ALGOL语言。开发FORTRAN之后,Backus开始思考计算机程序设计的其他基础方面,1959年他提出了 BNF。后经2005年图灵奖得主 Peter Naur改进,又经1984年图灵奖得主 N. Wirth扩充为EBNF(Extended BNF)。
此后,Backus在反思FORTRAN设计得失的基础上,全力从事 函数级程序设计语言的研究和开发,成果包括 FP语言和 FL语言。
此外,他还提出了非冯诺伊曼结构的规约机。
思考
Backus的一生值得我们思考的地方很多,这里先举出一些:- 他不断进取的精神。在功成名就之后,他仍然耗尽心力,开发未必能够成功的函数级语言。
- 对后来者的引导极为重要,无论你身处什么位置,请用自己的心去引导那些年青人。看看Backus一生中的两个关键人物:无线电技校老师和IBM的讲解员。
- 教育制度,如何能够给人以更多的机会?Backus显然是个天才,但是为什么那么长时间没有找到方向?为什么他又能在20多岁进入正轨?
- 权威审查不可全信。各人都有自己的局限。冯诺伊曼这样的大师也不能免。他之所以会对高级语言如此敌视,与他主要从事理论,缺乏程序设计实践的背景密不可分。
“创新,” Backus先生说,“就是不断地尝试和出错的过程。”
“你需要勇于失败,” 他说,“你不得不想出许多想法,然后努力工作,只是为了证明这些想法不可行。如此不断反复,最后你就会发现那个可行的想法了。”
【参考文献】
Backus小传 [1], [2] 。两处有些细节有冲突。
诺伊曼传记
照片
中文传记,应该是吴鹤林老师的作品
FORTRAN介绍
FORTRAN历史