关于作者

 一个毕业于北京大学数学力学系,在中国科学院计算所、计算中心和网络中心工作过,在澳大利亚科工组织DMS、香港浸会学院数学系和中国21世纪议程管理中心等处工作过,多次获国家和中科院科技奖并享受政府特殊津贴的退休老头。现在在【中国科普博览】网“科学新语林”栏目里开设一个《数学与计算机》的个人专栏,愿和爱好数学与计算机的各界网友和青少年朋友,谈谈对数学与计算机的看法、想法。

计算机语言名人(上)

张建中
2014年08月01日

?11. 计算机语言名人简介

(1)计算机语言之父??奈加特图片1

克利斯登 奈加特(Kristen Nygaard,1926年—2002年)1926年出生于奥斯陆,1956年毕业于奥斯陆大学并取得数学硕士学位,此后致力于计算机计算与编程研究。奈加特是奥斯陆大学的教授,因为发展了simula编程语言,为MS-Dos和因特网打下了基础而享誉国际。基于他帮助因特网奠下了基础,为计算机业做出的巨大贡献,所以被誉为 “计算机语言之父”。
1961年~1967年,奈加特在挪威计算机中心工作,参与开发了面向对象的编程语言。因为表现出色,奈加特和同事奥利-约翰 达尔(Ole-Johan Dahl?)获得了2001年图灵奖及其它多个奖项。当时为奈加特颁奖的计算机协会认为:“他们的工作使软件系统的设计和编程发生了基本改变,可循环使用的、可靠的、可升级的软件也因此得以面世。”这说明了他们的工作为Java和,C++等编程语言在个人计算机和家庭娱乐装置的广泛应用扫清了道路。奈加特因其卓越的贡献,其对计算机语言发展趋势的掌握和认识,以及投身于计算机语言事业发展的精神,都将激励我们向着计算机语言无比灿烂的明天前进。

(2)Fortran语言创始人 巴库斯图片2

世界是复杂的,世界上的人和事更是变化莫测,叫人无法捉摸。世界上第一个高级程序设计语言Fortran和最广泛流行的元语言BNF的发明人约翰 巴库斯(John Warner Backus)获得 1977年度的图灵奖,这显然是当之无愧和众望所归,但是谁能想到,20岁之前的巴库斯却是个不爱学习、喜欢游荡的“纨绔子弟”,甚至曾经被大学逐出校门呢?
巴库斯1924年12月3日生于美国的历史名城费城,早年就读于宾夕法尼亚州波茨敦市很有名望的希尔学校。但他不爱学习,每年只盼望早些放暑假,好到新罕布什尔州的夏令营去,在那里可以划船、嬉戏,度过美好的时光。因此巴库斯的学习成绩从来就不及格,拖了两年才勉强毕业,于1942年进了弗吉尼亚大学。由于不爱学习,把大多数时间花在舞会上,每周只去上一堂课,终于被学校处分,扫地出门。
1943年,巴库斯参军入伍,在乔治亚洲服役。在部队组织的一次能力测试中,巴库斯不经意地显露出了他的才能,从而受到上级赏识,陆军决定送他上学深造。这样,当他的战友们都被送往二次大战的战场上去的时候,巴库斯却上了哈弗福特学院(Haverford College)的医学院预科。但巴库斯对医学不感兴趣,只学了九个月的医学就离开了那儿,转到哥伦比亚大学学习数学。经过这番磨炼,巴库斯已经从混沌走向清醒,开始认真学习。1949年他取得学士学位。毕业时,他对自己的未来仍然没有什么打算,幸好一个偶然的机会,他去IBM公司的计算中心参观,在那里见到了IBM早期的SSEC计算机(Selective Sequence Electronic Calculator),并开始了他在SSEC上的三年工作。
人们称巴库斯为“不知疲倦的发明家”,事实确实如此。进入IBM以后,巴库斯就全身心地投入工作。他接手的第一个较大的项目是计算“月历”,这是一个非常复杂而困难的问题,因为月历要能给出一年中任一时刻月亮所处的精确位置,但巴库斯出色地完成了任务。接着,巴库斯和他的同事H.Herrick一起又成功地开发出了一个叫Speed coding的程序,这个程序用来解决浮点数运算。由于浮点运算比较复杂,浮点运算部件的设计与实现也比较困难,早期计算机大多没有浮点运算部件,但许多科学与工程问题中又要处理非常小的数或非常大的数,这怎么办呢?计算机的先驱冯 诺伊曼提出对定点数附以“比例因子”使之成为浮点数,从原则上解决了这个问题,但却给程序员出了难题:在不能确切知道计算的中间结果和最后结果的范围的情况下,如何设定比例因子?比例因子取小了,运算发生溢出;取大了,影响结果精度。这成了当时程序设计中的一大难题。 Speed coding成功地解决了这个难题,使程序员免除了设定比例因子的麻烦。
月历程序和Speed coding奠定了巴库斯作为出色的程序员的地位,受到了同事的尊敬和上司的器重。但巴库斯是一个永远不满足于现状、总想变革现实的人。1953年,他向IBM的老板卡斯伯特 赫德(Cuthbert Hurd)写了一个备忘录,指出用机器语言编程的种种弊端,建议设计一种接近人类语言的编程语言代替机器语言,以提高编程效率,降低编程费用。意想不到的是,巴库斯这一对计算技术的发展起了如此重大影响的历史性建议遭到了当时任IBM公司顾问的冯 诺伊曼的强烈反对。由于对程序设计的高昂费用和代价不太了解,冯 诺伊曼认为巴库斯的建议是没有必要的,也是不切实际的。好在赫德比较开明而有远见,虽然冯 诺伊曼的声望和地位当时远比巴库斯高,但他还是支持了巴库斯,批准了巴库斯的计划,使Fortran的诞生成为可能。1959年4月,Fortran的编译器第一次在西屋电气公司订购的704计算机上成功运行,标志着一个时代(机器语言编程时代)的结束,另一个时代(高级语言编程时代)的开始。打这以后,各种不同风格的高级程序设计语言不断涌现出来,有些高级语言出世后从来就没有流行过,有些高级语言风行了一阵以后就销声匿迹,而Fortran则至今长盛不衰,这说明了它在设计与实现两方面都是成功的。
基于Fortran的巨大成功,在1958年5月于苏黎世举行的一次国际性计算机会议上,决定成立一个委员会,以Fortran为基础,对它们进一步改进,以形成了一种单一的标准化的计算机高级程序设计语言。许多著名的计算机科学家都参加了这个委员会。这个委员会的工作成果就是Algol 58及随后的Algol 60……等一系列版本。巴库斯也参加了这个委员会,而且对于Algol融入了一些新概念、新思想、新功能,如局部变量、递归等。但这时,基于开发Fortran的经验,巴库斯关注的重点已由定义语言本身转为如何清晰地描述和表达语言这个问题上,也就是要创建一个“元语言” (meta language)。经过苦苦思索和探讨,1959年6月,在联合国教科文组织UNESCO于巴黎召开的一个讨论程序设计语言的语法和语义的会议上,巴库斯在他提交的一篇论文中提出了如今众所周知的BNF(Backus Normal Form或Backus Naur Form)。巴库斯范式(或巴库斯 诺尔范式)以递归方式描述语言中的各种成分,凡遵守其规则的程序就可保证其语法上的正确性。BNF由于其简洁明了而被广泛接受,成为描述各种程序设计语言的最常用的工具。 BNF全文的第二种形式中出现的“诺尔”指丹麦数学家彼得 诺尔(Peter Naur),他对巴库斯的草稿进行了改进与完善。
我们目前常用的高级程序设计语言都是所谓冯 诺伊曼型的,也就是面向过程的语言,是以“逐词逐句”的方式工作的。巴库斯后来致力于开发非冯 诺伊曼型的语言,也就是函数式语言(functional language)。这种语言的主要成分是原始函数、函数型、定义函数。程序就是函数,程序作用在结构型数据上,产出结构型结果。用这种语言编写的程序结构清晰,便于使用代数方法研究程序的特性。巴库斯后来推出了一种名为FP的函数式程序设计系统,成为函数式语言的典型代表。
Fortran的效率非常高,大大缩小了程序开发人员之间的水平差距,这在Fortran出现之前几乎无法想象。Fortran的高效率主要源于编译器的设计,它可以准确地“捕捉”开发人员的意图,并将其转化为计算机可以处理的方式。在Fortran项目中,巴库斯解决了两个基本问题:如何让程序语言更容易被用户掌握,以及如何构造底层代码。在整个工作生涯中,他一直在积极应对这两大挑战。
Fortran可谓目前计算机运算中的程序语言之父,是第一个能将数学公式转换成计算机程序的语言。在1957年IBM成功地将其商业化后,Fortran正式展开协助无数工程应用软件的开发工作,为计算机软件开发做出了重大贡献。
巴库斯由于其一系列的重大发明而获得许多荣誉。1977年,巴库斯以“高级编程系统,程序设计语言规范的形式化定义”等工作荣获图灵奖。除图灵奖外,1967年他获得IEEE的W.W.McDowell奖;1975年被授予美国国家科学奖章 (National Medal of Science);1982年IEEE授予他“计算机先驱奖”;1994年美国工程院授予他Charles Stark Draper奖。他还是美国科学院和工程院的院士。