Donald Knuth: Algorithms, Complexity, and The Art of Computer Programming
我最近比较迷 Lex Fridman 的播客,发现他早期还做了很多期技术方面的访谈,而且请到的嘉宾都是些祖师爷级别的人物,比如 Donald Knuth、Bjarne Stroustrup、James Gosling、Brian Kernighan。
Donald Knuth 是有中文名字的:高德纳,1977 年访问中国前所取。
高德纳参加了两次 Lex Fridman 的录播,我看的这期是第一次,在他自己的书房里录的。这个采访非常长,我当作英语听力练习来听,断断续续听完了。
早期经历
高德纳回忆了 1957 年开始编程时候使用 IBM 650 的情景,这机器尺寸巨大,但是内存只有 4000 bytes,需要打孔纸卡 Punched card。这算是第一个量产的计算机,IBM 当时只是租给大学使用。高德纳那时候刚好是大学新生,他在这台计算机上熏陶了自己的计算思维。
计算思维
接着聊计算思维 (或是 Geek 思维),他曾经提到根据经验推算只有 2% 的人有类似自己的计算思维 ,而他的书就是为这些人准备的。
I always try to keep a potential reader in mind – basically somebody who is reading my book because they want to, not because they must, and somebody who has a natural ability to do computer programming. Only about 2 per cent of the population really “resonates” with programming the way I do; but somebody ought to write books for that 2%, and I try to be one of the authors who does so. Instead of trying to impress the reader with what I know, I try to explain why the things I’ve learned impress me.
高德纳解释了一所说的计算思维,认为自己特别擅长两件事:
能在不同的抽象层之间自由切换,既能把大的问题拆分为小问题,也能在写程序的时候知道下一条指令是什么,知道寄存器里面存的是什么。所以他的书《计算机程序艺术》还是以指令级的 MIX 语言描述算法实现。
处理复杂逻辑和系统的能力,比如一个很复杂的算法有 10 来个 case,而每个 case 都在处理不同的逻辑,很多数学问题是基于一两个很通用的规则的,所以他比纯的数学家善于处理更复杂的系统。
我上学的时候买过他的《具体数学》,工作后也买过《计算机程序设计艺术》,都是潦草看了几章就吃灰了。看来我可能不属于这 2% 😭,面壁中…..
我看汇编和复杂的数学公式就有点头晕。最近无聊时测试了一下 MBTI,我属于 INTP,这还算是很适合做程序员这类职业的性格特征。也许我对细节和数学抽象都达不到某个深度,但是并不妨碍我做一个应用层的程序员。
高德纳也谈到虽然大家都为了鼓励新手说人人都能学会编程,但是从自己的经验来说,他有一些领域自己非常感兴趣,而且也按照合适的方法练习,但始终都不能达到某种程度,很多领域要达到精通确实需要天分。
文学编程
在文学方面,高德纳喜欢托尔斯泰,比如《安娜卡列尼娜》这本书不仅讲述了好的故事也带有一些哲学讨论。
他于 1980 年左右提出了文学编程的概念,用近乎自然语言的形式来实现程序。他认为文学编程像是一种 informal 的方式写程序,而使用编程语言是 formal 的方式,同时用两种方式思考对于技术写作非常有用。
My life is a convex combination of english and mathematics
机器学习
机器学习使用数据来训练模型,数据和算法都非常重要,高德纳说这看起来是非极客的方式,他很难完全相信这些算法,因为即使是搞机器学习的人,有时候也不确定算法到底从数据中学到了什么,但机器学习的方法确实扩大了算法的适用范围。
写作流程
接着高德纳描述了自己典型的写作流程,他会先在纸上把初步的想法和算法写出来:
然后站起来在屏幕前修改初稿,平均每周会写 5 个左右的程序,他会看目前该领域新的算法和论文,还会尝试自己去写程序,因为只有通过写程序验证了之后才算是彻底理解,完成算法实现后就开始写最终版本的初稿,顺便出一些数学习题给他那些数学好的朋友们做,把那些他们能完成的当作书本的习题。
插个八卦,我以前的老板是 Formal Verification 方面的研究者,他说有一次他收到了高德纳的邮件,咨询他论文里的一些细节问题。高德纳写的《计算机程序设计艺术》可以说是计算机算法领域的百科全书了。
P = NP
高德纳倾向于相信 P = NP,但认为即使是成立也可能没有现实意义。额,这段他解释了很多,但是我有的没太听懂细节,以后再学习一下 NP 相关知识。
人工智能
高德纳坦诚自己对人工智能可能不像该领域里的人那么乐观,他觉得现在这些人工智能都是假装有“理解”,和真正智能存在巨大的鸿沟。他有些担心,人们如果真的相信自己制造了的人工智能 — 假装的东西真到一定程度就会让人产生这种幻觉,那就是危险。
面对死亡
其中有一段感觉谈起如何面对死亡,听起来有些伤感,高德纳在 2006 年被诊断出患有癌症,后来做了手术,最初的一段时间内他无法正常工作。
然后他觉得自己应该抓紧时间了却自己一直想做的事。年轻时高德纳就非常热爱音乐,曾经还纠结过是否选音乐专业,如今还有个愿望就是自己作曲,所以他抓紧时间成了这个夙愿,还在 80 岁左右开了音乐会。
高德纳觉得自己整个人生非常幸运,一直在做自己喜欢的事,而且也已经完成了人生中的大部分目标,剩下的愿望就是继续完成已经写了 50 年的《计算机程序设计艺术》。
Fex 最后一个问题:当你到了天堂碰到上帝,你会问什么问题?
他回答到:
What kind of browser do you have up there…. I hope we have a good Internet..
这个访谈还有很多其他细节,有时间各位去看看也挺好。