半个世纪以来,斯坦福计算机科学家唐纳德·努斯(Donald Knuth)一直是算法领域的精神向导,他与尤达略有相似之处-尽管他身高6英尺4英寸,戴着眼镜。
他是“计算机编程的艺术”的作者,这是他毕生的工作,是一部连续四卷的作品。第一卷于1968年首次亮相,收集的书(盒装出售,售价约为250美元)在2013年被“美国科学家”列入塑造了上个世纪科学的书籍名单-与之并列的还有特别版的“查尔斯·达尔文自传”、汤姆·沃尔夫的“正确的东西”、蕾切尔·卡森的“寂静的春天”,以及阿尔伯特·爱因斯坦、约翰·冯·诺伊曼和理查德·费曼的专著。
“计算机编程艺术”的印刷量超过一百万册,堪称该领域的“圣经”。谷歌研究主管彼得·诺维格(Peter Norvig)说:“就像一本真正的圣经一样,这本书既长又全面;没有其他书像它那样全面。”在长达652页的第一卷结束时,比尔·盖茨(Bill Gates)在封底写了一句话:“如果你能读完整本书,绝对应该给我寄一份简历。”
这是你的书,就是你成千上万封信要求我们出版的那本书。这花了我们几年的时间,检查了无数的食谱,带给你的只有最好的,只有有趣的,只有完美的。
里面有算法,这是数字时代的食谱--尽管,就像克努斯博士喜欢指出的那样,算法也可以在3800年前的巴比伦平板上找到。他是一位受人尊敬的算法学家;他的名字与该领域一些最重要的样本有关,例如Knuth-Morris-Pratt字符串搜索算法。它设计于1970年,可以查找文本中给定单词或字母模式的所有匹配项-例如,当您按Command+F在文档中搜索关键字时。
现年80岁的努斯博士通常穿得像他踏上这趟冒险之旅时的那个年轻极客:长袖T恤配短袖T恤,配牛仔裤,至少在每年的这个时候是这样。在最初的日子里,他紧挨着机器工作,“原原本本地”写作,修改0和1。
诺维格博士说:“努斯明确表示,这个系统实际上可以一直理解到机器代码级别。”当然,如今,随着算法策划(和破坏)我们的存在,普通程序员不再有时间处理二进制垃圾,而是使用抽象的层次结构,一层又一层的代码-而且通常是从代码库借来的代码链。但偶尔还是会有一批精英工程师进行深度潜水。
“在谷歌,有时我们只是把东西扔在一起,”诺维格博士在加州山景城的一次谷歌旅行团队会议上说。“但在其他时候,如果你在为数十亿用户提供服务,那么高效地做到这一点是很重要的。效率提高10%就可以达到数十亿美元,为了达到最后的效率水平,你必须了解一直到现在都在发生什么。“
或者,正如谷歌杰出科学家、克努斯博士以前的研究生之一安德烈·布罗德(Andrei Broder)在会议期间解释的那样:“我们希望为我们正在做的事情提供一些理论基础。我们不想要一个轻率、草率或二流的算法。我们不想让其他算法专家说,‘你们这些家伙是白痴。’“。
谷歌旅行应用程序创建于2016年,是一种“定向算法”,可以绘制出一天的推荐旅游活动。该团队正致力于“最大化最糟糕的一天的质量”-例如,避免将用户送回同一社区查看不同的网站。他们从瑞士数学家莱昂哈德·欧拉(Leonhard Euler)300年前的算法中获得了灵感,欧拉想要绘制一条通过普鲁士城市KöNigsberg的路线,这条路线只会穿过七座桥中的每座桥一次。Knuth博士在他的论文的第一卷中解决了欧拉的经典问题。(他曾将欧拉的方法应用于编写电脑控制的缝纫机的代码。)。
遵循Knuth博士的学说有助于避免愚蠢行为。他以引入“识字编程”的概念而闻名,强调编写人类和计算机都可读的代码的重要性-这一概念如今似乎几乎是老生常谈。克努斯博士甚至认为,一些计算机程序,如伊丽莎白·毕晓普(Elizabeth Bishop)的诗歌和菲利普·罗斯(Philip Roth)的“美国田园诗”,都是值得获得普利策奖的文学作品。
他也是一个臭名昭著的完美主义者。Xkcd漫画家、“物探”(Thing Explainer)的作者兰德尔·门罗(Randall Munroe)是从计算机科学界人士那里第一次了解到克努斯博士的。这些人提到,克努斯博士给任何发现他任何一本书中错误的人支付赏金。正如门罗先生回忆的那样,“人们谈论得到一张这样的支票,就好像它是计算机科学的诺贝尔奖一样。”
Knuth博士严格的标准,无论是文学上的,还是其他方面的,也许可以解释为什么他毕生的工作远未完成。他与谷歌联合创始人谢尔盖·布林(Sergey Brin)打赌,布林是否会在克努斯博士完成他的作品之前完成他的博士学位。谢尔盖·布林是谷歌的联合创始人,也是一名前学生(用这个词粗略地说)。
19岁时,克努斯博士在“疯狂”杂志上发表了他的第一篇技术论文“波特兹比度量衡系统”(The Potrzebie System Of Weight And Measures)。在该学科存在之前,他成为了一名计算机科学家,在现在的克利夫兰凯斯西储大学(Case Western Reserve University)学习数学。他查看了学校IBM650大型机(一台十进制计算机)的示例程序,并注意到一些不足之处,重写了软件和课堂上使用的教科书。作为一个副业,他为篮球队运行统计数据,编写了一个帮助他们赢得联赛的计算机程序-并获得了沃尔特·克朗凯特(Walter Cronkite)的一个片段,名为“电子教练”(The Electronic Coach)。
在暑假期间,克努斯博士靠编写编译器赚的钱比教授们一年的收入还要多。编译器就像翻译器,将高级编程语言(类似代数)转换为低级编程语言(有时是神秘的二进制),并在理想情况下在此过程中进行改进。在计算机科学中,“优化”确实是一门艺术,库恩斯的另一句谚语表达了这一点:“过早优化是万恶之源。”
最终,Knuth博士自己也成为了一名编译器,无意中创立了一个他称之为“算法分析”的新领域。一家出版商聘请他写一本关于编译器的书,但这本书演变成了一本收集了他所知道的一切如何为计算机编写的书-一本关于算法的书。
“到文艺复兴的时候,这个词的起源是有疑问的,”它开始说。“早期的语言学家试图通过组合像algiros(痛苦的)+arithmos(数字)这样的组合来猜测它的来源。”事实上,努斯博士接着说,同名的是9世纪波斯教科书作者ABū‘abd Allāh Muhammad ibn Mūsāal-Khwārizmī,拉丁语为Algorithmi。Knuth博士从来不会半途而废,他于1979年前往al-Khwārizmī在乌兹别克斯坦的祖籍进行了一次朝圣之旅。
当Knuth博士开始的时候,他打算写一部作品。不久之后,计算机科学经历了它的大爆炸,所以他重新想象和重塑了这个项目,分成了七卷。现在他发行分卷,称为分册。下一个装置,“第4卷,第5分册”,涵盖了“回溯”和“舞蹈链接”等内容,本打算在圣诞节前及时出版。它被推迟到明年4月,因为他不断发现越来越多他想要提出的不可抗拒的问题。
为了最大限度地优化他走到最后的机会,克努斯博士长期以来一直在守护自己的时间。他在55岁时退休,限制了他的公共活动,并退出了电子邮件(至少是正式的)。安德烈·布罗德(Andrei Broder)回忆说,即使在20世纪80年代初,时间管理也是他教授的标志性特征。
克努斯博士通常在周五早上预约学生,直到他开始在人工智能创始人约翰·麦卡锡(John McCarthy)的实验室里过夜,以便在电脑空闲时可以使用它们。随着数字出版的出现,他心爱的书在书页上的样子让克努斯感到震惊,他开始了一项任务,创造了Tex计算机排版系统,该系统仍然是所有形式的科学交流和出版的黄金标准。一些人认为这是克努斯博士对世界的最大贡献,也是自古腾堡以来对排版技术的最大贡献。
这一长达十年的绕道发生在用户之间共享计算机的时代,当大多数人睡觉时,计算机在晚上运行得更快。因此,克努斯博士把白天改成了晚上,把他的日程表改成了12个小时,并把他的学生预约从晚上8点改到了周五。一直到午夜。布罗德博士回忆说,“当我告诉我的女朋友,我们周五晚上不能做任何事情,因为周五晚上10点我必须和我的顾问见面时,她想,‘这件事太愚蠢了,一定是真的。’”
然而,当Knuth选择身临其境时,他是百分之百地在那里。微软研究院董事总经理詹妮弗·查耶斯(Jennifer Chayes)说:“和他在一起会让你很开心。”“他是社区里的佼佼者。如果你有一个优化功能,在某种程度上是温暖和深度的结合,唐就是它。“。
克努斯博士住在斯坦福大学,允许周日来访。他抽出一整天的时间是不寻常的-通常他的空闲时间是“模数午睡时间”,这是一个神圣的每日仪式,从下午1点开始。到下午4点。他很早就开始了,在帕洛阿尔托的第一座路德教会,他给只有站立的人群上了一堂主日学校的课。开车回家时,他对数学变得很有哲理。
“我永远不会知道一切,”他说。“如果我什么都不知道答案,如果没有什么我不知道答案,我的生活会糟糕得多。”然后,他提出参观他和他的妻子吉尔于1970年建造的“加州现代”房子。他的办公室里散落着成堆的美国棒子,上面装饰着平面设计师吉尔的情人节心形艺术品。最令人印象深刻的是音乐室,围绕着他定制的812管管风琴而建。在一个益智游戏聚会上喝着啤酒结束了这一天。
拼图和游戏,以及写一部关于超现实数字的中篇小说,以及创作一部90分钟的多媒体音乐白日梦“幻想曲启示录”,都是真正让他发痒的东西。他的书中有一节的标题是“拼图与现实世界”(Puzzles vs.Real World)。他通过电子邮件向麻省理工学院(Massachusetts Institute Of Technology)的艺术家马丁·德梅因(Martin Demaine)和计算机科学家埃里克·德梅因(Erik Demaine)的父子团队发送了一份摘录,因为克努思博士把他们的“算法拼图字体”加进去了。
“我很激动,”埃里克·德梅因说。“能出现在这本书里,我感到很荣幸。”他提到了Knuth的另一句话,这句话是一年两次的“算法的乐趣”会议的鼓舞人心的座右铭:“快乐可能一直是主要目标。”
但德曼博士说,后来,这一领域变得实际起来。工程师、科学家和艺术家们正在合作解决现实世界的问题-蛋白质折叠、机器人技术、安全气囊-使用德梅尼夫妇的数学折纸设计如何将纸张和连杆折叠成不同的形状。
当然,所有的算法繁琐也造成了现实世界的问题。人类编写的算法-解决越来越难的问题,但产生嵌入错误和偏见的代码-已经够麻烦的了。也许更令人担忧的是不是由人类编写的算法,即机器在学习过程中编写的算法。
程序员仍在训练机器,最重要的是,向它提供数据。(数据是偏见和错误的新领域,这里的错误和偏见更难找到和修复)。然而,正如麻省理工学院媒体实验室的研究人员凯文·斯莱文(Kevin Slavin)所说,“我们现在正在编写我们无法阅读的算法。这使得这是历史上一个独特的时刻,因为我们受制于一系列没有人类理解的具有人类起源的物理学的想法、行动和努力。“。正如Slavin经常指出的那样,“如果你是一个算法,这是一个光明的未来。”
如果您是精通Knuth的算法,就更是如此。谷歌的诺维格博士说:“今天,程序员使用Knuth和其他人做的东西作为他们算法的组成部分,然后他们把这些东西和他们需要的所有其他东西结合起来。”
“有了人工智能,我们就有了同样的东西。只是组合部分将根据数据自动完成,而不是基于程序员的工作。您希望人工智能能够组合组件,以根据数据得到好的答案。但你必须决定这些组成部分是什么。每个组件都可能是Knuth的一页或一章,因为这是完成某些任务的最佳方式。“。
那么幸运的是,Knuth博士一直在坚持。他估计还需要25年才能完成“计算机编程的艺术”,尽管这一时间框架自1980年以来一直是恒定的。编写算法的算法会不会有自己的一章,或者后记中的一页呢?“绝对不会,”克努斯博士说。
“我担心算法在世界上变得太突出了,”他补充道。“一开始,计算机科学家担心没有人在听我们的话。现在我担心太多人在听。“