2010年1月31日星期日

近看图灵碗 (一. 从苏黎世到巴黎) (下)-科学松鼠会

来自"科学松鼠会"的最新文章,如果您不希望再收到此邮件,请退订;如果您需要更换其它邮箱接收邮件,请点击这里

近看图灵碗 (一. 从苏黎世到巴黎) (下)

Sun, 31 Jan 2010 07:30:36 +0800

1960年新年刚过,浪漫之都巴黎正是白雪皑皑的冬天。游客们缓缓登上埃菲尔铁塔,鸟瞰美丽的花都,弥满着四处纷飞的雪花,陷于一片朦胧。

这时候,ALGOL58已经诞生一年多了(58年末至60年初),佩利、巴科斯等主要参与者们,都在实践当中对新语言有了新的体会。革命的脚步不会停下,很快,他们集合了紧密团结在ALGOL58周围的13名计算机科学家,来到巴黎,再次对语言设计进行讨论。尽管苏黎世会议的大部分老朋友都又来到了巴黎,然而这次研究会的主角儿,对我们而言却是一个新面孔,他是丹麦计算机科学家诺尔(Peter Naur)。

诺尔1928年出生在丹麦,29岁获得了天文学博士学位,后来在哥本哈根天文台工作时,为了计算天文数字,他设计了丹麦第一台电子计算机DASK。诺尔是一位兼具才华与情趣的科学家,读着不妨检索一下他发表的学术论文,涵盖了天文学,计算机科学,古典音乐,心理学等诸多领域,是学术界当之无愧的一名男子全能选手。就在巴黎会议召开不久前,诺尔进入了丹麦计算研究院工作,并为玻尔研究所授课,同时还被选为了欧洲语言设计小组成员。尽管如此,这时诺尔的主要兴趣仍是天文学,计算机对它来说,不过是研究天文的工具。

主角儿到了,那就让会议开始吧。还记得苏黎世会议上提出的巴科斯范式吧,巴黎会议的首要任务,就是继续完善这个范式,诺尔在第一局就立了大功。为了更清晰地描述下一代ALGOL语言,诺尔对巴科斯范式进行了大幅度的简化,缩减了它的符号集,如今使用的巴科斯范式,均是经过诺尔改进后的。后来高德纳(Donald Knuth)指出,应该将巴科斯范式改称为巴科斯-诺尔范式,以肯定诺尔为其做出的贡献,然而谦虚的诺尔却并不乐意这样。在《人类行为——计算》一书中(这本书记载了诺尔为计算机科学所做的大量贡献),诺尔曾说,我没有打算要把我的名字加进去,其实我觉得,它叫"巴科斯范式"挺好的。

范式并非难题,随着诺尔的工作,很快就通过了,13位代表开始讨论新一代ALGOL本身的设计。这次会议,大家吸取了上次苏黎世的教训,要求坚决不能再留下争议,对每一个细节都不能含糊。于是,每名代表都铆足了劲儿,进行了旷日持久的讨论,整个会议竟然持续了半个多月才闭幕。后来佩利回忆这次巴黎会议,他说最大的感觉就是累,实在太累,感觉简直就是没完没了。而且像上次一样,这些人论战起来丝毫不留情面,很多人的想法刚说出来就被彻底否定,一点翻身机会都不给。佩利说,这13名代表的精神头儿实在令人感叹,在那半个多月里,他们每天一见面,个个都像打了鸡血。

13个人马不停蹄地论战半个月,平均下来,每个人要叭啦叭啦说上一整天还多。然而,他们的努力却没有白费,这次会议终于终一了意见,完整地规划出了新一代ALGOL语言,按照年份,命名为ALGOL60。在会议的最后,由诺尔对此进行总结,整理会议讨论出的ALGOL60的所有特性,形成了后来名扬江湖的《算法语言ALGOL60报告》。这个总结工作充分体现了诺尔的才华和巴科斯范式的力量。在这之前的编程语言,是由编译器代码来描述的,既冗长又混乱,学习起来很有难度,而且非常难以在人类之间进行交流。这就好比你买了一部手机,发现附带的说明书很有特色,是这个手机的全部电路图,请你根据这些图来学习使用手机。当时学习编程,就是这么尴尬,但诺尔改变了这些,他首开先例,使用巴科斯范式对语言进行定义,用人类语言精心措词,短短17页� �告,简洁优雅至极。这份报告成为了计算机科学史上的名作,它完整地描述了ALGOL60语言的所有特性,却不依赖任何机器细节,便于在人类之间交流——编程语言第一次拥有了"使用说明"而不是"电路全图"。诺尔的这项工作,改变了此后描述编程语言的方式,直到现在仍在使用。

巴黎会议,诺尔一鸣惊人。这个来自童话王国,热爱古典音乐的天文学家,站在这里告诉世界,计算机科学也可以很美的。

各位读者,我们已经从苏黎世的春天,一路走到了巴黎的冬天,ALGOL语言的正式版本终于被确定下来了。接下来要做的,就是把它付诸实践。冬去春来,万物复苏,1960年夏天,荷兰计算机科学家狄克斯特拉(Edsger Dijkstra)开发出了ALGOL60的编译器,ALGOL正式登上了计算机科学的舞台。随后,佩利将它引入了大学的课堂,在那个计算机科学的初始混沌期,此举一下子让无数的人们看到计算机科学到底应该是什么样子("哇塞,原来不是电路全图耶~")。狄克斯特拉说,这是一个伟大的标志,这标志着计算机科学真正地诞生了,ALGOL60是个绝对的奇迹。在接下来的30年里,ALGOL一直是教课书和学术界用来描述算法的不二之选。

说到这里,按照学习编程的惯例,认识一种语言,要先看它的"Hello,world"样例。下面就是ALGOL60的例子,我们共同一睹这个"绝对的奇迹"芳容如何。没有学习过编程的读者不必担心,这段程序的功能,就是在屏幕上显示一行"Hello,world!",要是您实在看得一头雾水,那就直接跳过这些蝌蚪文,我保证不会影响您享受接下来的旅途。当然,我相信以ALGOL语言的优美,一头雾水的可能性并不大的。

BEGIN DISPLAY("HELLO WORLD!") ; END.

值得注意的是,这个写法并不唯一,因为ALGOL60仍然保持了ALGOL58的那个奇怪特性:分成文言文和白话文。事实上,ALGOL60主要是在ALGOL58的基础上改进得来的,所以它在许多地方都继承了ALGOL58的特性。如今,很难再找到编译器来让这段程序跑起来了,因为半个世纪荏苒而逝,时代的浪潮不饶人,想让ALGOL复活,已经不太可能了。然而,ALGOL的灵魂却从未离开,它简洁而优雅的定义(这主要归功于诺尔),影响了后面一系列编程语言的设计。ALGOL提出的许多概念都被后来的编程语言沿用,例如"代码块结构"这些我们习以为常的编程方式,都是由ALGOL率先使用的。包括C和C++在内的大部分五星级上将语言,都因为师出 ALGOL而被称为"类ALGOL语言"。可以说,ALGOL直接影响了整个计算机科学界和工业界的发展,影响之程度深入骨髓,而且至今经久不衰。

好了,我们旅途的第一站已经游览完了,不知这一路上大家感觉如何,是否感受到了瑞士的美丽和法国的浪漫,是否感受到了巴科斯揭竿而起改造编程语言的决心,是否感受到了佩利在语言设计和教育方面的高瞻远瞩,是否感受到了诺尔才华横溢的优雅气质,是否感受到了舌战群儒半个多月的激烈气氛,是否感受到了两次会议每名代表的聪明才智,是否感受到了ALGOL是一个"绝对的奇迹"。现在,女士们先生们,让我们屏住呼吸,颁奖的时刻到了。

那位认为"IAL"绕嘴又狂妄的艾伦佩利,因为在卡内基和普渡创建了计算机专业,并在ALGOL早期发展中带队做了大量工作,于1962年当选为美国计算机学会(ACM)主席。四年后,也许是近水楼台先得月,佩利成为历史上首位ACM图灵奖得主,捧走了历史上的第一个图灵碗。ACM对他的颁奖词是:

授予艾伦佩利图灵奖,以表彰其在高级编程技术及其编译器构造领域的影响 。

五年后,佩利再次跳槽,来到了耶鲁大学,连任多届计算机科学系主任,期间还一度执教于加州理工大学。1982年,退休后的佩利返老还童,写下了一系统关于编程的幽默,发表于ACM的SIGPLAN期刊上。其中他写道,如果你给别人讲解程序时,看到对方在点头,那就拍他一下吧,他一定是睡着了。 1990年2月7日,佩利因心脏病在纽哈芬去世,享年68岁。

还记得这场"绝对的奇迹"的导火索、不爱学习、后来在IBM揭竿而起的巴科斯吗?在佩利获得图灵奖11年后,1977年10月17日,巴科斯也凭着ALGOL的设计工作,在西雅图ACM年会上获得了图灵奖,捧走了第14个图灵碗。ACM对他的颁奖词是:

授于约翰巴科斯图灵奖,以表彰其在高级编程系统,程序设计语言规范的形式化定义方面所做的贡献。

巴科斯随后发表了获奖演讲,不知是不是因为他最初提议设计新语言时,曾经遭到冯诺伊曼的反对,从而对冯诺伊曼记恨在心(哈哈开个玩笑),他演讲的题目是《程序设计能从冯诺伊曼形式中解脱出来吗?》。2007年3月17日,巴科斯在美国俄勒冈州的家中去世,享年82岁。

已经两个了,可是还没有结束,我们一定没有忘记后来出场的那位才华横溢的科学家诺尔,他的图灵奖比前面两位来得似乎晚了一些。2005年,已经77 岁高龄的诺尔,在ALGOL60报告发布的45年后,终于等到了迟来的图灵奖,捧走了第50个ACM图灵碗。ACM给诺尔的颁奖词是:

授予彼得诺尔图灵奖,以表彰其在定义ALGOL60程序设计语言方面的先驱性工作。

虽然他的图灵碗迟到了40年,但是以诺尔的淡泊和平和,我们不难想见,他不会太介意的。

计算机科学早期的程序语言设计,是一项很艰难的工作,在这十多位科学家的努力下,创造了ALGOL这个绝对的奇迹。其中,上面这三位直接因为 ALGOL捧得了图灵碗,事实上参加巴黎会议的13名科学家中,还包括麦卡锡(John McCarthy),他后来因为在人工智能领域的杰出贡献获得了图灵奖,我们将在后面单独欣赏他的工作。为ALGOL60开发编译器的狄克斯特拉,也紧跟着麦卡锡,作为一位编程艺术大师而获得了次年的图灵奖。ALGOL,它就像一个阿拉丁神灯,亲手触摸过它的寥寥十几位科学家中,先后5位捧得了图灵碗,戴上了计算机科学界的最高桂冠,从这个意义上来说,它真的是一个"绝对的奇迹"。

(第一章完)

你也许会喜欢

返回顶部

此邮件由系统自动发送,请不要直接回复该邮件,该服务由Feedsky提供技术支持,祝您使用愉快。

没有评论:

发表评论