CatCoding

Lex Fridman 播客 -- 高德纳

2022-04-03

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.

高德纳解释了一所说的计算思维,认为自己特别擅长两件事:

  1. 能在不同的抽象层之间自由切换,既能把大的问题拆分为小问题,也能在写程序的时候知道下一条指令是什么,知道寄存器里面存的是什么。所以他的书《计算机程序艺术》还是以指令级的 MIX 语言描述算法实现。

  2. 处理复杂逻辑和系统的能力,比如一个很复杂的算法有 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..


这个访谈还有很多其他细节,有时间各位去看看也挺好。

公号同步更新,欢迎关注👻