《计算机程序设计艺术》做者高德纳

原文做者:Siobhan Robertshtml

译者:UC 国际研发 Jothy前端

写在最前:欢迎你来到“UC国际技术”公众号,咱们将为你们提供与客户端、服务端、算法、测试、数据、前端等相关的高质量技术文章,不限于原创与翻译。程序员

编者按:英文原文发表于时代周刊,并不是彻底计算机领域内容,因为译者水平有限,因此有不少地方理解不当之处,还请指正。算法


提起算法大师高德纳(Donald Knuth),不得不提他这 50 年来的鸿篇巨制——《计算机程序设计艺术》。编程

半个世纪以来,斯坦福大学计算机科学高德纳已然成为算法领域的精神指南,他与 Yoda(译者注:《星战》中的尤达大师)略有类似之处 - 虽然他身高 6 英尺 4 英寸,戴着眼镜。安全

他是“计算机程序设计艺术”的做者,这是一部连续四卷的做品,是他一辈子的成就。第一卷于 1968 年首次亮相,全卷(以盒装价格约 $250 出售)被 《美国科学家》杂志(American Scientist)2013 版 列入「塑造上个世纪科学的书单」 - 与之比肩而立的是《查尔斯达尔文自传》的特别版,汤姆沃尔夫的《The Right Stuff》,雷切尔卡森的《寂静的春天》和爱因斯坦,冯诺伊曼和理查德费曼等人的著做。机器学习

《计算机程序设计艺术》发行超过一百万册,被称为计算机领域的圣经。“就像一本真实的圣经,它漫长而又全面; 没有任何书能如此全面,“谷歌研究院主管彼得诺维格说。652 页以后,第一卷封底以比尔盖茨的评介结束:“若是你能读完此书,你绝对得给我发份简历。”编程语言

该卷开篇摘录自《麦考尔的烹饪书》:性能

这是应大家的数千封信要求而出版的书。咱们为其倾注了多年的心血,检查再从新检查无数次,只求为您带来最好、最有趣、最完美的食谱。学习

书籍内部是算法,它们能够知足数字时代的需求 - 尽管正如高德纳博士所说,算法也能够在 3800 年前的巴比伦片上找到。他是一位备受尊敬的算法主义者,他的名字伴随该领域最重要的做品出现,例如 Knuth-Morris-Pratt 字符串搜索算法。该算法于 1970 年设计,能在文本中找到全部出现的给定单词或字母模式 - 例如,当你按下 Command+F 搜索文档中的关键字时。

高德纳博士现年 80 岁,他老是打扮得像个年轻的极客,正如他踏上漫长探索之旅时同样:上身穿着长袖 T 恤内搭短袖 T 恤,下身搭配牛仔裤,至少在每一年的这个时候。早些年,他还使用计算机工做,写着“原始的”代码,玩转着 0 和 1。

“Knuth 明确表示,实际上计算机系统(内部)一直到机器码级别都是可被理解的,”Norvig 博士说。固然,如今随着算法对它的策划(及破坏),普通程序员再也不有时间操纵二进制代码,而是使用抽象层次结构,逐层往上的代码结构 - 而且一般使用代码库中的代码链。即使是精英级的工程师偶尔也会深陷其中。

“在谷歌,有时候咱们作的,只是把东西放在一块儿,”Norvig 博士在加利福尼亚州山景城举行的 Google Trips 团队会议上说。“但其余时候,若是你为数十亿用户提供服务,那么高效就显得很是重要。 10% 的效率提高能带来数十亿美圆的效益,为了达到最终的效率,你必须明白其中到底发生了什么。”

1963 年,高德纳博士在加州理工学院得到博士学位 | Jill Knuth

或者,正如 Andrei Broder(谷歌杰出科学家,高德纳博士的前研究生)在会上所说:“咱们但愿为咱们正在作的事情提供一些理论依据。咱们要的不是轻浮草率甚至二流的算法。咱们不想听见其余算法专家说'大家太蠢了'“。

建立于 2016 年的 Google Trips 应用使用了“定向越野算法(orienteering algorithm)”,它能够推荐出适合某天的旅游活动。该团队正致力于“最大限度地提升最糟糕的一天的质量” - 例如,避免将用户送回同一社区,而是让他查看不一样的地点。他们从 300 年前瑞士数学家莱昂哈德·欧拉(Leonhard Euler)发明的算法中汲取灵感,欧拉但愿绘制一条经过普鲁士城柯尼斯堡(Königsberg)的路线,并知足一次性穿过城中的七座桥。高德纳博士在他论文的第一卷中论述了欧拉的经典问题。(他曾经用欧拉的方法编码了一台由电脑控制的缝纫机。)

遵循高德纳博士的学说有助于保持睿智。他以引入“文学编程”的概念而闻名,强调编写人类和计算机可读代码的重要性 - 这一律念如今看起来几乎是天方夜谭。高德纳博士甚至认为,有些计算机程序就像伊丽莎白·毕晓普的诗和菲利普罗斯的《美国牧歌》同样,是能够评得上普利策奖的文学做品。

他也是臭名昭着的完美主义者。xkcd 漫画家兼《Thing Explainer》做者兰德尔 · 门罗(Randall Munroe)第一次据说高德纳博士是从一群计算机科学领域的学者口中,据称高德纳博士会为发现书中勘误的人支付奖金。正如门罗先生所回忆的,“你们将这样的一个错误检查视为计算机科学界的诺贝尔奖。”

高德纳博士的严格标准,文学和其余方面的成就,足以解释为何他的人生并不止于此。他和谷歌的联合创始人谢尔盖 · 布林(Sergey Brin)以及之前的学生(姑且这么称呼)打了个赌:布林可否在高德纳博士完成他的著做以前完成他的博士学位。

算法的曙光

在 19 岁那年,高德纳博士在 Mad 杂志上发表了他的第一篇技术论文《The Potrzebie of Weights and Measures》。在计算机科学这个学科存在以前,他先成为了一名计算机科学家,并在如今的克利夫兰凯斯西储大学研究数学。他查看了学校的 IBM 650 大型机——一台十进制计算机上的示例程序,发现了程序漏洞,重写了软件以及教科书。他还作了一个为篮球队统计数据的小项目,编写了一个助力篮球队赢得联赛的程序 - 由此得到了 Walter Cronkite 授予的“电子教练”称号。

暑假期间,高德纳博士经过开发编译器赚的钱比当教授一年的收入还多。编译器就像翻译器,将高级编程语言(相似代数)转换为低级编程语言(有时是神秘的二进制),并在理想状况下提高性能。在计算机科学中,“优化”着实是一门艺术,克诺斯谚语中也有言曰:“过早优化是万恶之源。”

最终高德纳博士本身成了编译器,他不经意间建立了一个新的领域,并称之为“算法分析”。一位出版商聘请他写一本关于编译器的书,但最终成书涵盖了博士掌握的全部计算机编程知识 - 一本关于算法的书。

1981 年,高德纳博士正在阅读 1957 年的 Mad 杂志,该杂志出版了他的第一篇技术文章。 彼时他才 19 岁。| Jill Knuth

《计算机程序设计艺术》第 1-4 卷。 “若是你能读完整篇文章,请给我一份简历,”比尔盖茨写道 | 纽约时报 Brian Flaherty

“文艺复兴时期,这个词(Algorithm)的起源比较使人疑惑,”博士表示。“早期的语言学家试图经过制造像 algiros[痛苦] + arithmos[数字]这样的组合来推测它的产生。”事实上,高德纳博士继续说,该词最先发现于 9 世纪的波斯教科书(做者 Abū'AbdAllāhMuhammadibn Mūsāal-Khwārizmī),拉丁语译为 Algorithmi。高德纳博士从未半途而废,他于 1979 年前往乌兹别克斯坦 al-Khwārizmī 的祖先家园进行朝圣。

最初高德纳博士只打算简单写一篇文章。但不久以后,计算机科学迎来了大爆炸,所以他从新构想,并将该项目重铸为七卷,每一个子卷称为分册。下一个部分“第 4 卷,第 5 册”,包括“回溯(backtracking)”和“舞蹈链(dancing links)”,原计划于圣诞节发布。后来推迟到明年 4 月,由于他不断寻求呈现愈来愈多不可抗的问题。

为了最优化达成目的,高德纳博士始终严格规划他的时间。他 55 岁时退休,严格限制本身的公开活动并再也不使用电子邮件(至少是官方的)。安德烈 · 布罗德回忆说,即便在 1980s,时间管理也是他做为教授的鲜明特征。

高德纳博士一般在周五早上约见学生,而后在约翰 · 麦卡锡( John McCarthy,人工智能创始人)的实验室度过他的夜晚,以便自由访问计算机。随着数字出版业务的发展,高德纳博士心爱的书在页面上的效果使人震惊,他已经完成了建立 TeX 计算机排版系统的使命,该系统仍然是全部形式的科学传播和出版的黄金标准。有人把它当成高德纳博士对世界的最大贡献,以及自古腾堡(Gutenberg)以来对排版的最杰出贡献。

这个长达十年的绕道发生在人人拥有计算机的时代,而且天天晚上加速运做,而彼时大多数人都在睡觉。高德纳博士的生活是日夜颠倒的,他将本身的日程安排调整了 12 个小时,并将学生预定调整为从周五晚上 8 点至午夜结束。布罗德博士回忆说:“当我告诉个人女友咱们周五晚上不能作其余事情,由于星期五晚上 10 点我必须见到个人导师时,她表示,'这真的太太太愚蠢了吧。(This is something that is so stupid it must be true.)' ”

然而,一旦高德纳决定亲临现场,他一定百分百投入。“呆在他身边实在振奋人心,”微软研究院董事总经理詹妮弗 · 夏雷斯(Jennifer Chayes)说: “他是社区中的佼佼者。若是有一种优化功能兼有温暖与深度,那么非他莫属。”

高德纳博士与字体设计师 Hermann Zapf 讨论字体。 许多人认为高德纳博士在 TeX 计算机排版系统上的工做是自古腾堡以来对排版的最杰出贡献 | Bettmann,来自 Getty Images

与算法学家共处的周日

高德纳博士住在斯坦福,会在周日接待一位“访客”。他的这一天过得很是特别 - 通常他的空闲时间是“模除午睡时间(modulo nap time)”,即下午 1-4 点的神圣平常仪式。他很早就出发去 Palo Alto’s First Lutheran Church,为一群站立式听众提供周日课程。在开车回家的路上,他也会进行数学相关的哲学思考。

“我不可能无所不知,”他说。“若是我一无所知或者无所不知,那个人生活会更糟。”接着,他带咱们游览了他的“加州现代”房子,该房子由他和他的妻子吉尔于 1970 年建成。他的办公室里堆满了 U 盘以及来自平面设计师 Jill 的情人节心形艺术装饰。最使人印象深入的是音乐室,环绕着他自制的 812 管道管风琴。拼图派对上的啤酒宣告了这一天的结束。

谜题和游戏 - 写一部关于研究之美的小说,谱写一段 90 分钟的多媒体音乐幻想,“Fantasia Apocalyptica” - 是真正让他技痒的事情。他的书有一节题为“拼图与真实世界(Puzzles Versus the Real World)”。因为引用了艺术家 Martin Demaine 的团队和 Erik Demaine(两者皆为麻省理工学院的计算机科学家)的“算法拼图字体”,所以博士还将摘录 email 给了他们。

“我很激动,”Erik Demaine 说。“可以出如今书中是个人荣幸。”他引用了高德纳的另外一名言,同时也是两年一度的“FUN with Algorithms”会议鼓舞人心的座右铭:“快乐也许始终是主要目标。”

不过,Demaine 博士说,这个领域变得实用了。工程师,科学家和艺术家正在联手解决现实世界的问题 - 蛋白质折叠,机器人技术,安全气囊 - 使用 Demaines 的数学折纸设计,如何将纸张和连接折叠成不一样的形状。

固然,全部的算法都会与现实相关联。人类编写的算法是为了解决愈来愈难的问题,但编写带有 bug 和 bias 的代码 - 十分使人不安。或许更使人担心的是,不是人类编写的算法,而是机器学习人类编写的算法。

程序员仍然训练机器,而且相当重要的是,它提供了数据来源。(数据是 bias 和 bug 的新领域,且这些 bias 和 bug 更难找难修复)。然而,正如 M.I.T. 媒体实验室研究附属机构的 Kevin Slavin 所说:“咱们正写着人类难以阅读的算法。这是历史上一个独特的时刻,咱们受到一系列物理学的思想、行动和努力的影响,这些物理学源于人类但却难被人类理解。”正如斯拉文常常所说的,“若是你是一个算法学家,那么你的前途一片光明。”

1999年,高德纳博士在家中的办公桌 | Jill Knuth

几点说明 | 纽约时报 Brian Flaherty

若是你精通高德纳的算法,那就更是如此。“今天,程序员使用高德纳和其余人开发的算法组件,而后将它们与所需的全部其余东西结合起来,”Google 的 Norvig 博士说。

“对于 A.I. 也是如此。相组合的部分会根据数据自动组合在一块儿,而不禁程序员完成。你但愿 A.I. 能基于数据组合组件以获得结果。可是你必须明确该使用哪些组件。可能每一个组件都是高德纳的论文或书中所提到的,由于这是最佳解决方案。”

幸运的是,高德纳博士始终坚持不懈。他认为还须要 25 年才能完成《计算机程序设计艺术》,尽管自 1980 年左右以来这个时间一直不变。可能某些章节只是某种算法的变换,或者做为某个结尾页面? “绝对不会!”高德纳博士说道。

“我担忧算法在世界上变得过于突出,”他补充说。“最初计算机科学家担忧无人倾听,而如今我担忧有太多人在听。”


英文原文:

www.nytimes.com/2018/12/17/…


好文推荐:

《JavaScript DOM编程艺术》做者谈:原型代码与生产代码之间的矛盾

“UC国际技术”致力于与你共享高质量的技术文章

欢迎关注咱们的公众号、将文章分享给你的好友

相关文章
相关标签/搜索