82岁高龄的高德纳仍在写《计算机程序设计艺术》,那是他未完成的人生目标


程序员书库(ID:CodingBook) 猿妹编译

链接:https://www.quantamagazine.org/computer-scientist-donald-knuth-cant-stop-telling-stories-20200416/



82岁高德纳(Donald Knuth)毕生致力于讲述计算机程序有关的故事。


高德纳对离散数学十分感兴趣,于是他将自己的这份爱好融合在自己编撰的巨著中——《计算机程序设计艺术》



这是他于1962年作为研究生开始写的书集,至今尚未完成。他于1968年出版了第1卷,当前版本为第42版。第2卷在1969年出版,1973年出版第3卷。这时候他是斯坦福大学的计算机科学教授,由于担心自己的工作会影响他的书籍进度,因此,他在1990年开始请假专注于书籍编写,直到1993年退休。

按照他的规划这套书的总共有7卷,现年82岁的他还在努力完成第4卷的B分册,他预计这本书至少包含A到F部分。


《计算机程序设计艺术》不仅是操作手册,高德纳乐于用讲述计算机科学的故事。他说:“一个人和另一个人交流的最佳方式是通过故事。”

这种对沟通的热情帮助他在计算机科学的故事中扮演了另一个角色,甚至超越了他的代表作。20世纪70年代,出版社给他寄出第二卷第二版的样书时,高德纳对书中数字、符号和文字的排版并不满意,为了让书籍的排版符合自己的审美,他开发了一种计算机排版系统——Tex

他原本以为他只需要半年时间,在1978年下半年就能完成,但最终他用了八年时间,直到1985年TeX才最终停止修改,TeX可以让科学论文更加美观,更易于读者阅读和理解。

今年2月,高德纳接受了美国科技网站Quanta Magazine的采访,谈到了他创立算法分析的过程,以及《计算机程序设计艺术》4B卷的最新状态。下面我们一起来看看:


QM:您一直对写作感兴趣么?

很早之前,我觉得现实世界太难了,并没有想到自己会发现任何新事物,但是我喜欢用书面的形式表达自己对思想体会。


六年级的时候,我和几个朋友在一台复印机上写了两页纸的文章。上中学的时候,我作为报纸的编辑,每个周一的晚上我都要熬夜才能把报纸赶出来。我在大学里第一次看到过我的打印稿,是我自己的论文。在大三和大四时,我们开始进行工程和科学评审。例如,我写了“Th5E4 CH3EmIC2Al2 Ca3P4Er”。每一个字都是一个化学公式。


QM:这些是你开始写书的原因么?还是有其他原因?

《计算机程序设计艺术》是一个宣言。它描述了我喜欢做数学的方式和我希望自己曾经可以获得的教育方式。从第一页开始,我就开始讲算法的故事,当时大多数教科书都没有探索发现的人文一面。他们只会告诉你“这就是物理/化学原理”,而不告诉你为什么。

我讲了一个技术故事。我说:“这是行不通的,这里有解决问题的方法。”因此,我不仅仅是在呈现事实,而是加入一些戏剧化处理,如果你知道科学发现的顺序,那么学习科学就容易得多。而且,我无法抗拒一个好故事,同时,我也不觉得自己是一个先驱者,而是一个记者。


QM:那么,除了故事之外,《计算机程序设计艺术》是什么呢?

在写了两年的书之后,我认为它的新颖之处在于从数量上决定了一个程序的好坏。我不只是想说一个程序比另一个更好,我想说的是一个程序比另一个要好13.8%,并说明如何比较它们。

作者A谈论算法A,作者B谈论它的对立算法B,作者A从未写过算法B,作者B也从未写过算法A,作者A和作者B使用不同的计算机。作为中立的记者,选择某个角度,解释这两个问题——一个算法到底有多好?这是一个有趣的问题,这就是对算法的分析。


QM:“算法分析”是《计算机程序设计艺术》的另一种说法吗?

1967年,我在工业和应用数学学会的一次会议上,有人问我是干什么的。在那些日子里,计算机科学被划分为数值分析、人工智能和编程语言,我才意识到我需要一个名字来描述我所做的事情。

我这本书的新颖之处在于它对算法的严格研究,我决定,下次要是有人问我这个问题时,我就会回答他:“算法分析”。不过,这并不是一个很好的定义。

后来,我决定证明这一点。我认为算法分析是对算法好坏的定量研究。我将其分为两部分:其中一部分考虑了某个问题的所有可能算法;另一部分考虑了某个特定问题的特定算法。

算法分析将是我一生的工作。我告诉出版商把我的书名改成《算法分析》,出版商说:“这本书别想卖出去”。后来证明他们的决定是正确的,这本书出版40年后,有五六个版本里算法分析(作为副标题)出现了,这点我还是很开心的。


QM:但是对你来说,编程不仅仅是关于功能,例如,当你设计TeX时,你是希望找到连接某些点的更好的途径,想要更好的编程么?

我的程序必须以一种逆向工程的方式将各个点连接起来,比如字母“S”的曲率从正变到负,然后可能会保持一段时间的稳定。字母的设计者遵循一定的逻辑将线条做成字母的形状。我想要捕捉的不仅仅是设计的结果,还有它背后的智慧。这就像编写计算机程序一样。


我同设计师交谈,了解他们想要达到的目的,数学是用来量化设计的。在数学上,我给每样东西都标上刻度盘,我可以说字母“A”有这个点、这个宽度、这个角度、在那里变细、底部有确定的衬线长度。

我从来没想过要取代设计师,我只是想为子孙后代准确地记录下我们当时在做什么,使用TeX,让设计变成可复制。


QM:您有没有想到TeX在全世界被接受?

TeX一开始只属于我和我的秘书,Astrid Benson Winkler是一位的出色的秘书,能读懂我的笔迹,并把它写的很漂亮。20世纪70年代印刷技术正在走下坡路,几乎每篇发表的数学论文看起来都很糟糕,在《美国数学月刊》中,下标的字体与主线文本不同。我知道计算机编程可以使书本的排版变得更好看。

我在1978年4月完成了TeX试用版的测试,同年5月份,有了10个用户,6月份,有了100个用户,到了7月份,已经有1000个用户了。五年后,我发布了我们现在拥有的TeX。Tex最初为美国人设计的,然后欧洲人也开始使用它。到了1980年代,世界上各种语言的人都在使用它。


QM:听起来好像发现一直都是你过程的一部分,至今依然如此吗?

我平均每周5个新程序,诗人必须写诗,我必须写电脑程序。检验我是否理解的最终标准是我是否能向电脑解释。我对你说了些什么,你会点头,但我不确定我是否解释清楚了。但是计算机不会点头,我告诉它,它就重复什么。在生活的大部分时间里,你可以虚张声势,但不能用电脑。


QM:你每天都在写作,但你也有其他的兴趣,你是如何度过每一天的?

杰克·伦敦每天都要写1000字才会和别人交谈,而我不是,我的日程安排原则是,在待办事项清单上先做自己最讨厌的事情。到周末,我就会很开心。


QM:您也有许多与计算机科学无关的项目,例如您的音乐作品《幻想曲世界》,您甚至在两层高的管风琴周围建造房子。这些事情是否也使您感到快乐?

我写了几本书,其中包括一些计算机科学很少谈及的关于神学的东西,它是你无法证明的东西,不像数学或计算机科学。如果我的生活都是老生常谈的,我不了解的神秘事物让我谦逊,有些事情超出了我的理解。

在数学中,我知道什么时候定理是正确的,我很喜欢这样,但如果一切都是可行的,我的生活就不会有太大意义,这些知识不会使我失望,相反,它让我不会墨守成规。


QM:完成《计算机程序设计艺术》对你来说很重要么?

计算机科学将继续生存和发展下去。有一种情况是,所有人都停止使用我们现有的计算机。他们都将学习机器学习并使用量子计算机。然后我就可以结束非量子计算机的故事了。当我能说:“故事结束了。”的时候,这是我完成这本书最快的方式。

你知道“项狄”的故事吗?劳伦斯·斯特恩在18世纪后期写了一本自传体小说《项狄传》,以分册方式出版。关于主人公出生的第一周大约有100页,作者希望主角人生故事完整,但是他没有做到。斯特恩一直在写项狄的故事,直到他不能再写了。

我想用我所知道的最好的方式继续写下去,并涵盖那些我原创的部分,我会尽我所能去做,而不是说我必须在某个期限内完成,我很幸运,出生在这样一个特殊的时代,现在我已经实现了我所有的人生目标,除了《计算机程序设计艺术》,我现在的想法就是,不管我找到什么故事,我都会继续把它讲下去。


●编号680,输入编号直达本文

●输入m获取到文章目录