近看图灵碗 (转贴)

mochow 2010-02-01
本系列文章转自松鼠会,要访问可能需要Fan Qiang,所以直接贴来算了,请耐心等待后继更新

0. 引言

人们总是这样介绍图灵奖:这是计算机科学界的诺贝尔奖。不难看出,诺奖已经彻底符号化了,这个名词本身,就代表着知识界的顶峰,相比之下,其内容已是次要。用它来形容图灵奖,就暗藏了一个可怕的隐喻,图灵奖也将被符号化,人们只关注它的象征意义,而不是它背后的那些天才成果。所以我不喜欢这个比喻,却更想这样解释图灵奖:它代表着计算机科学历史上,那些最耀眼的杰作。

不知道有多少有心人留心过图灵奖的奖杯,那是一个银碗,外形朴实得很,但色泽却光彩夺目。


这种亮得晃眼的碗,中国古代也有一种,就是定窑的白瓷碗。现在几乎公认,宋瓷是中国瓷器艺术的巅峰之作,定窑作为宋朝的五大名窑之一,在艺术上的造谐是极为杰出的。可是,当朝皇帝却不喜欢定窑的碗,“本朝以定州白瓷有芒不堪用”,就因为它太亮,没法用。

图灵碗也是“有芒不堪用”,它们太亮太耀眼,几乎没有哪项图灵奖的成果,能够直接应用于日常生活。但是,正如这并不妨碍定州白瓷成为艺术极品,图灵奖的作品,也同样值得我们拿着放大镜细细品味,感叹它们的美。计算机科学不是关于计算机的,它也不只是一门科学,的确,它是一门艺术。

掐算下来,从1966年到2009年,图灵奖已经走过了近半个世纪,这也是计算机科学走过的半个世纪,获奖成果串连起来,就是一部计算机科学史。这条旅途跌宕起伏,光影变幻,人类历史上从没有过哪个学科,在破壳而出后的短短半个世纪里推进如此之远(如果不把量子物理看成独立学科的话)。

接下来,我们大家就结伴同行,去近看这55个图灵碗。它们中的每一个,都是铭文清晰,包浆温润,我索性客串一名掮做,为大家逐一解说这些令人享受的巧夺天工之作。那些捧得图灵碗的大师,每一位都是成就等身,篇幅所限,我们不能历数,只介绍他们直接赢得图灵奖表彰的工作。在这些前贤面前,我是走狗一只,初出茅庐,还不知两分天下,所以文中错误难免,还请读者海涵。

好了,来,让我们开始吧,先屏住呼吸,将时间拨回1946年……好好好,我知道计算机科学人士看到这个年份就不耐烦了,那我们就再将“年针”拨一圈,来到1958年。对1946年之后几年的计算机发展史不熟悉的读者也别着急,需要提到的知识,我们都不会漏掉的。好了,睁开眼睛,旅途从这里开始了。
mochow 2010-02-01
一. 从苏黎世到巴黎(上)

我们的旅程从世界花园瑞士开始,1958年5月27日,苏黎世过完了六鸣节,到处春暖花开。就在4年前的这个季节,图灵离开了人间。

这一天,一场8个人的讨论会将在苏黎世召开,没有花,没有酒,连个专门的会议名称都没有。会议桌的一边,是美国计算机学会(ACM)的4名代表,另一边是德国应用数学和力学学会(GAMM)的4名代表,索性把地点和双方名称连起来,就叫苏黎世ACM-GAMM会议。后来的历史将会证明,这场毫不隆重、甚至不太圆满的会议,改变了此后的计算机科学,特别是对于1922年成立的GAMM来说,这场会议几乎成了它唯一的光辉事迹。8名代表陆续抵达了苏黎世,他们将要在此讨论,规划一种新型的编程语言,叫作国际代数语言(IAL)。

在电子计算机刚刚出现时,想让它干活十分不容易,关键的问题就在于,计算机听不懂人类语言。既然没法让计算机说人话,人们只好使用机器语言跟它们沟通。



左手是电线,右手是开关,这就是最早的机器语言(图为1946年的ENIAC计算机)。程序员先在纸上把程序设计好,然后进行持续数周的扳开关和接电线的工作,读者如果做过数字电路的课程实验,就能体会到那是怎样的麻烦,万一哪根儿线断了,排查起来那就是恶梦的样板。后来,程序员们有了新方法,把程序设计成打孔卡片(有孔没孔就是二进制),于是编程的主要工作变成了打孔,大家要是有兴趣,把自己身份证号码转成二进制,打在纸条上,看看是什么滋味。打一个数尚属不易,打一个程序就不难想象了。再后来,冯诺伊曼提出的存储程序实现了,人们把程序像数据一样保存在机器里,随时调用,编程从这时起才正式变成脑力劳动。但别高兴得太早,虽然不用接电线和打孔,但编程还是要用0101001111,就像《麦兜的故事》里面麦太太说的,鸡包纸包纸包鸡包鸡包纸包再包鸡鸡鸡。这种程序,编的时候只有作者和上帝能看懂,过一阵子之后,恐怕只有上帝能看懂了。随后,人们把一些常用的指令用一些“助记符”来代替,有了 ADD、MOV这样的写法,形成了汇编语言,但本质上跟鸡包纸包鸡还是同一码事。

1953年,IBM公司的巴科斯(John Backus)再也忍不下去了,这哪里是编程,这不跟受刑一样么。他揭竿而起上书董事长,要为IBM704系列计算机开发一种新型编程语言。号称计算机之父的冯诺伊曼当时是IBM的顾问,他坚决认为这个提议十分不靠谱,但也许是应了有心人天不负,董事长Hurd同意了这个计划。



巴科斯1924年出生在美国费城,他的父亲是一家火药公司的员工。巴科斯小时候不爱读书,勉勉强强混了个中学毕业,进入弗吉尼亚大学学习化学,成绩依然很不好。二战爆发后,巴科斯参加了美国陆军,在Haverford学院(这可不是哈佛)接受医疗训练,准备治病救人,结果别人没救成,倒是发现自己长了一个脑瘤,于是接受了手术。后来,巴科斯打算当一名无线电技术员,在训练过程中,突然对数学产生了极大的兴趣,于是进入哥伦比亚大学学习数学,于 1949年获得硕士学位,进入了IBM公司工作。

巴科斯开发新语言的提议得到了批准后,立即组建了一个开发小组,并担任组长,主持开发工作。1957年,第一套Fortran语言诞生了,尽管呱呱坠地时哭声不响,第一次演示就出了编译错误,但还是坚强地活了下来。本文不是编程教材,对于Fortran的具体细节,就不过多叙述了,但是我们要记住这个名字,因为它是非常耀眼的。Fortran是世界上第一个被正式应用的高级语言,所谓高级语言,是说它的语法更接近人类语言,而不是鸡包纸包鸡。从此以后,程序员不必再背那些枯燥的机器码,只需用“IF (x > 0) THEN x = 0”这样的简单易懂的方式编程,可想而之它的推出让人多么兴奋。在电影《硅谷海盗》中,微软CEO鲍尔默讽刺说,要想激起比尔盖茨的性欲,必须这样叫床:Oh!Fortran~Oh~For~~Tran~。直到如今,经过多年改进的Fortran仍然在计算机界占有一席之地,不知道知天命之年的 Fortran是否会记恨,当年冯诺伊曼差点把它掐死在摇篮里,戏剧的是,就在第一套Fortran诞生之前两个月,冯诺伊曼因癌症去世了。关于 Fortran就先说到这里,尽管它光辉夺目,但对于本文来说,它只是配角。在上世纪 50年代末,编程语言的矛盾已经白热化,并非Fortran一己能够力挽狂澜。况且Fortran本身还有一个严重缺陷,它为IBM704而生,依赖特定的机器型号,很难移植到别的机器上。革命尚未成功,同志仍需努力,在这个时候,ACM和GAMM都对编程语言有一些想法,于是他们决定坐在一起讨论讨论,规划一种更好的语言。苏黎世讨论会就是在这样的背景下召开的。

Fortran语言之父巴科斯这回又没闲着,作为ACM的代表之一,他也来到了苏黎世,想再次参与锻造新刀。这次制定语言,主要有两个原则,第一点毫无疑问,要使它更容易被人类理解,这是一直以来的革命方针;第二点,是要弥补Fortran的一些不足,主要是要具有通用性,兼容不同型号的机器。

讨论会开始了。由于只有8人,不必拘泥形式,再加上诸位代表都是理工背景,说起话来锱铢必较,这场讨论,注定激烈无比。

为了描述即将诞生的国际代数语言,巴科斯用他带着重重鼻音的费城口音,首先提出了一套用来描述语言的语言,称为巴科斯范式。我们知道,学英语的时候,有一些“主+系+表”之类的句套子,对学习英语有很大帮助。对于计算机语言,也需要这样的句套子来描述它,巴科斯范式就是为了描述IAL而提出的。当然这个范式并非这么简单,它也能描述其它编程语言,甚至一部分自然语言,是一套非常了不起的设计。

有了巴科斯范式,8名代表你一言我一语,将自己在设计语言方面的经验倾囊而出,开始制定国际代数语言的标准。正所谓众口难调,每个人都对自己心中的新语言有着自己的观点,大家很快就陷入了争执,谁也不让谁,抢着用飞快的语速反驳对方,屋里的空气陷入了紧张,一个接一个的“IAL”、“IAL”、 “IAL”飘在空中,不停地游荡。这时,ACM小组的主席艾伦佩利(Alan Perlis)突然瞪着圆圆的眼睛大声说:停!你们难道没发现“IAL”这个词很绕嘴吗?



佩利比巴科斯大两岁,1922年出生于美国匹兹堡,与巴科斯的家乡费城同在宾夕法尼亚州,俩人也算是半个老乡。佩利虽然出生在愚人节,但他一点儿也不笨,比起巴科斯,佩利可算是年轻有为。无巧不成书,佩利初入大学时也是化学专业,他在21岁时,获得了卡内基理工学院的化学学士学位,这个学院就是现在美国计算机专业排名第一的著名学府,卡内基梅隆大学。与巴科斯巧合的是,刚刚走出大学校园的佩利,看到满街都是征兵海报,看到山姆大叔紧盯着他说“I want you”,看到珍珠港事件后神经绷紧的美国,也选择了参军。更加惊人的巧合是,佩利也是在服役期间突然对数学产生了强烈兴趣,并转而攻读之。1950年,他在麻省理工学院获得了博士学位。两年后他来到普渡大学,出任普渡大学计算中心首任主任,在普渡安装了IBM CPC计算机,并为其设计了一个叫作IT(Internal Translator)的编程语言。过了四年,这个毕业才6年的34岁年轻人,又一跃当上了卡内基理工学院第一任计算机科学系主任,为卡耐基配置了IBM 650,顺便把IT语言移植到650上。这些工作使佩利在程序语言的设计方面,有了许多经验和体会,所以在ACM成立这个程序设计语言委员会时,佩里坐上了主席的位置。诸位读者,假如这个惊人的成长步伐让您吃惊,那您可要好好地适应一下了,在我们这个系列的文章中,比比皆是这样的天才人物,会让您脊背发凉。

言归正传,我们刚才说到,佩利在讨论时,认为“IAL”这个词很绕嘴。假如他懂一点中文,没准还会发现,这个词一旦读快起来,很像汉语中的“哎哟”。佩利扶了一下眼镜,继续说道:我想不明白为什么要起这么个名字,不但很绕嘴,而且狂妄自大,不就是个语言么,何必扯虎皮做大旗,叫什么“国际语言”?佩利此言并无它意,然而他一心只顾着说,没有注意到身边的巴科斯此时已是脸红耳热,巴科斯所在的公司,早在1924年还在卖人口统计卡片的时候,就 “狂妄自大”地改名叫作国际商用机器公司。

尽管佩利认为IAL这个名字既绕嘴又狂妄,但其他代表却觉得这个名字好听又大气,再说这又不是什么要紧的事,何必在这上面浪费口舌。这件事情仿佛成了插曲,直到五天后会议结束时,新语言的名字仍然是IAL,并写进了会议总结。也许这些代表怎么也没预料到,佩利在一年之后,还是执意改掉了这个名字,他们更没预料到在多年之后,新的名称将以烫金大字铭刻在计算机科学的历史上,而IAL却鲜为人知。

取代“IAL”的新名字,叫作ALGOL。这是ALGOrithmic Language的缩写,即算法语言。后来Bauer强调说,ALGOL这个名字,是Bottenbruch最先提出的,这两位都是苏黎世讨论会的德国代表。

除了名字没有达成共识之外,最终大家对新语言的句法也没能统一意见,苏黎世ACM-GAMM会议带着许多未尽的争议,在1958年5月1日草草落下了帷幕。然而,对于这些科学家来说,事实胜于一切雄辩,绝不能陷入驴子的困境。会议结束后,他们立即投入到实现新语言的工作中——既然分歧不能解决,那就干脆两种都做出来再说。他们成立了一个ZMMD小组,旨在开发一种ALGOL语言的编译器,ZMMD这个名称的由来,是其几位组员以及他们使用的一台 Z22计算机分别所在的四个城市的开头字母。

请计算机专业的读者们在此稍息片刻,容我给其它专业的读者稍微解释一下什么是编译器。前面我们说过,因为计算机没法理解人类语言,我们需要用机器指令来编写程序,我们现在有了高级编程语言,不必使用麻烦的机器指令,这并不是因为计算机学会了人类语言,而是因为我们请了一位翻译。简单地说,它能够把高级语言翻译成机器指令,既使我们不用再做那些机械劳动,也能满足机器们的冰冷胃口,这个翻译就是编译器,它本身也是一套程序。好了,大家回回神,继续我们的故事。

就在不久之后的1958年年底,欧洲的冬天到来了,世界各地的游客纷纷来到壮丽的阿尔卑斯山,体验激动人心的滑雪运动。就在这个冬天,在ZMMD小组的努力下,第一套ALGOL语言及其编译器成功地开发出来了,按照年份,命名为ALGOL58。好玩的是,ALGOL58有三种不同版本的语法,在实际编程和书面表达时写法是不同的,有点像汉语分白话文和文言文,其差异之大,连小数点的写法都不一样。由于巴科斯的参与,ALGOL58既继承了 Fortran的许多优点,又弥补了Fortran的许多不足,一度使Fortran的地位面临着严竣的挑战。这里我们不详细介绍ALGOL58的样子,它的生命实在太短暂,很快就退出了历史舞台。因为,就在一年多以后,ALGOL58的创造者,包括巴科斯和佩利等,对这种新语言有了许多新的体会和感受。 1960年1 月,他们召集了其他几位参与ALGOL工作的计算机科学家,来到了浪漫之都巴黎,再次召开了一场关于ALGOL语言的研讨会。

(未完待续)

mochow 2010-02-01
一. 从苏黎世到巴黎 (下)

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位捧得了图灵碗,戴上了计算机科学界的最高桂冠,从这个意义上来说,它真的是一个“绝对的奇迹”。

(第一章完)
黑暗浪子 2010-02-01
期待后面的故事。就看了这些我也深有感触。还有高德纳好像也是图灵奖得主
ald 2010-02-01
好文,慢慢看。另外,发现一处笔误。
“1958年5月27日,苏黎世过完了六鸣节,……这一天,一场8个人的讨论会将在苏黎世召开”
“苏黎世ACM-GAMM会议带着许多未尽的争议,在1958年5月1日草草落下了帷幕。”
是6月1日落下了帷幕吧?
mochow 2010-02-01
ald 写道
好文,慢慢看。另外,发现一处笔误。
“1958年5月27日,苏黎世过完了六鸣节,……这一天,一场8个人的讨论会将在苏黎世召开”
“苏黎世ACM-GAMM会议带着许多未尽的争议,在1958年5月1日草草落下了帷幕。”
是6月1日落下了帷幕吧?


对,会议开了5天,正好应该是6月1号落下帷幕.

我这个也是最新转贴的,下一篇估计得等几天才能出来了,大家耐心点等吧.
wgoku 2010-02-02
期待下文。
mochow 2010-02-22
近看图灵碗 (8. 我就是上帝) (上)


作者:苏椰

过年了,苏椰特意叮嘱编辑们先把这个系列的第八章发出来,理由之一是大过年呢,8是个喜庆的数字。真没想到最年轻的松鼠还会从这个角度为读者细心考虑,那就成全他8,让我们在这部专辑里暂时做一次穿越,先看看第九只图灵碗背后有怎样的故事。

密尔沃基市,是美国威斯康辛州最大的城市。1938年1月10日,圣诞刚过不久,密尔沃基市民像往常一样平静地生活着。咖啡店里,有人在议论着罗斯福总统的救市新政策,有人在议论着到底该不该限制公民持枪。而更多的人呢,则一边品尝着密尔沃基闻名全国的啤酒,一边听着广播里面的实时战况:侵华日军登陆青岛了。谁也没有想到,这个平静的日子将载入这座城市的史册。这天,密尔沃基路德教会高中的一名印刷管理员,高兴地迎来了一个健康的儿子。他为儿子取了一个响亮的名字,这个名字在不久的将来,成为了计算机编程艺术的旗帜:Donald Ervin Knuth。

为了方便讲述,请各位读者允许我先剧透一件39年后的事儿。在1977年Knuth造访中国前夕,姚期智的夫人为他取了一个中文名字:高德纳。在下面的故事里,我们就使用这个名字来称呼他。


高德纳天资聪颖,他的超凡智力在8岁时就显示出来了。当时,一家糖果商在孩子们当中举办了一项有趣的比赛,要求用“Ziegler’s Giant Bar”里面的字母,写出尽可能多的单词。裁判事先准备了一份2500个单词的列表,可他却远远低估了小选手的能力,高德纳令人惊讶写出了4500多个单词,毫无疑问地获得了冠军。他为学校赢得了一台电视机,还为每个同学赢得了一只棒棒糖,他的赛后感言是,我还能写出更多。

高德纳的高中就读于他父亲所在的路德教会高中,在这期间,他发表了此生第一篇学术文章。尽管如此,但这个充满了才华和个性的年轻小伙,并没有把心思放在科学上,他的主业是音乐和作曲。他的老师,甚至包括他自己,十分怀疑他将来进入大学后,是否能够顺利学习数学。这种想法给高德纳造成了不小的自卑,尽管他的平均分是学校历史上最高的。不过有句话说,真正的天才是1%的灵感加上99%的汗水,这话用在高德纳身上毫不夸张,18岁的他,在进入大学之后,丝毫没有向数学屈服,而是花费无数的课余时间,大量练习数学难题,这种努力的劲头再加上他的天份,使他很快就在数学方面超过了其他同学。其实我们与其关注一些科学家们不可模仿的机会和天赋,莫不如更关注他们如何面对困难和挫折。高德纳告诉我们,没有什么过不去的坎儿,方法就是抓紧时间干活。

高德纳就读的大学是凯斯理工学院,在这里他接触了IBM650计算机,这导致高德纳的音乐家梦想一去不复返,科学天赋终于重新占领了他的心扉。 1956年,在他第一次使用IBM650之后,他就躇踌满志地相信,说明书上介绍的程序,一定比不上他自己编写的。于是高德纳开始学习编程,他的第一个程序是因数分解,不久之后,高德纳就对编程有了许多体会。当时高德纳还兼职管理学校的篮球队,于是他编写了一个程序,能够自动评估每名球员的价值,令球队的教练非常欣赏。这件事还吸引了CBS电视台的报道,后来高德纳、球队教练和IBM650的一张合影,还被印到了IBM650的宣传册上。1960年,高德纳以公认出色的成就,打破了学校的惯例,同时获得了学士和硕士两个学位,大家来做个减法吧,算算高德纳此时年岁几何。

随后,高德纳从五大湖区,来到了美国西南岸,进入伯克利攻读数学博士学位。在此期间,他的编程生涯也正式开始了,他对外提供软件服务,为各种不同机器设计各种稀奇古怪的编译器,曾经一个程序卖到5000美元。最值得一提的,就是他对ALGOL60编译器提出的测试方法。不知道大家是否还记得 ALGOL,这盏批量生产图灵奖的阿拉丁神灯。当时我们介绍过,ALGOL60的设计目标要求支持递归,而在设计编译器时,对递归的处理是很复杂的,所以经常会因为编译器不成熟而出故障。高德纳编写了一段非常简单的测试程序,江湖人称“Man or boy test”,俗名“是男人就得-67”。高德纳说,只要用ALGOL60编译器来编译我的这段程序,如果运行结果等于-67,就说明这个编译器是纯爷们儿,否则就只能算小男孩。

1963年,25岁的高德纳顺利拿到了博士学位,并留在伯克利任教。在毕业前一年,虽然还是研究生,但高德纳已经因为设计编译器而响誉计算机行业。于是著名的Addison-Wesley出版社与他约稿,请他写一本关于编译器和程序设计方面的书。这本来是很平常的一件事,但您看看高德纳是何许人也,不久之后,他简直把这件事做成了一件计算机科学史上的奇观。1962年约的稿,高德纳一直写到1966年还没交,在此期间他又是毕业,又是教书,终于人家出版社急了。编辑找到高德纳,说这都四年了你写了多少啊,高德纳说,才写3000页手稿。编辑大囧,忙问都3000页了你怎么还不交,高德纳答曰,急啥,我还没写到正题呢。编辑彻底雷住了,说那你出个多卷本吧……

《计算机程序设计艺术》,就这么诞生了。

把一件平常的事做到人间极致,这就是高德纳。他不是故弄玄虚,他的心里攒着一股劲儿,要写出一部与牛顿的《自然哲学的数学原理》相媲美的传世巨著。他一开始计划了六卷,后来觉得这个数字不怎么好,又改成了七卷。1968年,《计算机程序设计艺术》(The Art Of Computer Programming,江湖人称TAOCP)的第一卷正式出版了。这一卷的标题叫《基本算法》,但难度却并不低。比尔盖茨曾经花了几个月的时间读完这一卷,并且做了大量的练习,然后他说,如果你想成为一个优秀的程序员,那就去读这个《基本算法》吧,确保自己能够解决里面的每一个问题。然而,高德纳本人的说法却比盖茨犀利多了:要是看不懂,就别当程序员。

就在这同一年,高德纳跳槽到斯坦福大学,并当上了教授,一边带博士,一边继续写书。一年后,TAOCP第二卷《半数值算法》正式出版,又过了三年,也就是1973年,第三卷《排序与查找》也相继付梓。这三卷书立即被计算机界惊为神作,在那几年之内就卖出去了100多万套,至今仍然是编程书籍中的最高经典。有一些对我们来说巧妙得不能再巧妙的算法,在这三卷书中顺手掂来,比比皆是,这个我们等会再说,现在有件要紧的事儿。按照高德纳的计划,这套书一共是七卷,但是现在刚刚写完三卷,就已是震古烁今。震到什么程度呢,连图灵奖颁奖委员都坐不住了,他们做了一件前所未有的事。按照惯例,图灵奖的获奖者都是成就等身,要经过时代的检验,然而高德纳却是例外,在他的七卷本刚刚写完三卷时,ACM便决定立即为其颁发图灵奖:

    授予高德纳图灵奖,以表彰其在算法分析、程序设计语言的设计和程序设计领域的杰出贡献,特别是其著名的《The Art of Computer Programming》系列丛书。

这是1974年的ACM图灵奖颁奖词,高德纳捧走了历史上第9个图灵碗。这对高德纳来说,无疑是个殊荣,因为这一年他只有36岁,直到现在,他仍然保持着获奖年龄最小的纪录。

我们故事才讲到一半,可天才的高德纳却已经得到了图灵奖。各位读者可能要问,那下面还讲啥,他无非就是接着写书,接着带博士,就别废话啦。您要是这么想,那就大错特错了,他要是那么做,他就不是高德纳。提前剧透一下,这个看上去顺理成章的计划,很快就被打破了,计划中的七卷本,直到今天都没有完成。欲知发生了什么,且听下回分解。
lkj107 2010-02-23
国外的程序员太多传奇
国内的程序员太多喘气
lkj107 2010-02-23
五十年代在炼钢
六七十年代在斗争
Global site tag (gtag.js) - Google Analytics