科学Sciences导读:36岁获得图灵奖的计算机领域经典必读著作《计算机程序设计艺术》的作者高德纳(Donald Knuth),近日接受纽约时报采访,谈到对于这部已投入五十载心血作品的反思,并且80岁高龄的他要在105岁完结《计算机程序设计艺术》。
(6440字)目录
近乎偏执的完美主义者
算法的曙光
周日拜访小记
36岁捧走图灵碗!80岁算法大师高德纳要在105岁完结《计算机程序设计艺术》
作者:Siobhan Roberts,译者:CSDNCSDN20181228,整理:科学Sciences20190416Tue
美国著名计算机科学家、斯坦福大学电脑系荣誉教授,自幼便显露非凡智力的算法大师高德纳,36岁便凭借未完的《计算机程序设计艺术》捧走图灵碗,曾是最年轻的图灵奖获得者。他被誉为现代计算机科学的鼻祖、算法领域的精神导师,在计算机科学及数学领域发表了多部影响力深远的论文和著作,同时还是TeX和Metafont排版系统的发明人,更与EdsgerWybe Dijkstra并称为我们这个时代最伟大的计算机科学家。除了写书,高德纳同时还是一位音乐家、作曲家、管风琴设计师……作为一个不折不扣的完美主义者,高德纳近乎偏执地对自己提出了严苛的要求——精益求精的作品、严密的时间安排,乃至文学层面的追求,甚至曾以排版工具太差破作品之美为由宣布歇笔。这也导致《计算机程序设计艺术》的下一册迟迟“难产”,已然拖过了原定计划中的“圣诞”之期。关于完结,更是预留了未来二十五年。如今已是80高龄的他,继续玩技术、玩音乐、玩游戏、写小说——做一切“快乐”的事。最后,套用一句高德纳自传开头的话:“Donald Knuth真的仅仅是一个人吗?”
以下为《纽约时报》中译文:
近乎偏执的完美主义者
半个世纪以来,斯坦福大学的计算机科学家DonaldKnuth已然成为算法领域的精神领袖。说起他的外貌,倒是与星球大战中的尤达颇有几分相似,只不过他身高6英尺4英寸(约1.93米),还戴了副眼镜。
Donald Knuth在加利福尼亚州斯坦福的家中 | 图片来源:纽约时报Brian Flaherty
他是个众所周知的极端完美主义者,甚至愿意为任何指出他的书中错误的人支付报酬。
他是《The Art ofComputer Programming》(中译本《计算机程序设计艺术》)一书的作者,该书共有四卷,也是他一生的杰作。第一卷首发于1968年,2013年该合集(售价约为250美元)被《美国科学家(AmericanScientist)》杂志评选为20世纪最重要的科学类专著,一起被入选该书单的还包括《TheAutobiography of Charles Darwin》(查理斯·达尔文自传)的特别版、汤姆·沃尔夫的《太空英雄》(TheRight Stuff)、雷切尔卡逊的《寂静的春天》(Silent Spring)以及阿尔伯特·爱因斯坦、约翰·冯·诺伊曼和理查德·费曼的专著。
《计算机程序设计艺术》出版了一百多万册,是计算机领域的圣经。Google的研究主管PeterNorvig曾评论称:“这本书就像一本真正的圣经,内容很长而且很全面,其他书籍都无法比拟。”该书的第一卷一共有652页,书的后封面上还印有比尔·盖茨的推荐语:“如果你能够看懂这本书的所有内容,那么欢迎给我发来简历。”
《计算机程序设计艺术》1-4卷| 图片来源:纽约时报 CreditBrian Flaherty
第一卷开头有一段摘录自《McCall'sCookbook》的话:
你们写了几千封信要求我们出版的那本书来啦。我们花了很多年的时间反复检查书中这不计其数的食谱,只为给您带来最好、最有趣又完美的内容。
这本书讲的是数字时代的基石——算法,尽管Knuth博士认为算法早在3800年前就诞生于巴比伦的石板上。Knuth是一位受人尊敬的算法专家,他的名字与该领域一些最重要的发展息息相关,例如Knuth-Morris-Pratt字符串搜索算法。该算法设计于1970年,可以在文本中查找所有给定的单词或任何字母组合——例如,在你按下Command F的时候来查找文档中的关键字时,采用的就是这种算法。
如今,Knuth博士已然80岁高龄了,但工作时的他每每穿得像个年轻的极客:长袖T恤外套一件短袖T恤,再配上条牛仔裤,每年这个时候他都是这种打扮。早些年,他总是和机器打交道,写一些原始的二进制代码。
Norvig博士说:“Knuth证明了,整个计算机系统,一直到机器代码级别的所有内容都是可理解的。”当然,随着现在算法越来越深入日常的方方面面,普通程序员不再有时间去“摆弄”那些二进制的东西,而是整天与各种抽象的层次结构和一层又一层的代码打交道,经常要把从各个代码库中拿来的代码串在一起。但是,真正优秀的工程师偶尔还是会深入研究底层代码。
在加利福尼亚州山景城举行的Google Trips团队会议上,Norvig博士说:“在Google,有时我们只是把东西整合在一起,但是更多时候,如果你为数十亿用户提供服务,那么效率就很重要了。效率提高10%就可以创造数十亿美元的价值,为了获得足够高的效率,你必须了解底层的工作原理。”
Knuth博士在加州理工学院他于1963年获得了该校的博士学位,图片来源:Jill Knuth
AndreiBroder是Google杰出的科学家,也曾是Knuth博士的研究生,他在会议期间表示:“我们希望为我们正在做的事情提供一些理论基础依据。我们不希望我们的算法变得轻浮、草率或二流。我们不希望其他算法主义者说,‘你们这些家伙是白痴’”。
GoogleTrips是一款创建于2016年的应用,它采用了“定向算法”,用于绘制一天的推荐旅游活动。该团队正致力于“最大限度地提高某一次旅行活动的质量”(https://ai.google/research/pubs/pub46479),例如避免仅仅因为景点不同就将用户反复送到同一地区。他们从瑞士数学家莱昂哈德·欧拉(LeonhardEuler)300年前提出的算法中汲取灵感。欧拉希望绘制一条穿越普鲁士城市柯尼斯堡的路线,并保证这条路线只穿过科尼斯堡的七座桥各一次。Knuth博士在其论文的第一卷中论述了欧拉的经典问题。(他曾经将欧拉方法编写了一套用于控制缝纫机的计算机程序)。
遵循Knuth博士的学说有助于避免代码的堆砌。众所周知,他引入了“文学编程(literateprogramming)”的概念,强调编写人类和计算机皆可阅读的代码的重要性,尽管如今这个概念看起来似乎有点过于感性。Knuth博士甚至认为,有些计算机程序就像伊丽莎白·毕晓普的诗歌和菲利普·罗斯的《美国牧歌》一样,其可读性可以与普利策文学奖作品相媲美。
同时,Knuth博士也是一位不折不扣的完美主义者。xkcd漫画家、《万物解释者》(Thing Explainer)的作者Randall Munroe第一次听说Knuth博士,还是听其他计算机科学人士提及Knuth博士愿意给那些从他的书中发现错误的人支付奖金。Munroe回忆道,“人们看这笔奖金就像看计算机科学界的诺贝尔奖一样。”
Knuth博士严格的标准以及在文学等方面的追求,也恰恰说明了为什么他倾注毕生心血的这一作品的完成依然遥遥无期。他曾与Google联合创始人谢尔盖·布林(广义上来讲布林也是他之前的学生)打赌,看布林是否可以在Knuth博士完成他的作品之前获得博士学位。
算法的曙光
19岁时,Knuth博士在《疯狂》杂志上发表了他的第一篇技术论文《The Potrzebie System of Weights and Measures》。他在计算机科学这门学科存在之前就成为了一名计算机科学家,当时他在克利夫兰的一所学校学习数学,这所学校就是如今的Case Western ReserveUniversity。他看到了学校的IBM 650大型机(一台十进制计算机)上的示例程序,并注意到一些不足之处,于是他重写了软件以及课堂上使用的教科书。他的一个业余项目是编写计算机程序来执行统计数据,帮助篮球队赢得联赛冠军,因此WalterCronkite还称他为“电子教练”。
1981年,Knuth博士正在读1957年出版的《疯狂》杂志,里面有他发表的第一篇技术论文,发表这篇论文时他年仅19岁。图片来源:Jill Knuth
Knuth博士利用暑假期间编写编译器赚的钱比当教授一年挣的还多。编译器就像一个翻译器,将高级编程语言(类似于代数)转换为低级编程语言(有时是神秘的二进制),在理想情况下还可以在此过程中对程序本身进行改进。在计算机科学中,“优化”是一门艺术,这一点可以从另一句Knuth式的名言中看出来:“过早优化乃万恶之源。”
最终,Knuth博士自己成为了“编译器”——他在无意中开辟了一个新的领域,并称之为“算法分析”。有一位出版商聘请他写一本关于编译器的书,但最后这本书收录了他所知道的关于计算机编程的方法合集,成为了一本关于算法的书。
谈及“算法”一词,Knuth博士表示:“文艺复兴时期,人们开始怀疑算法这个词的起源。早期的语言学家试图猜测这个词的起源,认为它是从algiros[痛苦] arithmos[数字]派生出来的词汇。事实上,这个名词起源于九世纪的教科书作者,波斯人Abū ‘Abd Allāh Muhammad ibn Mūsāal-Khwārizmī(拉丁语名字是Algorithmi)”。1979年,不达目的誓不罢休的Knuth博士更是专程前往乌兹别克斯坦,到al-Khwārizmī’s的故乡朝圣。
Knuth博士刚开始写这本书的时候,并没打算写得这么复杂。但不久之后,计算机科学经历了大爆炸,所以他重新构思了这部作品并重铸成了七卷。现在他把各卷分册,接下来是第4卷第5册,其中包括“backtracing”和“dancing links”等算法,原计划出版的时间为圣诞节,但被推迟到了明年四月出版,因为Knuth博士不断发现越来越多有意思的问题,他想把这些问题都写进书中。
为了尽早完成这本书,Knuth博士一直惜时如金。自55岁退休后,他很少参加公众活动,并停止使用电子邮件。Andrei Broder回忆说,即使在20世纪80年代早期,Knuth对时间的管理也非常严格。
Knuth博士通常在周五上午约见学生,但后来他把会见时间改到了晚上,因为他可以利用这漫漫长夜在人工智能学科创始人John McCarthy的实验室中使用空闲的计算机。随着数字出版业务的推行,Knuth博士对其心血的最终呈现效果甚是不满,转而创立TeX计算机排版系统,直到现在,该系统仍然是所有科学出版物的黄金标准。有人认为这是Knuth博士对世界的最大贡献,也是自古腾堡(Gutenberg,德国活版印刷发明人)以来人类对印刷术贡献最大的人。
这项任务花了他十年时间,彼时还处于用户共享计算机的时代,而在大多数人都在睡觉的夜晚,计算机跑得更快。因此,Knuth博士改成了夜间工作,将日程安排调整了12个小时,开始了日夜颠倒的生活,并将与学生的约见改为周五晚上8点到午夜。Broder博士回忆称:“当我告诉我的女朋友周五晚上我没空,因为周五晚上10点我必须和我的导师见面时,她接连感叹‘不可思议、难以理解’。”
然而,当Knuth出现时,他一定会百分之百的投入。微软研究院的一名总监Jennifer Chayes说:“和他在一起你会很愉快。他是社区中的佼佼者,你可曾幻想过如果优化功能(optimization function)也可以兼具温暖和深度该多好。那么 Knuth 就是让这一设想成真的人。”
Knuth 与字体设计师Hermann Zapf 讨论字体。许多人认为 Knuth 博士在TeX 电脑排版系统上的工作是自古腾堡以来人类对印刷术最大的贡献。图片来源:Getty Images/ Bettmann
周日拜访小记
Knuth博士住在斯坦福,他同意我们在周日拜访他。他为此花费了一整天的时间,这很不寻常——通常他的空闲时间只有下午1点到4点的“modulo nap time”时段,就像他每天的神圣仪式一样。周末他会很早就起床,去往Palo Alto的第一路德教堂,并在这里上一节课,课上挤满了站立的人群。在开车回家的途中,他会对数学进行一些哲学上的思考。
1999年,Knuth博士在家办公| 图片来源:Jill Knuth
“我永远不可能知道一切,”他说,“但如果我对问题的答案一无所知,或者我什么都知道,那么我的生活将会更糟。”然后他带我们参观了他加州现代风格的房子,这所房子是他和他的妻子Jill于1970年建造的,Jill是一名平面设计师。他的办公室里乱七八糟地堆放着成堆的USB线,还装饰着Jill设计的情人节心形艺术品。最令人印象深刻的是音乐厅,环绕着他定制的812管风琴。在这天的最后,我们开了一场拼图派对,还喝了点啤酒。
一些笔记| 图片来源:纽约时报Brian Flaherty
拼图和游戏、写一本关于超实数的小说、创作一部90分钟的多媒体音乐白日梦《幻想曲启示录》等——这些都是他真正感兴趣的东西。他的书有一部分名为“谜题与真实世界”。他通过电子邮件将摘录发送给了艺术家MartinDemaine和计算机科学家ErikDemaine(他俩是父子,都在麻省理工学院),因为Knuth博士用到了他们的“算法解谜字体”(algorithmicpuzzle fonts)。
对此,ErikDemaine表示:“我很激动,能出现在这本书中是一种荣幸。”他提到了Knuth的另一句名言(这句鼓舞人心的话是两年一度的“算法的乐趣”会议的座右铭):“快乐也许是一直以来的主要目标。”
但Demaine博士还表示,“这个领域追求实际应用。工程师、科学家和艺术家正在联手解决现实问题,比如蛋白质折叠、机器人技术、安全气囊等,他们使用Demaines的数学折纸设计方法来将纸片和连杆折叠成不同的形状。”
当然,所有算法的繁琐性都会导致现实问题。人类编写的算法虽然可以解决越来越难的问题,但也产生了带有bug和偏见的代码,这些已经够麻烦了。更令人担忧的也许是并非人类编写的算法,而是机器通过学习后编写的算法。
程序员仍在训练机器,而且关键在于过程中向机器输入的数据(数据是偏见和bug的新领域,而且该领域中的bug和偏见更难被发现和修正)。然而,正如麻省理工学院媒体实验室研究员KevinSlavin所言:“我们现在正在编写一些连自己都看不懂的算法。这是个独一无二的时代,因为我们受到一系列物理学的思想、行动和努力的影响,这些物理学源于人类,但人类却无法理解。”正如Slavin常说的那样,“如果你是一个算法,那你将拥有光明的未来(It's a bright future, if you're an algorithm.)。”
“如果你是一个精通Knuth算法的人,那么你的未来将更加光明。”Norvig 博士补充道,“如今,程序员使用Knuth和其他人已经完成的内容作为他们算法的组成部分,然后把这些内容与他们需要的其他内容相结合。”
“AI也是一样,只是这些组合将会基于数据自动完成,而不是由程序员来完成。你希望AI能够根据数据将之前的内容组合起来,并得到良好的结果。但是你必须决定这些内容是什么。可能所有内容都出自 Knuth 作品的某一页或某一章节,因为这是完成某些任务的最佳方式。”
幸运的是,Knuth博士仍在坚持不懈地努力。他觉得还需要25年时间才能完成《计算机程序设计艺术》,尽管自1980年以来他就一直在做这件事。那么会不会有一章,或者有一页会讨论到会写算法的算法?Knuth博士对于这一点的答案是:“肯定不会!”
他解释道:“我担心算法变得太过重要。最初计算机科学家担心没有人听我们说话。但现在,我担心听我们话的人太多了。”
原文:https://www.nytimes.com/2018/12/17/science/donald-knuth-computers-algorithms-programming.html,作者:Siobhan Roberts,纽约时报记者。本文为CSDN翻译,如需转载,请注明来源出处。
“科学Sciences”公众科普分享
跋:科学传入我国整整一百年过去了,还是没有普及、被国人普遍接受。科学理论的本质是科学家用数学工具对自然社会做从出定性定量解释。近卌百年,有些民族对自然社会的思考,最肤浅地就是盲信盲从情感型表达的模糊不清的简单语言;而理性之人分析具体的现象,直到以数学等工具为主的科学思维。科学实验、科学假说,均需工程技术支撑,理论和技术均丰富了科学之躯,切不可止步于语文工具之表象思维。更不可把科技当成语文来对待,拿书本文字代替实验设计工程实践。科学是璀璨的人类文明之一,但有其范围并非万能。科学Sciences公号不持有任何倾向性,只提供大家的学术观点。感谢您的阅读!《科学Sciences》倡导"理性之思想,自主之精神",专注于学者、学界、学术的发展进步,不定期向您推荐人类优秀学者及其文章。欢迎科学、工程、技术、教育、传媒等业界专家投稿、加入数据简化社区!欢迎大家分享、赞赏、支持科普~~