﻿Donald Knuth 访谈（2006）
===========================

这是 CSLI 出版总监 Dikran Karagueuzian 对这位先生所做访谈的转录稿，2006 年录像。版权归 Web of Stories Ltd. 所有（2006 年），但他们网站上的转录版简直没法读；这是本人做的一次整理。

全文约 63,000 词，读下来大概要三四个小时；如果打印出来，约 110 页。

欢迎提交改进排版、纠正错误的补丁。不过请别重新回填段落——那会制造无谓的合并冲突。

我知道**很多人会讨厌这些随机的粗体字**。但访谈和任何即席讲话的记录一样，并不是真的按标题、小标题之类组织的。粗体是我用来标出每段主要话题的办法，方便读者快速浏览、找到某个具体话题。

[1 - 家族历史](http://webofstories.com/play/17060)
--------------------------------------------------------

如果往前追得很远，你追溯到我的 16 位**高祖辈，在 1840 年他们应该全都在德国，但到 1870 年就全在美国了**。所以你要考虑所有不同的支线。我母亲这边、我父亲这边——我祖系里 Knuth 这支算是最多样化的。他来自石勒苏益格-荷尔斯泰因（Schleswig-Holstein），离丹麦边境很近，他是最后一批移居过来的；是在 1860 年代的石勒苏益格-荷尔斯泰因危机期间；我想大概是 1864 年，他从军队里开小差了，他不想跟普鲁士人打仗，决定来美国，一天夜里敲窗户告诉父母"我走了"，最后落脚在伊利诺伊州，然后干活、学着当铁匠。

他后来的妻子是他到美国后认识的。她——她家更早就从汉诺威（Hannover）一带过来了，她住在印第安纳州，都离芝加哥地区很近，所以那支家族来自德国的另一个地区。我母亲这边，他们全都是在 1840 年代移民过来的，是**现在所谓下萨克森（Niedersachsen）一带的农民**；德国有个小镇叫**巴德埃森（Bad Essen）**，她家就来自那里，过来后成了俄亥俄州克利夫兰附近的农民。所以呢，背景就是这样：我父亲这边围绕芝加哥，他出生、长大都在那儿；我母亲这边来自俄亥俄州克利夫兰，她在那里出生。

我父亲第一个教书职位是在克利夫兰，他就是在那里遇到我母亲的。然后他接到一个去密尔沃基的召唤，那里离他们家任何其他人都很远，因为那是新空出来的一个职位，所以他去了，在一个需要老师的学校接下这份工作。

[2 - 学识字与上学](http://webofstories.com/play/17061)
---------------------------------------------------------------------

一切始于威斯康星州密尔沃基，**1938 年，我出生了**。我对生命最初几年毫无记忆，但从父母保存的记录里我知道，那时他们教我认字的方式挺不寻常。他们所有的朋友都说，不该在正式上学前让我读太多书，不然上学后会无聊；可我当时——我想我是密尔沃基公共图书馆里最年轻的"书虫"吧。

这就是我从过去得到的第一条消息，因为他们保存了一张剪报。我想大概是**两岁半，我就成了密尔沃基图书馆的书虫**。等我进了学校，记忆就更多了；我上的是我们教堂附近的一所小学校。

**我父亲在那里当老师**。他毕生的事业是在路德宗教会学校体系里做教育工作者，薪水没什么可说的，我记得大概每月十到十五美元。但那是一个很温暖、充满爱心的社区。我们对世界上发生的事基本一无所知，却很幸福，是个安稳、适合成长的好地方。我读一年级时，父亲是二年级老师；之后他升迁了，我读二年级时他成了四年级老师；我读四年级时他是六年级老师。最后我读六年级时，他转去教高中了，所以幸运的是，我从来没被父亲当过老师。

这所学校大概有二十、二十五来个孩子，我们的老师数理化不算强，但英语相当不错。比如我记得读七年级时，我们几个同学放学后留下来做句子成分分析；就是拿书本之外的英语句子，弄明白哪个是主语、哪个是谓语、短语怎么嵌入——老师激励我们大量了解英语这门语言。到我们上高中时，那里的高中老师其实对英语懂得并不多，所以那也是我记忆中唯一无聊的时段，因为高中要教的东西我们早就全都会了。

**我去的高中，又是一所路德教高中**。在这些学校工作的人，像我父亲一样，是当作一种使命来做的，他们把当好老师视为毕生召唤，所以我们遇到的是真心关心我们的人；他们做这份工作不是因为它是份工作，而是因为他们觉得这是对世界的一项重要服务。有人认为教会学校是教人偏狭的地方，让你只能欣赏和你一样的人什么的——但完全不是那样。我觉得我们经历非常好，而且，**有一位老师对黑人有点偏见**，但他是个另类，我们根本不理会他。

所以那真是一种很好的成长方式，不过从任何意义上说都不是世界一流，没有什么特别的知识或出奇之处。

我想我当时挺爱耍贫嘴，常常坐在教室后排讲笑话，**老师们确实不太喜欢我那种态度**。不过他们学会了容忍，我也没怎么挨打。

学校里的音乐也很好，供唱歌用；而且我们自由度很大。我记得我们有一个四五人的朋友小圈子，读五六年级时开始做点小项目，比如弄到一台磁带录音机（那是 1940 年代），试着给假想的广播节目写脚本，**假装我们在电台**，然后录成小节目。

我和朋友们**办了一份校报**，叫"**Newsweak**"，当然拼写是 W-E-A-K。报上我们讲学校里发生的事，也翻用了很多从书里看来的老掉牙笑话，还有个谜题页之类。那是我**第一次写东西的经历**；如我所说，那所学校英语教得好，所以从很早开始，我就接受了大量与语言相关的训练，还有机会做点像这些小短剧这样的创作。

[3 - 我的母亲](http://webofstories.com/play/17062)
---------------------------------------------------

我该说说我母亲，她在我生命里当然也极其重要。在当年她也很不寻常，因为她有一份好工作。**我的父母**在全家、在我们整个家族史上，**是第一批接受过一些教育的人**。父亲上过芝加哥的一所师范学校，母亲受过一两年秘书培训，做的是法律秘书。

二战期间，她在密尔沃基市中心为一个人工作，那人拥有并管理着城里好几栋摩天大楼；她成了他的私人秘书，后来又做了其中一些物业机构的受托人；他去世时，她干得相当出色，还被请去担任其中一栋楼的管理者。所以**她这辈子就在密尔沃基做房地产**，管着市中心的那些大型商业楼。她是从我五六岁时开始做这份兼职的，但家里其余一切也照旧是她做。

不过，我的祖父——曾祖父是铁匠，祖父——我两边祖父都是做建筑和维修的。**家里并没有教育传统，我绝对是家里第一个**接受高等教育的人。这当然部分是美国的写照，越来越多的人上大学；但我上高中那会儿，我的同学里我记得大概只有 7% 或 8% 上了大学，当时那已经算相当不错了。

[4 - 我父母的财务](http://webofstories.com/play/17063)
--------------------------------------------------------------

我想我可以再多说点父母的财务。当然**他们是在大萧条时期结婚的**，我父亲初到密尔沃基时的第一份工作，一年后他们决定每月给他减薪 5 美元，还告诉他这是让他学会节俭，对他有好处什么的；教会也一直为筹款发愁，但**我们家一直到 1951 年才有汽车**，那时我都上七年级了。

我们那时候才第一次自驾，去了俄亥俄的我母亲娘家。在那之前，我们一年才坐一两次火车，伊利诺伊或俄亥俄的亲戚也难得来看我们。

我父亲总是骑自行车上班；我母亲嘛，**密尔沃基公共交通很好，事实上那是一座非常安全的城市**；和现在完全不同，现在因为毒品之类的东西完全变了；可我小时候，无论白天黑夜几点钟，我都能放心坐有轨电车去市中心。现在你这么做是在拿命冒险。没有哪个家长会让孩子做我们当年做的那些事。

有次我坐有轨电车——我不记得多大了，大概四五年级吧——坐车去了市中心，**去了公共图书馆**，开始看书；我不知道图书馆要关门，灯灭了，我就走到一扇窗边坐下继续读；最后人们——我父母那边还在纳闷我出什么事了，怎么还不回家？

不过图书馆有人找到了我，就在书架间看书呢；但你知道，当年人们依然不会太担心让孩子满城跑，所以我母亲坐有轨电车去市中心上班，我们也从没想过要买车，直到父母终于能用父亲教书之余接点零活攒下的钱买得起为止。

他会——他和朋友们凑在一起，**投资股市，买他们所谓的"便士股"**（penny stocks）。你能买到各种矿业公司的股票。他遇到一个人——我想是在那种叫什么来着？澡堂？就是公共浴池，可以去洗热水澡的地方——遇到一个人，把他介绍给科罗拉多州搞矿业的人，于是他们决定用这法子挣钱。

现在这些股票凭证我全继承了，拿来**当墙纸挺好**，可它们**完全没用**。不过其中有一只股票表现不错，叫 Silver Bell 矿，后来我们真去了趟科罗拉多，看了那地方；最终那股票卖给了联合石油（Union Oil），赚了一点点。另外**我父母买了迪士尼（Walt Disney）的股票**，一路翻倍上涨。

靠着努力工作、存钱——我妈一辈子都这样；她活到快 90 岁，从没退休，一直在做房地产，哪怕到了 80 多岁，市中心还给她留了间办公室，她每周能去三四天——她既往银行存钱，又是个慷慨的人，捐慈善什么的，**到她去世时竟攒下了超过 100 万美元的家产**。这**让所有人都吃惊**，包括她自己。

不过我父亲是那所高中的记账员，所以上过几门会计课；他花了大量时间填我们现在叫电子表格的东西，一直盯着股票的那些小额交易。我觉得有意思的是，看看**他们仅仅靠做负责任的公民，就给自己挣来了体面的生活**，那是那个年代我们国家的写照。这种个人责任感是我一直视为理所当然的，因为我是从我父母那儿得来的。所以在我脑子里从来没有别的活法。

[5 - 高中时代的兴趣（上）](http://webofstories.com/play/17064)
---------------------------------------------------------------------------

回到高中，我主要的活动……那所高中叫路德教高中，到我高三那年它分成了两所：密尔沃基路德教高中（我上的这所）和威斯康星路德教高中。

**1956 年我毕业**；同样，那里的老师算不上世界一流意义上的专家，但他们始终真心关心我们的成长。

我后来成了数学家，但当时在高中我对数学其实没多大兴趣，因为我去问老师问题，他们答不上来。我甚至能证明一等于零，他们找不出证明里的错，所以你瞧，我又怎么能对数学提起劲来呢？所以我当时主要的兴趣在音乐，也在物理。

我的化学/物理老师是个很棒的人，他自编教材，自己设计化学实验，我很敬佩他；他鼓励我多想想物理。不过课外我把大部分时间都花在音乐上。

事实上，我——我跟高中合唱团一起弹钢琴，我在合唱团唱歌，我在乐队里，吹萨克斯，也吹大号；我还参加了密尔沃基全市乐队，也就是交响管乐团。**我写音乐**，我为乐队编曲。那时候我还是《**疯狂杂志**》（*Mad Magazine*）的铁杆粉丝。

还有 Roger Price，如果有人记得 Roger Price 的话——他写过一个短篇叫《米尔顿与犀牛》（"Milton and the Rhinoceros"）。于是我用普罗科菲耶夫《彼得与狼》（"Peter and the Wolf"）的音乐，配上《米尔顿与犀牛》的歌词，做了个改编。当时我很天真，对版权什么的一无所知，所以**我拿普罗科菲耶夫的音乐为乐队配了谱，又用 Roger Price 的词**《米尔顿与犀牛》，做成了一段大约二十分钟的曲子，给我们高中乐队演出。我得意地把它交给乐队指导，结果他给弄丢了，我再也没见过。

所以我不知道它到底好不好，反正就是这样。

[6 - 高中时代的兴趣（下）](http://webofstories.com/play/17065)
---------------------------------------------------------------------------

我还**办了校报**，我是报纸编辑；高三那年我每周一晚上都通宵，整夜不睡，早上七点把报纸赶出来。我们没有什么专业制作手段，所以我是用油印机印的——这东西现在完全过时了——它用很油腻的油墨；我用它是因为我家碰巧有一台。

我父亲给密尔沃基一位建筑师做兼职，打印规格说明，靠这个挣点外快来补贴微薄薪水；他还用这台机器给当地唱诗班排字排版乐谱。所以这台机器在我家，还有他（也许是我母亲）的一台电动打字机，总之家里都有，**我就能在家印校报**了，不用担心复杂的排字；我们有很多记者，我自己也写点专栏，比如填字游戏之类。所以高中时**我在课余做了大量写作**。

我还编年鉴和其他出版物；我和朋友们写剧本，由高中里的团体演出。那是一段开心的时光。不过我可以说，人生那段我基本上像一台机器——我是说，我就是吸收、记住东西，应付考试，能得**满分**就得满分，而不去坐下来品味生活里更细的东西。我是个听话的孩子：该上学，Don，就去上学；该学习，就学习；一边在这些写作项目里找点乐子，但**除非是布置的阅读，我真的不会主动读书**。

我记得有时我也读书——**我读得很慢**——比如查尔斯·狄更斯的《荒凉山庄》（*Bleak House*），六七十章，我读得太久，只好拿它交两份读书报告而不是一份；而且，**直到我 30 多岁**，我才真正找到世界上一些伟大的文学作品，为了乐趣去读。

高中时嘛，我想我还算一台相当成功的机器，因为他们说我的……在那些年代，他们不单给 A、B、C 这样的字母分，而是给数字分：考试时他们算平均分，批改作业，一切基于百分制；他们说**我的平均分超过 97.5，创了学校纪录**，以前没人达到过。所以那时我相当是**书呆子中的书呆子**。

[7 - 我的幽默感](http://webofstories.com/play/17066)
-----------------------------------------------------------

比起怀疑论、愤世嫉俗，我更愿意说是讽刺性的，或诸如此类。

卡拉古兹安：讽刺性的。

克努特：反正这就是我喜欢《疯狂杂志》的原因，它是对当时种种"神圣的牛"的那种疯狂讽刺。所以高中时我和朋友们一发现它，就一页页地狼吞虎咽，我们对《疯狂》爱得发疯。在此之前，如我说的，我只会讲老掉牙笑话；但我和朋友们倾向于爱耍贫嘴、不太把事当真。

虽然我说自己像台机器，但我确实也爱笑。所以给报纸写东西时，我们总有笑话专栏；年鉴里我们也塞了意想不到的趣事。如你所知，这个我一直带在身上；现在**我书里索引中有很多老掉牙笑话**，人们大概还没发现；但会有人问我，为什么《TeXbook》里会有 Bo Derek 的索引项？原来索引里所有引用 Bo Derek 的页面，都是我用数字"十"的地方。一路下来，我一直有这种傻气的倾向，意味着我不会把一切都看得太严肃。

[8 - Potrzebie 度量衡制与 Alfred E. Neuman 填字游戏](http://webofstories.com/play/17067)
------------------------------------------------------------------------------------------

既然聊到《疯狂杂志》，我不妨提一句，**我高三那年做了个项目**，提交给威斯康星科学院——不，先提交给了西屋科学人才选拔赛（现在叫英特尔科学人才选拔赛之类），那是一项全国性竞赛；项目叫"Potrzebie 度量衡制"。这是《疯狂杂志》里很流行的一个波兰词，我决定基于它搞一套会比公制更好的度量衡系统。它以《疯狂杂志》第 26 期的厚度为基础，把那个厚度定为一"potrzebie"长度。然后我们有，一千个那是"kilo potrzebie"，一百万个是"fershlugginer potrzebie"，一百万分之一是"farshimmelt potrzebie"。这个系统里有时间单位、重量单位，什么都有。

它在这个科学人才选拔赛中**获得了荣誉奖**，我还在科学院做了些演示；在威斯康星得了奖。我把它寄给《**疯狂杂志》，他们发表了**，付给我 25 美元；它登出来时正逢我大学一年级春天。这是我的第一篇技术性作品，所以它列在我的简历上，第一篇作品就是 Potrzebie 度量衡制；后来它又收在《疯狂》的一本平装重印集里。我还拿它作为大学里竞选学生会主席的基础，结果惨败，我没选上。

我还给《疯狂》寄过一个续篇，是个填字游戏。他们有个 Alfred E. Neuman 形象，出现在大量文章里——那个缺了颗牙的傻男孩的脸；我一看他的牙，能看到白方块和黑方块，让我想到填字游戏。于是我在他额头和头发的地方加了些白方块、黑方块，填成**一个带《疯狂》式谜面的填字游戏**，比如"blank, me worry?"之类。我寄过去，他们拒绝了，不想要；不过我还留着它。等到我们后来说到写作那部分，我还指望着有朝一日出版一本叫《乐与游戏论文选》（*Selected Papers on Fun and Games*）的书。到时我们不但会重印我第一篇关于 Potrzebie 系统的技术文章，也会把那篇被《疯狂》拒掉的也印出来，让读者自己判断当初他们拒稿是否明智。

是啊，我喜欢看到事物既在框内，也在框外。

[9 - 渴望证明自己](http://webofstories.com/play/17068)
--------------------------------------------------------------------------

有人问我父母，要不要让我跳级，因为我学得好。而他们——其实我是一月出生的，这意味着**我比班上大多数孩子都大**，因为要是我十二月出生，就会早一年上学，所以我是班上最年长的之一；我父母呢，那时候很多孩子都被往前提，我一个朋友，本该进高中的年纪就从大学本科毕业了。

不过我很高兴他们顶住了，因为这样我才有了做所有这些课外活动的时间，所以我总是同时忙着很多事情。**体育方面，我是糟糕透顶的运动员**。我个子高，但左手不知道右手在干什么，所以我只在已经落后 50 分之后才有机会上场；可我是记分员。

我是顶呱呱的记分员，所以我成了高中、乃至大学许多**运动队的经理**。我是越野队经理、篮球队经理、棒球队经理，**就这么当上了"六七个项目的老队员"，而实际上什么运动都做不来**。

但篮球赛时我就坐在记分台那儿，嘴上喋喋不休，**把另一个记分员搅得晕头转向**，让他搞不清楚：如果有人问犯规的是谁，我能告诉他们犯规算在谁头上，而我的依据是**把犯规记在对我方最有利的人头上，而不是真正犯规的人**，因为我这么一说那家伙早被绕晕了。不过说实话，我觉得我在记分台并没赢多少场球，但我就是那个随队记分的人。

所有这些课外活动，我有时间去做的原因，就是我父母没让我跳级，所以我能既在功课上表现出色，又参加很多其他活动。

话说回来，我在学校干得不错，可内心**仍有自卑情结**。我总在努力证明自己。我心想，也许我没真正弄懂吧；实际上我大概是在拼命学习、考**满分**，因为我在**努力证明我懂**。你要真是过分自信，根本就不会费劲去学习。这就是一个孩子眼中的世界：我总怕自己干不好，所以拼命用功。

有意思的是，我被咨询大学报什么时，学校里每个人都考了一大堆全国性测试，其中一个是职业测试，就是你适合干什么工作？我记得**根据那个测试，我该当建筑师**，而不该当兽医。我的兽医技能得分低得离谱，但建筑师看起来是被推荐给我的职业道路。

我还赢得了好几所大学的奖学金；可我们高中的那位副校长把我叫进去，他说：**"Don，我觉得你上大学会是个失败者"**。他说，你在高中干得不错，可大学完全是另一回事，对你来说负担太重，你撑不住的，你成不了。唉，**他又把我吓着了**，所以我一进大学就继续拼命学习。

其实就在上大学前一周，那位学生院长，不管是谁吧，跟我们说。我上的是克利夫兰的凯斯理工学院（Case Institute of Technology），当时它还没和西储大学（Western Reserve University）合并。我去了凯斯，凯斯的院长对我们说——那是个男子学校——"小伙子们，看看你左边的人，再看看右边的人。你们三人中有一个明年就不在这儿了；**你们有一个会不及格。**"所以我一到凯斯，又是成天学习，在功课上极其用功，为此我不得不像台机器。

我那本微积分教材——高中时，如我说的，我们的数学课程很弱，**我到大学才第一次听说微积分**。但我们那本微积分教材很棒，书后有补充习题，老师不布置那些题。老师会布置——那是个很有名的微积分教材，作者叫 George Thomas；我特别提到它，因为它是最早一批由 Addison-Wesley 出版的教材之一；我太爱这本微积分书了，以致后来我选 Addison-Wesley 来出版我自己的书。

Thomas 的《微积分》正文后面有习题，我们老师会布置，比如偶数题之类。**我还会把奇数题也做掉**。书后有补充题，老师不布置补充题，我也把它们做了。我害怕自己学不会微积分，所以很用功；结果自然是，一开始我把所有这些题都解完花的时间，比那些只做布置题目的孩子要长。但一年之后，我做所有这些题的速度，已经和我同学做布置题的速度一样了；**此后我在数学上就能轻松滑行了**，因为我学会了怎么解题。所以害怕是件好事，它让我起步很猛，然后就能滑行，而不是一直爬坡、一直处在学习曲线的低处。

[10 - 我为什么选择凯斯理工学院](http://webofstories.com/play/17069)
--------------------------------------------------------------------------------------------

如我所说，高中时数学对我就是一团乱。可到了凯斯，老师们——化学老师似乎还懂点化学，但对物理和数学一窍不通；物理老师懂物理和化学；而我的数学老师三门全懂，我对他极其敬佩，因为他看起来真的很聪明，而且极难取悦。无论我怎么给他看我在微积分上的进展，他好像从没被打动过，这让我很沮丧。**我从没遇过一个我打动不了的老师**，所以我更拼命学数学。不过他很有幽默感，他叫 Paul Guenther。两年后我终于能稍稍打动他了，这很好。于是我培养起了对数学的兴趣，但我得往回说一点。

我选大学时，赢了好几份奖学金。一份本来是印第安纳州瓦尔帕莱索大学（Valparaiso University）的，跟路德教会有联系，但到那儿我可能会主修音乐；另一份是克利夫兰凯斯的，在那儿我主修物理。因为我母亲娘家在克利夫兰，她知道凯斯标准很高，她认识的人里没几个能考上凯斯，它被看作最难进的学校之一。顺带一提，**很多年后我才听说 MIT**，更别提加州理工（Caltech）了。但对我说来，**凯斯是个挑战**，是真正要我拼命用功的地方；而瓦尔帕莱索，我轻轻松松就能应付——音乐对我来说容易得多。我决定去迎接挑战，去凯斯；我被录取进了一个专为新生设的班，叫"荣誉班"（Honors Section），我们 20 人每门课都由系主任亲自教。所以我的物理老师、化学老师、数学老师和英语老师，都是凯斯最好的。

[11 - 大学生活：我的篮球管理系统](http://webofstories.com/play/17070)
-------------------------------------------------------------------------------------------

我相信那是他们头一次这么搞，我也不确定这实验持续了多久；老师们——他们管我们叫荣誉班，意思就是**我们 20 个人一起上所有的课**，而其他学生往往混着上课。我觉得其他学生并不都像我们这样，周一、周二、周三同一时间。我上的课呢，我想他们也稍微比对待其他学生挑战得多一点。

不过我仍有时间做校报之类的事；那时上凯斯一个重要的问题是**要加入兄弟会**。校园里大多数有趣的活动都围绕兄弟会体系展开，所以大一那年我也申请入会，这个我后面可以多说点。

不过我说过，我大一春天《疯狂杂志》的文章发表了；后来，我当了**我们创办的一份杂志的编辑**，叫《工程与科学评论》（*Engineering and Science Review*），专写科学话题；我也给那份刊物写了篇关于 Potrzebie 系统的文章。我参加音乐活动，也打篮球，我是**凯斯篮球队的经理**。

关于这个我多说几句，因为后来我接触计算机之后，把这件事和篮球队管理结合了起来。我设计了一个奇怪的公式——现在我自己都不太信了，但当时我信——用它能**算出每个球员对比赛的真实贡献**。

不只是他得的分数、投中的篮，而是把一切都考虑进去。比如篮球里，如果你有球权，那是有价值的。事实上，看篮球比赛时，如果给持球方分数加一，能更公允地反映比赛的真实比分。所以**球权大概值一分**。赛后你可以算：真正有多少次，你拿到球权后真的失误、丢球了，或者那一回合你真正得了多少分？于是你能算出球权可能只值 0.7 分之类。但总之，球权有价值。所以如果你丢球，你就让自己的队损失了一分，或 0.7 分，那对你就是负分。如果你断球、抢回一次失误球，你就有收获——你的队获得了球权，所以你因断球得分。

如果你投中一球——那个年代只有两分，还没有三分球——但如果你能投中，你得两分，可**你的队也失去了球权**，对方获得球权，所以你投进一球并不真正为自己的队赢得两分：你得了两分，但得减去你必须重新夺回球这件事。

所以最终，按我的公式，所有球员贡献之和就等于我们队赢或输的分数。但评分会是——如果有人投篮不进，有时我们队抢到篮板，有时对方抢到，所以投失一球你要扣一点点。于是**我为每个球员算了海量的统计数据**，我有个观察员会喊给我听，我把每件小事都记下来；赛后我去打孔卡片，记录所有这些数据，**喂给一个小计算机程序**，算出公式，为每个球员列出一张表，显示他们真实的对比赛贡献——而不只是投篮命中率那些传统统计。

凯斯的教练 Nip Heim 很爱这套系统，他把这些数字贴出来；凯斯的新闻处又很会往本地报纸上投有趣的稿子，所以他们派记者来，我们讲了这套公式，IBM 听说了。于是**IBM 派了摄影师、摄影组**来拍我观赛记分——我们凯斯队当然在打篮球——然后拍我怎么打孔、怎么放进 IBM 电脑。他们给 IBM 电脑拍照前，先在机器上挂了个巨大的 IBM 牌子，让谁都一眼看到是我在做这事；然后我转动控制台上的按钮，把数字弄出来，在 IBM 打印机上打印出来，教练看着、贴起来。

这是段两三分钟的小电影。IBM 把片子提供给 CBS，他们把它放进沃尔特·克朗凯特的《周日夜间新闻》，**我在佛罗里达的所有亲戚都能在电视上看到我**。这太激动了。《美国新闻与世界报道》（US News and World Report）也登了篇报道。这就是我在凯斯时，计算机和体育之间的纽带。这也是 IBM 很巧妙地把广告塞进来的法子，虽然有点隐晦，但挺好玩。

那是我第一次体会到当电影明星有多难，因为我每个镜头都要走六遍，**把那些卡片一遍又一遍地打**。所以我想，奥黛丽·赫本拍到第六条怎么能还那么美呢？

[12 - 大学生活：兄弟会体系](http://webofstories.com/play/17071)
---------------------------------------------------------------------------------

在凯斯，如我说的，**我申请加入了兄弟会**。这是——我来之前见过几位在密尔沃基的凯斯毕业生或凯斯学生，他们说：哦 Don，兄弟会是最要紧的事，你去了一定要极其认真对待。反正吧，当年的兄弟会体系也许和现在有点不一样。它当然有利有弊，但它绝对是我在凯斯生活的重心，因为大一之后我就住在兄弟会里，和我的兄弟们住一块。

头一件事就是我们所谓的"地狱周"。训导？我是说，**整人（hazing）**。抱歉，忘了我说的"训导"。整整七天，在我们成为正式成员之前，我们所有申请人都任由其他兄弟摆布，他们拿着木板；我们还被剥夺睡眠；基本上还要打扫兄弟会房子，**我就是那时候学会了用氨水、刷墙**、擦洗墙壁，还有补屋顶之类的事。可与此同时他们还会——他们打网球，拿我们当球，把我们打得很疼；还做别的事来确保我们知道：他们掌权，而我们此刻无足轻重。

**这在现在是违法的**，但它**相当于我的新兵营**，我想；你知道，我从来没服过兵役。而那一个星期，我真的成熟了很多。过了那一周，我熬过来了——这一次，我获得了从未有过的自信。所以**很难说我不希望自己的儿子也经历同样的事**。我想他从来没经历过，但依我看这事很矛盾。总之，那是加入兄弟会的一部分。我有一张他们结束时给我拍的照片，胡子拉碴、看起来很狼狈，但心里知道自己是熬过了一场考验。我心里一直有个疑问：要怎么用一种合法的方式，把这种磨砺真正传授给别人。现在我们都会被告上法庭。

[13 - 遇见我的妻子 Jill](http://webofstories.com/play/17072)
---------------------------------------------------------------

在兄弟会里，我最好的朋友也在凯斯的荣誉班，他叫 Bill Davis；顺带一提，他现在是俄亥俄州立大学的数学教授，很活跃于在线数学教学。总之**大一时 Bill 和我是莫逆之交**；大二我们又都加入了 Theta Chi 兄弟会，一起熬过地狱周，在兄弟会宿舍里住隔壁。

于是**我开始和一个西储大学的女生约会**，她叫 Betsy，她的室友叫 Jill；**Bill 在和 Jill 约会**。当时——嗯，Betsy 是天主教徒，我是路德教教徒，我们觉得家里永远不可能理解；但我还是觉得 Betsy 相当了不起。不过**我也在和一个叫 Becky 的犹太女孩约会**，她父亲在克利夫兰开百货店；**我也约会过一些护士**；凯斯周边有很多女孩出没。可我主要感兴趣的是这个 Betsy。我和 Bill Davis 跟他女朋友 Jill 一起出去过四人约会；如我说的，Betsy 和 Jill 是室友，Bill 和我是室友。

所以我琢磨着，怎么才能和 Betsy 更进一步呢？我决定**跟 Jill 吃个午饭，请教她**。这大概是——我大二那年，大二春天吧；结果**她那么会倾听、那么会出主意，我反倒开始约会 Jill 了**。嗯，我不确定 Bill 有没有原谅过我，但她其实并不怎么喜欢他，她说，咳，反正吧。

反正最后和我订婚、结婚的是 Jill，**我们现在结婚已经 45 年了**。Jill 和我是从图书馆开始约会的，我们常一起在那儿学习；我发现，**我第一次真正享受亲吻，就是吻她的时候**。高中时我连跟女生接吻都害怕，哪怕她们站起来我也不敢。

我是说，我高中约过一个大概四英尺半高的女孩，名字我记不清了，但我记得她真的很可爱，因为我**一直喜欢矮个子女生**，她们似乎**没那么容易摔倒**，平衡感好；而我个子高。可她是啦啦队员，站在自家台阶上，撅起嘴唇，我想我总得吻她吧，可我从没干过这事，我该怎么办呢。

后来我吻了，但**直到大二吻了 Jill，我才知道亲吻可以那么美好**。

[14 - 大学里的查经与一段个人挑战时期](http://webofstories.com/play/17073)
-----------------------------------------------------------------------------------------------------

我整个学生时代大概都不算那种很潮的人。我记得那时**Jill 和我**开始深入了解彼此，我们周日一起去教堂。她是卫理公会教徒，我们**去她教堂的主日学查经班**。我小时候上的是路德教学校，从没上过主日学。我们平时上课就有《圣经》内容，那周日我何必再做别的事？我平时已经受够了宗教。可她上的是公立学校，她的传统是周日上午去学《圣经》，所以我跟她去教堂，学了些东西。

大学里，我接触到了很多**无神论者**，以及各种宗教背景的人，这和我此前的经历完全不一样、完全陌生。于是**我经历了一段个人挑战时期**，我在试图回答：我到底相信什么？在那之前，我只是听老师的话、通过考试、做被期待的事；可关于"有没有上帝、如果有，怎么解决与上帝相关的各种悖论"，我内心有所体悟。

这种经历主要发生在大学一二年级，之后我才渐渐安于自己内心接受的那些儿时所受的教诲。我确信，如果我是另一背景出身，结果会完全不同。而我个人现在相信，上帝以多种方式活着；我确实相信，**上帝以某种神秘的方式参与着我们的宇宙**，这支撑着我的很多作为。我也知道，我永远无法证明它；但我庆幸自己无法证明，因为一旦被证明，我想我会对整件事失去兴趣——没有了神秘，也就没有了兴趣。

所以，如人们所说，我的宗教成长就发生在这段时期，发生在我遇见未来妻子的当口。

[15 - 凯斯的课外活动](http://webofstories.com/play/17074)
------------------------------------------------------------------------------

我参加了**很多运动队**，越野队、棒球队。那时候我们能随队去很多地方，那也很有意思。我做了很多工作，我是这份杂志《工程与科学评论》的**创刊编辑**；还积极参加各种其他活动，比如我是**兄弟会的副主席**。

有个关于校报和我兄弟会的故事，我不妨提一提。我会去克利夫兰市中心，那里在做校报的排字，**那是我第一次接触莱诺整行铸排机（Linotype）**，见识了真正的印刷是怎么做的。起初我是文字编辑，所以在最终付印前检查文本里的错误；我注意到有一篇关于我们 Theta Chi 兄弟会圣诞前派对的报道，说我们供应了热黄油朗姆酒。嗯，我忽然想到，兄弟会派对其实是不该供应朗姆酒的；可那是莱诺机，你每改一处都要花钱，而且改动只能限一行，要是得重排好几行就更麻烦——所以**我把它改成了"热黄油爆米花"**。那篇报道这么改也讲得通。

那段时间我在写作、出版上积累了更多经验。我们大一时英语系主任当我们的老师，后来大二大三的西方文明课老师也都很好，所以那阵子我一直在写作：给……写故事，写学期论文，也写校园刊物。我开始相信，**我的教育归根结底就是 50% 数学、50% 英语**，50% 是写作技能，而把我生命中其余的这一切组合起来，某种意义上是这两样东西的混合。

事实上我参加的课外活动太多了，凯斯有个叫"荣誉钥匙"（Honor Key）的东西，是基于积分的。参加乐队得多少分、加入兄弟会得多少分（这个很少）、当然办报纸得分、参加唱诗班合唱得分、参加其他校园活动得分；**你攒够一定分数就能赢得荣誉钥匙**，毕业那天学校会提到赢得凯斯荣誉钥匙的那四五个学生。结果呢，我攒够了分，三年就攒够了；我想我的**荣誉积分比凯斯历史上任何人都多**，所以我又成了机器，心里说："哦？这个有分？好，那我得做。"我就去报名。所以我参与了海量课外活动。

我也有机会写点音乐。我为兄弟会写了部五分钟的音乐喜剧，在某个叫什么的年度活动上演出——哦，我忘了叫什么了；那是每年一次，每个兄弟会都要演个短剧。叫"校庆日"（Varsity Day）还是什么，我不记得我们怎么叫了。我们会去克利夫兰市中心一家剧院，给愿意来听的人演。我**写了这部五分钟的音乐喜剧，叫《Nebbish Land》**，基于 nebbish——当时贺卡行业很流行这种形象。乐谱我现在还留着，所以也许我会把我那本书《乐与游戏》里的部分音乐放进去。

[16 - 在凯斯修研究生课程](http://webofstories.com/play/17075)
--------------------------------------------------------------------------

在凯斯我花了很多时间做课外的事，但在课堂上，我找到了一个真正聪明的法子——让我现在这么吹嘘一下——**避免在课上花太多力气**。首先我注意到，大二上学期我的成绩开始下滑。我把它归咎于在宿舍里打太多乒乓球、打太多牌；不，抱歉，是**我大一学年下半学期**，成绩开始出问题，所以我只好放弃乒乓球。

但从大二——大三年开始，我发现你可以在凯斯修研究生课程，而且它们**比本科课程还容易**。原因是凯斯对本科生入学要求极严，但对研究生相对宽松。我想他们是想扩大研究生招生吧；所以班上有了研究生，他们通常懂的还没本科生多，因此你选研究生课，竞争就没那么大，老师还会把内容翻来覆去讲。所以我开始选研究生课，而那些出类拔萃的本科生就去选别的课。

结果到毕业时，我攒下了一大堆研究生学分。于是呢，凯斯在毕业那天做了**一件史无前例的事，他们同时授予我硕士学位**和学士学位。这是全体教员聚到一起、全票通过的决定；我记得这又上了当时的报纸，说他们同时颁发硕士和学士学位。原因就是我去修了那些研究生课，因为它们更容易。**这事我以前恐怕没对任何人讲过**——这就是我能做那么多别的事的原因之一。

[17 - 物理、焊接、天文学与数学](http://webofstories.com/play/17076)
--------------------------------------------------------------------------------------

我一开始学物理，后来也一直学物理；如我说，我很喜欢我的数学老师，但我是物理专业。大二我遇到另一位很好的物理学教授，开始学**量子力学**，还上了天文学课；另外有门课，我不知道该叫它什么，反正是门实验课。

所有**物理专业学生都必须会做焊接之类的活**。而我做实验向来很**差劲**：化学实验我总最后一个做完，还会打破烧杯、把化学品弄到手上烧到，甚至弄出火来；很糟糕。可等我上了这门焊接课，要我**焊接，简直是灾难**。我看不清——我戴着挺厚的眼镜，焊接时必须戴护目镜，可护目镜套不进我的眼镜，所以我没法同时戴眼镜和护目镜。

于是我坐在那儿，戴着的护目镜让我看不清，手里是那几千几千伏的电焊设备，要焊材料；可工作台比我低很多，我个子挺高，所以我得远远地伸着手拿着这东西，要把东西焊在一起——每次我把一个东西接上另一个，老师一拿起来，它就因自身重量散架了。所以**我焊接课不及格**。而且它**还吓死人**，你想，那么多电流在那儿，而我又没法……

我的天文学课，我发现它非常令人沮丧。我能通过所有考试，事实上**我的天文学课**每次考试都考了 100 分，但**背地里我讨厌这门课**。我决定继续上下去，作为一种**自律**，因为我不想让老师知道我讨厌这门课。我想，我不能只学自己喜欢的东西，也得学会做自己不喜欢的事。所以我极其认真地准备天文考试——可我为什么不喜欢它呢？

我琢磨着，我想纯粹是因为我无法想象……天文学和数学差别太大，在天文学里你永远没法真的飞到太阳上去，知道那儿到底是什么样。你得到的永远是二手信息。要是当个天文学家，我可能到死都什么也确定不了——这是千真万确的，因为它**全都基于推测**，全都建立在我们对宇宙最合理的猜测上，没有任何东西是你真正能亲身经历或证明为正确的。物理也一样，自然超出我们的掌握，你无从知晓。

但数学不同。**数学有一种确定性**：你能解完一道题，然后说，我知道我得到答案了。所以我喜欢这个。**它容易**，容易得多。我不得不敬佩那些科学家，他们穷尽一生也未必知道自己解没解决问题，只能得到支持或反对的证据。但对我而言，无论如何，数学越来越有吸引力，因为它给了我某种确定性；**这恰恰和宗教吸引我的理由相反**——宗教没有确定性。我是说，一个什么都不确定的人生让我不快，而什么都确定的人生也一样。两种极端，对我都难。

[18 - 我在凯斯的数学老师和一道难题](http://webofstories.com/play/17077)
-------------------------------------------------------------------------------------------

我渐渐转向数学。还有另一个原因。我们的数学老师是个非常古怪、也非常严厉的人，我**第二年的数学老师**同样难以取悦，他在凯斯名声很大，因为**几年前他让整个班都不及格**。他断定他们谁也没学到东西，给全班都打了 F，所以 Louis Green 是凯斯的传奇。

我大二上他的课，叫"基础数学"（Basic Mathematics），教材是他自己写的。那门课讲的是些离散的东西，跟物理学家研究的那种连续的东西不一样。肯定是我成长的方式里有什么东西，让**整数**对我更有吸引力。我是说，现在人人都知道，这和计算有关。当然那时**计算机还不存在**，或者说几乎不存在。

我稍后会多谈我第一次见到计算机；但眼下，在 Louis Green 的"基础数学"课上，我开始接触不同于微积分的一种数学。一天他给全班出了一道题，说："这道题我估计没人解得出——**如果谁解出来了，我这门课直接给你 A**。"这道题呢——我可以把题目说出来——他说，给一个数学式子加括号，如果你有五个变量 A、B、C、D、E 的式子，**有多少种办法往里面加括号**，让你每次只把两个东西结合？

所以你可以说，把 AB 括起来，再括 C，然后 D 或 E；或者先从 B 和 C 开始，和 A 结合；方法很多。那么如果你一开始有 *n* 个变量，用括号来结合，一共有多少种办法？顺带一提，这正是现在计算机科学家心头至爱的东西，因为我们把它叫做**带 *n* 片叶子的二叉树的数量**。但 Louis Green 是作为一道挑战题给我们的，问我们能不能确定这个数。谁解出来，他就给谁 A。

嗯。我至今不知道他当时自己知不知道答案，但我后来查明，**这个答案在 18 世纪就发表过**，历史悠久。这些数如今非常有名，我一个朋友，MIT 的 Richard Stanley，为这些数找到了 **128 种不同的解释**，加括号只是其中一种。他把那 128 种都收集齐了。事实上我有幸去年在瑞典和他一起时发现了第 128 种，不过，那是后话。

我大二那年，Louis 给我们出了这道题；我们都知道 Louis 的名声，所以想，**何必在这题上费劲？他绝不会出一道我们真能解出的题**，干吗浪费时间去弄这傻东西？可结果呢——我当时在乐队里，不是橄榄球队，**我们乐队要去底特律演出**，是周六的橄榄球赛；**可我误了巴士，起晚了**。我醒来发现巴士刚开走去了底特律，而我原本盘算着要去底特律浪费一整天呢。

所以我想，行吧，我就来想想 Louis 那道不可能的问题，花这一天琢磨 Louis Green 的这道难题。**我运气不错，想出了答案**，写在两张纸上，周一早上交上去；他看了一遍，周二说：**"好，这门课给你 A。"** 所以我还是物理专业，却修了他的数学课；那学期剩下的课我都没去上，他也守约，给了我 A。

事后我有点内疚逃了课，第二年便去当他的课程助教。不过——我刚才要说啥来着？**那个夏天我转成了数学专业**，因为焊接那档子事，也因为我发现数学是我真能证明、真能证明其正确性的东西，这吸引我。不过我也没有特别用功学数学，因为我已经拿了 A，而 A 正是我在大学成绩里想要的东西。

[19 - 我对图形的兴趣与第一次接触计算机](http://webofstories.com/play/17078)
------------------------------------------------------------------------------------------------------

我是怎么进入计算机领域的？我在凯斯有一份奖学金，但它没覆盖全部学费，只覆盖一部分，所以我找了份兼职。我父母没钱，我在**统计系找了份兼职**。我做的其中一件事是操作卡片分拣机，一台 IBM 卡片分拣机，那东西挺迷人。你把打孔卡放进去，机器把它分进不同的口袋，你按某种顺序取出来，然后看结果，画图。所以我给统计系画图。

我该趁还想着这个，多说几句图形。高中时有一个夏天，我花时间……我对数学里的**图形这个想法着迷**：变量 X 变化时，Y 是 X 的函数，你把那个位于轴上方 Y 单位的点画出来，就构成一幅图。因为我喜欢视觉的东西，我着迷于这个想法：我能不能从一幅我想要的图出发，找到一条方程，当你把方程画出来时，就得到那幅图。所以我在图形上琢磨了很久。高中有个夏天，我画了几百几百张图：我取一条像"根号 X 加 5x 减某某"这样的方程，然后把图画出来。

**我父亲有台小计算器**，能算平方根，它还真能打印出来。他是会计，所以它会打印在纸带上，我能开这台机器，让它帮我做乘法什么的；然后我有了这个函数，我会说，别用 X²+5x 了，也许我改成 X²+4x，也画那张图，直到我明白不同图形长什么样。

高中我没学过微积分，也不知道微积分，但我确实知道怎么给方程作图，这让我着迷，所以我在这上面非常用功；事实上在我那种橙色图纸上画得**我开始头疼**，对眼睛很不友好，我想我大概就是那时候开始戴更厚的眼镜的，因为我埋头画图。但这给了我一些关于图形的经验，我那时就喜欢这种数学，哪怕在高中。

于是我在凯斯找到第一份兼职，要我给统计学家画图，那挺好。分拣机楼下就是一台新计算机，当年人们叫它"电子大脑"，那是第一台被**量产**的计算机，叫 IBM 650 型；历史上**第一台量产计算机**，造了一千多台。在那之前，任何计算机最多也只造过几十台。

这台计算机大约在我凯斯大一学年中段运到，就放在我工作的统计实验室楼下的房间里。我能透过窗户窥视这台计算机，闪烁的灯光让它看起来挺刺激。一天一个家伙看见我隔着窗子看，**他请我进去，给我解释这台机器怎么工作**，我特别着迷它竟能做出和我父亲那台机械计算器完全不同的事。

于是我看**这台机器的操作手册**，很快地，他允许我打孔卡片送进机器；我那时会操作分拣机，但如今我能打出一张真正构成计算机程序的卡片了。就这样，我开始了解这台机器的内部。

[20 - 在 IBM 650 上学习编程（上）](http://webofstories.com/play/17079)
------------------------------------------------------------------------------------------

我读了 IBM 带来的手册，手册里有示例程序；我想出了比那更好的写法。我想：嗯，这个程序能跑，但要是这么写，会更好。于是这给了我一点信心，也许我有编程的天赋。如今看来，**如果手册里没有那些糟糕的示例，我大概不会对编程感兴趣**，因为那样我就没有这份信心，会吓得说：哦，我永远想不到这些。但事实是，手册相当蠢，正是这个给了我信心，让我觉得该多想想编程，因为我可能——我可能挺擅长它。

所以大一时我开始学点计算机；后来我申请加入兄弟会，一个兄弟有个要解决的问题，他在**求五次方程的根**。我听说过一个叫"贝尔解释系统"（Bell Interpretive System）的程序，看起来用这个解这道题不太难；他呢，自己也不想动手，所以为了这位兄弟，我写了个**能替他完成一道作业题**的东西，而且第一次跑似乎就对了。现在我都觉得难以置信，但据我所知，它确实对了。

他很高兴；我也和计算中心的那些人走得更近，他们开始让我夜里用这台 IBM 机器。于是在大一和大二之间，我在**计算中心找了份兼职**。说真的，他们允许我们编写别的学生、别的人会用的软件。

我写的第一条计算机程序是这样的：我得求一个数的质因数。你在机器的控制台上拨号，那上面有旋转开关，你可以把开关设成某个数，比如 100，它就会打出来：100 等于 2×2×5×5。所以我们**求你在控制台开关上拨出的那个数的质因数**。

那份程序我现在还留着一份副本。最初它有六七十条指令，两周后程序能正确运行了，变成了约 130 条指令；我想期间我**删掉了 200 多个错误**。我不仅学了编程，还学会了犯错误。你想，能出什么岔子呢？总之，当时我对编程懂得其实不多，但通过这道求质因数的练习，我学到了海量东西。

[21 - 在 IBM 650 上学习编程（下）](http://webofstories.com/play/17080)
------------------------------------------------------------------------------------------

我学到了一些具体的东西，比如：**这是一台十进制计算机**，它不用二进制，而用十进制，有十位数；我还能学到——它也非常慢，这台机器的除法指令要花 4 毫秒，我觉得现在大概是 4 纳秒，换句话说**现在的机器快一百万倍**。但按今天的标准它慢得惊人，所以你每秒做不了多少次除法。

我求质因数的方法就是试除：能被 2 整除吗？不能。能被 3 整除吗？不能。能被 4 整除吗？不能。直到找到一个因数。那么你取一个没有任何因数的最大十位数，**这个程序要跑很长很长很长的时间**。所以我必须做的一件事是让它快一点。不要除以 2、3、4、5，如果它不能被 2 整除，就不会被 4 整除，我可以跳过偶数。

我不得不做诸如此类的事。然后，一旦我试到五位数除数，就能停了；当时我一开始还不知道这个道理——我没意识到，其实我不必试尽所有可能的数，因为**如果它有任何因数，最小那个因数必然小于等于你要看的那个数的平方根**。我想我最初以为是"小于"，后来发现得把程序改成"小于等于"。

有个最微妙的 bug，我费了好大劲才搞定：要是那个数有很多很多质因数怎么办？结果存在这样的十位数，**一张答案卡只能打八个质因数**，所以我得改程序，因为你可以有 30 多个质因数；我得让程序不只打一张答案卡，而是最多能打四张。

总之，我只是在解释为什么这个求质因数的小程序当时对我如此有教益。我是在大一快结束时做的；我被允许**整夜坐在机器旁，转刻度盘、按按钮**。凯斯对本科生有一种极其开明的态度。他们允许我们直接去碰计算机、什么事都自己做、通宵工作、在房间里睡觉、写全校其他人都会用的程序。

而斯坦福的理念完全不同。**在斯坦福用计算机，我后来才知道，他们有 IBM 派来的专业人员**——那些科学家替你处理：你把作业交给他们，他们放进机器跑，你第二天取结果。

凯斯则是全员上手，允许我们自己做这一切，而且**他们不担心我们会弄坏机器**；我们学会了打开面板，处理卡纸、卡卡什么的，还能自己接线板之类。我们是新生又怎样？没关系。我想当时凯斯和达特茅斯是仅有的两所如此开明、允许本科生摆弄机器的大学。

[22 - 写一个井字棋程序](http://webofstories.com/play/17081)
------------------------------------------------------------------------

所以我在计算中心找了份暑期工，那年夏天就没回密尔沃基，只短暂回去一趟。这**发生在我遇到我之前说的那些女孩之前**，也就是大二之前。所以**我只有计算机作伴**。我的第二个程序是把十进制数转换成其他进制，那个做得挺快。

**我的第三个程序**是我那阵子花时间最多的：**玩井字棋**。我后来得知很多计算机科学家都研究过井字棋：Charles Babbage——那位名人，19 世纪在英国就筹划造一台能下井字棋的机器；Danny Hillis 用 Tinker 玩具搭过一台下井字棋的机器，进了波士顿的计算机博物馆。总之，我决定写个计算机程序来玩这个儿童游戏，这有点挑战。

我没用 Tinker 玩具，但 IBM 650 有另一个有趣的特点：它不但是十进制的十位数机器，而且总共只有 2,000……等等，总共多少？2,000 乘……大概五字节？所以**有十 K 字节的内存**。如今你要没有十 GB——哦不，十 MB——你就死定了。没有几百兆你根本装不了微软 Windows；可当年我们总共只有 10,000 字节。

而我想让它跟我下井字棋。我写了三个版本。一个是专家版，我预先设计了一套我知道肯定对的策略。第二个版本是什么？我不记得了。第三个版本最有趣，是**学习版：机器一开始一无所知**，靠经验学习。它记住井字棋盘上所有可能出现的位置，刚好勉强装进十 K 字节；每次它下棋，如果输了，它就说：哦，我走的这几步不好，对方走的几步好。如果赢了，它就说：我的棋好，对方的不好。所以它会调整；它为**每个位置保留一位数字**，一开始是四，赢了可能变五，输了变三。然后如果有不同的走法，它会优先试排名高的那些。这个程序我写了一个月，从摆弄中我学到很多。

之后**我让学习程序对阵专家程序**，用专家程序去下、去训练学习程序。专家要下多少次？我想大概 120 局之类，然后学习程序就学会不输给专家了。

井井棋是种挺无聊的游戏，因为你真会玩的话，每局都是和局（cat's game），没人赢。但那之前挺有趣，走错棋时尤其刺激。所以我说：好，现在我让两个学习程序对弈。**让学习程序对阵学习程序**，两个一开始都对这游戏一无所知；起初它们的每一步都完全盲目，跌跌撞撞，但最后总有一方碰巧赢了、碰巧输了，于是它们的策略就变一点。

结果，大概 350 局之后，它们学会了打保守牌，互相和棋。它们最终打的是一种很沉闷的棋，走稳妥的棋而不是高明的棋。但对我而言，写这个井字棋程序是很好的学习经历。

[23 - 认识符号最优汇编程序与内部翻译程序（上）](http://webofstories.com/play/17082)
---------------------------------------------------------------------------------------------------------------------------------

那年夏天，我家人去了伊利湖岸边的一个夏令营，待了一周，叫 Linwood。我几年前重访过，为了怀旧。总之它在沙滩上，我们待了两周；我和舅舅们打网球什么的，但**我也随身带了一两个我听过的计算机程序示例**，所以在夏日住所有空就研究这些程序。这对我日后的人生影响巨大。

其中一个程序是所谓的汇编程序（assembler），意思是你不必用机器语言写，而可以用更符号化的语言写，更容易——我是说，我刚开始编程时，**只用数字编程**。所以如果我想把位置 1 的数加到位置 2 的数上，就得写什么 20,0,0,1 之类；我得**把这些数字都写出来、打到卡上**，让它能跑。我刚开始编程时就只会这个。

但汇编程序当时是新鲜事物，它让我用一种更易懂的方式来写。**不必为程序里每个位置选一个数字，我可以给它一个名字**，机器会算出那个名字对应的数字。那时候计算机处理字母不太好，机器更偏向数字，但允许我们用大写字母；在这个汇编程序里，一个词可以用五个大写字母。我清楚记得给井字棋程序用这个时，我得想个五字母的词来指代程序当前某部分；我满心欢喜地记得，我的井字棋程序要赢的时候，会跳转到位置 BINGO。所以我可以用五字母词 B-I-N-G-O 来代表程序那部分。

好，那阵子我在学符号汇编程序，我拿到了代码，用它；但**我一直在想它是怎么做到的**？你那个写着 BINGO 的符号，怎么就变成了机器直接能懂的数字？背后发生了什么？所以我拿到了这个程序的清单，它叫 SOAP Two，作者是 IBM 的 Stan Poley。

我还带了另一份清单，来自一个叫 IT 的程序，即"内部翻译程序"（Internal Translator）；这是个新程序，来自卡内基理工学院（后来的卡内基梅隆大学），由卡内基的四人编写。IT 用的是**代数语言**，而不是机器语言。所以你写的是——这还很早，早于 FORTRAN 或其他高级语言。我说的是 1956、1957 年。这里的想法是，你可以写 X=A+B。啊，其实**你没法真这么写，因为我们没有加号**，所以我们实际写的是：X1、Z、X2、S、X3，其中 S 代表加号，Z 代表等号；每个变量都是 X1、X2、X3 之类。但总之，你可以在卡片上放一个代数式子，机器会据此算出怎么计算 A+B 并存进 X，或者做任何你想要的事。

所以不是数字式的，也不是数字式的符号版，而是代数式的：你把 IT 语言的程序放进计算机，它闪一阵灯，然后卡、卡、卡地打出来，给你机器语言，即计算机的语言。简直是魔法。我**完全猜不出这怎么可能**，所以我弄到一份他们用来编写这个 IT 翻译程序的程序副本，还有一份 SOAP 程序——符号汇编、符号最优汇编程序（Symbolic Optimum Assembly Program）的副本。

[24 - 认识符号最优汇编程序与内部翻译程序（下）](http://webofstories.com/play/17083)
---------------------------------------------------------------------------------------------------------------------------------

我把它带到夏日住所，花了好几个晚上研究、琢磨这个程序是怎么工作的。哇，我发现——首先**我搞懂了 IT 是怎么工作的**：哦对，原来它们能这样解析代数式并转成指令。但它的风格很糟，程序很笨拙。你读它，**他们每做一件事，都选最费劲的法子**。我再看 SOAP 程序，Stan Poley 那个，**它优雅、漂亮，就像听一首交响乐**。它每执行一条指令，那条指令都同时干两件事，一切都和谐地咬合在一起，那是优雅的代码。

我说，天哪，我真想像这位老兄那样写程序。反过来，那个笨拙、蹩脚的代码，哎，我能写得比它好。所以**我和两三个朋友一起改进了 IT，起名 RUNCIBLE**；那时候每个程序都得有个首字母缩略词，RUNCIBLE 是"Revised Unified New Compiler IT Basic Language Extended"之类。我们对 R-U-N-C-I-B-L-E 这套字母多少有理由。但我们主要是想用更优雅、功能更多的办法重写那种代数语言，在很多方面改进它，同时仍塞进我们的十 K 字节。

我计算中心的第一个夏天就是这么过的。RUNCIBLE 做完后，我们还——我写了份用户手册，讲怎么写、怎么用这个程序；有趣的是，这份用户手册第二年竟被用作学生的教材。所以**我大二时处在一个不寻常的境地：修一门我自己写了教材的课**，那是我计算机类的一门课。

后来第二年夏天我们修订了 RUNCIBLE，加了很多花哨功能，仍在十 K 字节内，但我们加了**浮点附件**和一些别的东西，所以我和朋友做出了更好的版本。

另外**我也写了 SOAP Three**。我很喜欢 IBM 那个 SOAP Two 程序，所以我写了 SOAP Three，它改进了 SOAP Two，并被用作我们其他软件开发的汇编程序。于是凯斯让我们大约十二个**本科生**编写软件，而这些软件**被凯斯其他学生和教员使用**；Fred Way，这个项目的负责人，很有远见，能信任学生、允许他们……我们在一起聊这些话题聊得特别开心，我们做了——

新出的文献期刊——《ACM 通讯》（*Communications of the ACM*）创刊于 1958 年。突然间我们看到，世界上其他角落有人在发表关于怎么写程序的想法；我们知道**我们自己也早已发现了其中许多东西，而且我们的某些成果更科学**。所以我继《疯狂杂志》的 Potrzebie 系统之后，**我的第二篇技术作品**就是关于 RUNCIBLE 的，讲我们用在 RUNCIBLE 里把公式转成机器码的方法。我把稿子投给《ACM 通讯》——这份杂志我们刚、刚刚开始看；我那时完全天真，对学术期刊或发表惯例一无所知。

我见过杂志，我知道杂志是什么，但**没有"署名/功劳"这回事**，只有故事本身才重要。所以写这篇文章时，我把自己当成凯斯计算中心那帮一起创造 RUNCIBLE 的伙计们的代言人、发言人。于是**我写了篇关于 RUNCIBLE 所用方法的文章**。通篇没提那些一起干活的伙计们的名字，**我也不知道自己会因这些想法获署名**，我只是想描述这些想法。所以，这是——我后来对科学发表惯例懂得更多了，但当时我不过是个记者，把那当成一条新闻来写。**几年前这篇文章收进我的论文集时，我们把这事澄清了。**

[25 - 给 RUNCIBLE 增加更多功能](http://webofstories.com/play/17084)
---------------------------------------------------------------------------

那时候，计算和现在完全不同：不只内存小得可怜（只有十 K）、速度慢，而且我们写程序的方式——也许正是因此——如今我绝不会那么写，因为**为了塞进这小内存，我们不得不耍一些几乎无法理解的把戏**，因此极容易出错。

但我们很早就学到的一件事是：**你软件的用家总会提出新功能要求**，而且永不满足。你给他们十样，他们还要十样；所以我们不断加功能、加功能。现在这叫"蔓延式功能膨胀"（creeping featurism）。但我们只有这台小机器，在没有空间的情况下怎么塞进越来越多的功能呢？答案是，我们用越来越多的技巧。

所以在 RUNCIBLE 这个编译程序里，有**四个编译版本**。你可以让它为带所谓**浮点附件**的机器生成指令，或者你的计算机可能没有浮点附件，所以你要么有浮点、要么没有。如果没有附件，就得走一个较慢的例程来模拟、假装附件存在。你还可以让它直接编译成机器语言，或者编译成**符号汇编语言**。符号汇编能产生稍好一点的最终产品，但更耗时，因为你拿到符号代码后，得先把那些卡片再跑一遍另一个程序才能运行。所以，要么有浮点、要么没有，要么符号、要么不是，一共四种可能。

所以我们写程序时，安排成：有一套浮点指令集和一套非浮点指令集，每套我们正好，比如说，占 731 个内存位置，所以**你把这 731 个换成另一套**；同样，符号和非符号两部分也可以互换。程序每部分都必须大小完全一致，才能全塞进去。

有人要新功能，或我们想再扩充一点语言，我们就想办法给浮点版实现，但还得想办法缩短程序里非浮点那部分，所以**我们不停修订这个程序，直到它变得真正难以理解**。用了各种技巧：一个例程里用到的常量，我也会保证它能在另一个例程里、出于完全不同的用途被用到。程序里几乎每样东西都有多种用途，于是几个月过去，我们忘了这些技巧，想改点别的，就会出问题。

所以这**是一种非常摇晃、糟糕的做软件的方式**，但那是当时我们所知的唯一办法；而且**人们不敢相信**，用这么小的一台计算机，我们能做那么多事。

[26 - 想当老师，以及我为什么选择加州理工](http://webofstories.com/play/17085)
---------------------------------------------------------------------------------------------------

**我从没把那当成一种职业。**那是我在凯斯的暑期工作，可当时不存在"计算机职业"这回事，计算机只是社会边缘的一种怪东西。我真正想从事的职业是什么？读小学时，我想当小学老师。比如我读六年级时，会把自己想象成未来的六年级老师，七年级时想象成七年级老师。读高中时，我想当高中老师。**我一直把自己看成将来要当老师的人**，也许还兼一份当乐手什么的零工。到了大学，我想当大学老师；到了研究生院，我想，好，研究生老师。

但**我从没把计算机科学看成自己职业的一部分**，它只是我用来挣钱、为自己听说过的那个职业做准备的手段。就像——我本来要当物理老师，后来转了数学，就要当数学老师。等我终于从凯斯毕业，有人建议我去西海岸——不，是我自己选了西海岸读研究生，因为我家人，我们——我们终于攒够了钱夏天能去度假，能开车四处转转，**我们开车游遍了美国各地，我爱上了加利福尼亚**。所以我申请研究生院时，申请了加州理工、斯坦福和伯克利。基本上就是在哪儿学数学的问题。

**三所都录取了我，三所都给了奖学金**。但特别推荐我去加州理工，因为 Marshall Hall 教授——他后来成了我的导师——在凯斯时我们有位访客，Bose 教授，一位伟大的印度数学家，他带我进了研究之门，他**对 Marshall Hall 评价极高**。

Bose **当时正在做他著名的推翻欧拉关于拉丁方的猜想的工作**；那是个有趣的话题，一个几百年的老问题：人们一直构造不出某种在统计和组合数学许多地方都有用的图案；欧拉——这位有史以来最伟大的数学家之一，至少也在所有人的前十之列——在 18 世纪猜想这道题无解；有三四个人甚至声称证明了他是对的，但证明里有错。最后，我的教授 Bose 和两位合作者发现欧拉错了，其实存在那样的图案。Bose 让我对研究产生了兴趣，因为我在计算中心，而他有个算不出来的计算问题，让我去做 12 阶拉丁方。第二天早上我带着 5 个 12 阶两两正交的拉丁方回来了，**这让他非常兴奋**，那大约是我的第三篇技术论文，就是和 Bose 合作的那篇。

但他推荐了 Marshall Hall，当时组合数学领域的领军数学家之一，所以我很喜欢去加州理工这个主意。

[27 - 为 Burroughs 公司写一个编译程序](http://webofstories.com/play/17086)
-------------------------------------------------------------------------------------------

在克利夫兰凯斯和帕萨迪纳加州理工之间的那个夏天，我找了份暑期工，写编译程序——就是那种把代数语言转成机器语言的软件。**我为 Burroughs 公司写编译程序**。Burroughs 总部在帕萨迪纳——我是说做软件的 Burroughs 分部总部在帕萨迪纳；而凯斯大四时刚装了一台我非常喜欢的 Burroughs 计算机。

Thompson Ramo Wooldridge 的一些人找上门说：Don，我们听说你会写编译程序。我们准备向 Burroughs 投标，给他们的机器——Burroughs 205——写一个编译程序，用一种叫 ALGOL 的语言，那语言刚被发明，叫"算法语言国际标准"，本打算取代当时最流行的 FORTRAN。所以**Thompson Ramo Wooldridge 向 Burroughs 投标，我记得是 7 万美元，为 Burroughs 205 做 ALGOL 编译程序**。可这些投标的人其实**对怎么写编译程序一窍不通**，所以他们雇了我这个凯斯大四学生来干这活，因为他们听说我知道怎么做。我在凯斯做过 RUNCIBLE 和另外几个软件版本，所以大四春天他们给我展示 Burroughs 这台机器，我开始摆弄那台计算机，对项目产生了兴趣；但 **Burroughs 拒绝了他们**，没给合同。

所以 Burroughs 说不行、不跟 Thompson Ramo Wooldridge 合作之后，我说：慢着，也许我可以自己写信给 Burroughs；**我给他们写信说，五千美元我就能给你们写一个 ALGOL 编译程序**。在 1959、1960 年，五千美元是笔巨款。**大学老师一年才挣八千美元**左右。所以我以为五千美元是笔不可思议的巨款。我告诉 Burroughs：不过我得说明，我可以夏天做，只是没时间实现全部 ALGOL，我能做除了"过程"（procedures）以外的一切；过程我做不到——那其实是一个编译程序里最难的部分，也就是子程序、扩展语言的能力。

他们回信说：没有过程的 ALGOL 不行，**你得把过程也做进去**。我琢磨了一下，说：哦对，行，我看怎么做了，但你得付我 5,500 美元，而不是 5,000。他们说，行。所以我 1960 年夏天——那是从凯斯毕业后——**那个夏天我写了这个 ALGOL 编译程序**，针对 Burroughs 205。我写了它，但说真的**我只写在纸上（铅笔稿）**，还没准备好，然后去帕萨迪纳时带上，在 Burroughs 帕萨迪纳工厂那边继续做。

在去西部的路上，我开着一辆从父母那儿弄来的小大众，**每天开 100 英里，找个汽车旅馆住下、坐下来写代码**，从密尔沃基到帕萨迪纳开了 30 天，每天都写一点这个软件。到了帕萨迪纳，我手里有全部代码和笔记，开始往打孔卡上敲、调试；**到圣诞节时我替他们做好了编译程序**。那台机器卖得不好，世界上没几处用它，但我听说此后十年，巴西人还在大量用它。

这对我来说是一段有趣的经历，但**从我的角度看，最重要的是我有了 5,500 美元，足够结婚了**。于是 61 年夏天我和 Jill 结了婚，它还支付了我们去欧洲度蜜月的费用——那是我们第一次见识世界。

[28 - 为 Burroughs 公司工作](http://webofstories.com/play/17087)
--------------------------------------------------------------------------------

我到加州理工当了学生，**数学专业研究生**。我又怕得要死，担心自己没法成功，因为加州理工的学生挑选极严：**在加州理工，本科生每三个里就有一个是高中班里的第一名**，另外两个也离第一名很近。所以那儿的人令人敬畏；他们每年只收 200 名本科生。研究生呢，我们数学项目有 12 人，也都出类拔萃。这不像凯斯，当年谁都能进研究生院。

所以我知道自己任重道远，又回到那种为功课做超出需要的份上；可我也喜欢 Burroughs 的那些人，所以**我在 Burroughs 找了份咨询工作**，跟他们软件组合作，我很敬佩那个组。他们的软件组为另一台机器 Burroughs 220 写过有史以来最好的软件之一——220 的 ALGOL 编译程序；我结识了做它的人，从他们那里学到很多。

我很享受加入他们组，但按规矩，我不能同时拿着国家科学基金会（NSF）或伍德罗·威尔逊基金会的奖学金，不能拿了那份资助却不是全日制学生。你知道，**一边做咨询、一边在校外工作是不行的**。哎呀，那样你的教育质量还能好吗？所以**我放弃了那些奖学金**，真的当了咨询顾问，一周在 Burroughs 待几天；此后六七年，我在帕萨迪纳那阵子一直如此。

Burroughs 的人极好共事。我在一个叫"产品规划"（Product Planning）的组，这个组设计了、或者说早期正在**设计一种全新的计算机**——一种在硬件里实现我们以前用软件做的那些事的机器。后来人们明白，那种机器其实并没有真正好的性价比：造便宜的硬件加好软件，胜过造昂贵的硬件。但当时，未来会对这个问题怎么说还完全不清楚。所以我们有了**有史以来最复杂的机器，Burroughs 5000**，后来还有 5500、6500。

我做咨询的"产品规划"组，负责确定机器的规格。另一个组，工程师组，负责造机器。它和以前任何机器都完全不同。我作为咨询者的角色，是**跟正在造机器的工程师沟通，确保他们理解楼上设计者知道的东西**。

所以我真有机会和公司几乎每个人交谈，我的角色更多是沟通性的。这些人要是走正式渠道，得往层级上几层、再下来几层，**他们彼此没法对话，但能跟我对话**，我再跟另一个组的人说。所以我能为 Burroughs 提供很有价值的服务，他们付我钱——我想当时一小时 5 美元或 7 美元，那时算高的，但没有任何医疗福利之类，所以从他们角度看也划算。

我的职责之一是检查工程师的设计，看有没有错，免得在造机器之前出错。他们会先把设计放进计算机程序里模拟，看是否貌似能正确运行；但**等他们以为正确了，再拿给我看，我仍然在设计里找出几百个错误**——那种极罕见、模拟时没出现的情形，从而避免了昂贵的硬件返工。

你知道吗，那段时期我的角色——沟通、努力找错——**如果我看着别人的程序或设计，却找不出任何毛病，那是极罕见的事，我会很难受**。找错误对我来说是一大乐事，就我在计算机方面的工作而言。

[29 - Burroughs 公司](http://webofstories.com/play/17088)
----------------------------------------------------------------

Burroughs 是一家创立于 19 世纪的公司，在银行业相当显赫，**几乎所有银行都用 Burroughs 的设备做账**。在计算早期，Burroughs 收购了帕萨迪纳的电子数据公司（Electric Data Corporation），成为众多造计算机的公司之一。而且，如我所说，他们不仅有极富创新的计算机，我也喜欢那儿全体员工的干劲。

后来，大概在 70 年代，他们被斯佩里·兰德（Sperry Rand）收购，**合并成了优利系统（Unisys）**。所以优利一半来自 Burroughs 公司，一半来自斯佩里——就是兰德尔·雷明顿（Remington Rand），造过 UNIVAC 计算机的那些人。那发生在我离开帕萨迪纳之后。他们继续以银行为主要客户群，但近些年，其他公司存活了下来，计算机行业发生了许多许多变化。

所以 Burroughs——**埃德格·迪克斯特拉（Edsger Dijkstra）60 年代也是 Burroughs 的顾问**，他会定期来帕萨迪纳。我觉得那些年它是一家很棒的公司。

[30 - 我对上下文无关语言的兴趣](http://webofstories.com/play/17089)
--------------------------------------------------------------------------------

我**完全没想到那份工作会和数学有任何联系**。给 Burroughs 做咨询时我戴一顶帽子，在加州理工当学生学数学时戴另一顶帽子。数学是那种证明正确性的东西，我们知道——我们知道游戏的规则是什么。而计算机领域，我们只是摆弄一样东西直到它看起来能工作、再也找不到错误为止。我们从没有过"这也能在数学上正确"的想法。

唯一的例外是编程语言的语法领域，也就是语言的文法。我说过，读七年级时我和朋友们爱学文法，我们学了英语文法。如今我看到同样的东西——不是名词动词，而是 ALGOL 这类代数语言里类似的东西，那些我本该为之写软件的东西。当时正在发展起一门理论，叫**上下文无关语言理论**，它吸引我，因为这是我能够同时用我的数学帽子和计算机帽子的事：我的计算机科学直觉、我对文法和语言的热爱，会提出有趣的问题；我掌握的数学则告诉我怎么解决这些问题。所以这是两个世界——计算和数学——为我走到一起的一件事。

我得说，**在我度蜜月**、和 Jill 乘船去欧洲时，我随身带了本诺姆·乔姆斯基（Noam Chomsky）的书，那是关于上下文无关语言的开创性著作之一；Jill 晕船或别的什么时，我会在零碎时间读它，试图解决上下文无关语言的问题。我想解决的问题是：有没有办法检测**一个上下文无关文法是否有歧义**？歧义指的是，你能写出一个有两种理解方式的句子。我以为自己或许有办法解决，把它化归为好几个其他问题。

但我普遍解不出这个问题；多年后我才得知，其实三位以色列数学家已经证明这个问题无解——在有限时间内没有解决这种歧义问题的办法。但度蜜月时我不知道这些，我只是想提一句：**虽然我爱 Jill，我也有其他所爱，其中之一就是上下文无关语言的奥秘**。还有一次，我想得提的是，有一次我忘了我们的一次约会，因为我在凯斯理工摆弄计算机——不过这个我们就不谈了。那件事她一直没原谅我。

[31 - 拿到博士学位，以及 λ=2 的对称区组设计问题](http://webofstories.com/play/17090)
---------------------------------------------------------------------------------------------------------------------------

所以那时我一边作为计算机人挣钱、乐在其中，一边学数学，好让"当数学老师"成为我的职业。至于这一切会有任何联系、甚至**会有"计算机科学"这样一个学术领域**，**我脑子里从没出现过这个可能**。当时全世界也很少有人想到。

在加州理工——我小时候有人告诉过我，你上八年小学、四年高中、四年大学，然后也许再上三年研究生，拿个博士学位。我不记得是谁很早就告诉我这个的，但有人说**拿博士要三年**。我相信了，所以 1960 年到加州理工时，我想：哦，好，1963 年我毕业。我就这么定下目标。要是有人告诉我得五年，我确信自己会在 1965 年毕业；但我一直想着自己 63 年毕业，所以**我就是这么提前规划的**。

直到毕业那天我才意识到，我的同事里没人毕业。Al Hales 毕业了，但**我们 12 人里只有两人三年完成**，我想部分原因正是我们就是这么给自己定的目标，然后去实现了。

我的论文是跟**Marshall Hall**做的，我来加州理工之前没见过他，但后来很欣赏他。**他的课很没条理，但他真的懂这行**。他给我们讲置换，我发现我的做法是记下他课上说的话，然后难题是重新整理他说的话，找出一种讲得通的排列——怎么重新排序；我是说，那个小时里每个重要想法其实都出现过，只是没按正确顺序来——**就像现在，我也不是按正确顺序想每件事的**——所以他的课就是这样。但通过努力解读他课上话的笔记，我学到了海量东西，学到了他擅长领域里的东西。

我决定，他给我们出的一个未解问题——术语叫**λ=2 的对称区组设计**——这个术语实际意思是：有点像几何，只是不是每两点有一条线，而是每两点有两条线；也不是每两条线交于一点，而是每两条线交于两点。

这是个叫 λ=2 对称区组设计的体系。我开始研究这个未解问题时，**打算找出无穷多个**这样的对称设计；已知的总共只有六个。我想，好，但我有一种新路子，也许我能找到无穷多个。不过幸好我没把它当作最终课题，因为我确信至今**只又找到过一个**，所以没人知道它只有有限个，只是构造起来似乎极其困难。

[32 - 解出射影平面相关的一个开放问题](http://webofstories.com/play/17091)
--------------------------------------------------------------------------------------------------------

另一个开放问题在我某门课上被提到，和射影平面有关，那是一种有限几何。**Marshall Hall**的擅长领域之一就是研究**射影平面**，他在二战期间发展出了其中一些主要理论。这些在破译密码、以及从传输可靠码的意义上构造码方面都有大量应用。

我上他的射影平面课，他提到一件事：**32 阶射影平面只知道一个，64 阶的也只知道一个**；所以每当你有二的幂——2×2×2×2×2——你基本上会发现一个那个尺寸的射影平面；问题是那个射影平面是否唯一，还是存在其他这种尺寸的几何？第一个未决情形是 32 阶。我看了看它。我收到一份邮寄来的材料，来自一个计算机程序，作者是 R.J. Walker，我想他在普林斯顿；他**其实用计算机找到了 32 阶的新平面**，他有一份清单，列出所有某类射影平面——我后来大概管它叫"半域"（semi-field）。

他有两份清单，每份有 16 个解。这样他就有了**32 个 32 阶射影平面**，16 个是一类，16 个是另一类，他的计算机就找到这么多。但第二份清单 16 个里有一个是已知多年的那个。所以我心想：哦，我只要找到一个模式、一条规则，能把第一份清单里的每一个，对应到第二份清单里的它的伴侣；**那我就有了一条能推广、去解下一个问题（64 阶）、再下一个（128 阶）的规则**，因为我在 32 阶情形下奏效的规则，如果能找到这个模式，就会成为通用规则。

我从他那里拿到这份清单，早上九点出现在我的邮件里。我记得和 Olga Todd 教授一起乘电梯上楼，她是我的一位教授；我说：Todd 太太，我想我两个小时内就能得到一个定理。我要找到办法把这 16 个和那 16 个配对。我就是有种直觉这可行；果然，盯着看了一会儿、一会儿，我找到了联系，到中午**我得到了一个定理，解决了这个射影平面开放问题的很多很多情形**。

我拿给 Marshall Hall 看，**他说：好，Don，这就是你的论文。写下来，就毕业吧。**你不用等，不必去做那道难题，拿这个当论文就行。所以**两个小时内解出博士论文，我有点内疚**，于是又花了几个月打磨这个结果、补充一些相关理论。

但我基本能写一篇约 70 页的论文，解决了这个世界上那个很小很小圈子——射影平面研究者、有限射影平面人士——**认为可能永远解不开的问题之一**。所以这很好，给了我一篇论文。

另外，为了毕业，我还修了别的——加州理工有其他要求要满足，其中一条很有趣：你得另选一道数学经典问题，准备一个月，能读多少读多少，看看能不能对这个问题说点新东西。我选的问题是所谓的**Thue-Siegel-Roth 定理**，Freeman Dyson 在其中做出过主要贡献之一；我提这个只是因为我知道 Freeman Dyson 也在本系列"人民档案"里接受过采访，此后我们成了好朋友。我读研究生为它做准备时，读了他关于这个主题的论文；我想他大概比我早十年毕业。

[33 - 在加州理工教计算机课，以及被请去写一本关于编译程序的书](http://webofstories.com/play/17092)
--------------------------------------------------------------------------------------------------------------------------------

在加州理工第三年，我**也被请去教几门关于计算机的课**。一群人表示：加州理工什么都不教计算机方面的；我们知道你在给 Burroughs 做咨询，你何不想到加州理工开一门课？所以我甚至还没毕业，就在加州理工开了一门只讲一次的课；而且他们做了一个极不寻常的**决定：毕业后聘我为助理教授**。

通常**一所大学不会聘自己的毕业生**，除了 MIT。通常人们认为近亲繁殖不好，因为一个系可能陷在一种哲学里，你通常想引进新鲜血液。可加州理工大概觉得**我的"血统"足够怪异**，聘我也无妨。

与此同时，1962 年 1 月，我**在加州理工第二年，也是结婚第一年**；我们 61 年夏天结婚，所以 Jill 和我有六个月的新婚幸福，从蜜月开始；然后过了一阵，我被 **Addison-Wesley 找去写一本关于计算机科学、关于计算机的书**。62 年 1 月，Addison-Wesley 一位编辑请我吃午饭，说：Don，我们想邀请你写一本关于编译程序的书。

你知道，编译程序——那是我前一年为 Burroughs 做的那个系统，我刚完成；**你被人推荐给我们，说你懂怎么写编译程序，你愿意考虑写这样一本书吗？**那时我研究生才读了一年半，还做着 Burroughs 的咨询，可我——天哪，这个念头怎么也甩不掉。哇，我喜欢写书？我之前在报纸、杂志上干过，写过几篇文章。我一直喜欢写作；而这里，我最喜欢的教科书的出版商 Addison-Wesley 在请我给他们写书。

于是我一回家就**匆匆列了 12 章的标题**，我觉得对一本书很合适。然后，嗯，我们的婚姻还算幸福，但不一样了，因为我开始**在未来 40 年都扑在这本书上**。

我以为自己能很快写完。我有 1964 或 65 年——不，64 年——写的一封信，跟人说："很抱歉今年不能去访问斯坦福大学，因为我**必须在我儿子出生前写完这本书**。"如今他 40 岁了，**书我还没写完**，不过那是后话。我原以为自己会写完；我完全没想到写这本书要花多久。

他们请我写一本关于编译程序的书，可我想：等等，**计算机编程里还有很多别的东西，你在写完编译程序之前也需要了解**。所以我说：我能不能加上关于计算机编程这些其他方面的章节？他们说，行，尽管加。好，所以这本书我们**决定叫《计算机程序设计艺术》（The Art of Computer Programming）**。他们喜欢这个书名。

我最初写它的动机，不只是因为我喜欢写书，而是因为**我看出对这种书有巨大需求**。市面上没有类似的东西。

其实，虽然我写过好几个编译程序、对编译程序懂得很多，**那些编译程序里的想法没有一样是我发明的**。我只是应用了从别人那里学来的想法。而我能想到的其他所有能写编译程序书的人，据我所见，都相当偏颇、有倾向：他们会提自己的方法，不提别人的方法。但**我认识的唯一没有私心要照顾的人就是我自己**。我从未发明过什么，我只是个写作者，我能用一种一致、不歪曲事实的方式呈现别人的想法——不像他们自己写会那样歪曲。总之，这些在我答应写这本书时就萦绕在脑子里。我写这本书，是因为我觉得自己写作相当不错，能够平衡那些更有切肤利益的人的叙述。

当然，一开写，我自然也发现了一些东西，也有了**我自己的偏见和歪曲**。所以**我没有实现"不偏不倚"的目标**；但我必须坦率地说，我最初确实相信**那是我写这本书的主要理由**——这书是需要的，这样的书必不可少，而我想不出还有谁能公允地讲这个故事。不是说我自己后来真做得很公允，但至少我想不出别人能行。

于是我开始了——我从 62 年夏天开始起草材料。62 年初还有课，但我开始为《计算机程序设计艺术》起草材料，**我研究生第三年在加州理工教的那门课，正是基于这些为《计算机程序设计艺术》做的初步笔记**。

[34 - 1967：动荡的一年（上）](http://webofstories.com/play/17093)
--------------------------------------------------------------------------

我的女儿 66 年 12 月出生，儿子 65 年夏天出生，所以你知道，他一岁半、她一个月大时，我妻子 Jill 需要做胆囊手术；我又被安排当全国巡回讲师，二月份要花三周跑遍全国；还安排了别的，比如夏天去哥本哈根讲三周、五月去法国等等。第一卷手稿已寄出，Addison-Wesley 正在处理，1967 年初校样开始陆续寄来；而我正写到第二卷，实际上几乎正好在正中间——如果它有 900 页，我就在第 450 页，反正几乎恰好完成一半。第二卷花的时间比我预想的长得多，越来越难，有些数学在我能力边缘，可我还有交稿期限，第二卷必须完成，因为我多年前就答应要交稿了。而这还只是第二卷，本应有七卷。好，我出去巡回讲学，我父母和 Jill 父母来帮忙看孩子，但我不得不离开；这次巡回意味着我每天换一个城市。所以一方面它极其无聊，因为每个城市的闲聊都一样。你第一次见到某人能说什么？你早上起来、上飞机、有人迎接你、教员请你吃午饭、问你：Don 下一站去哪儿？书写得怎样？然后你演讲、睡觉，第二天你在亚特兰大之类的地方。但在这次旅途中，也许是我第一次？不，我有一站是斯坦福，有一站，哦对，一个重要站点是康奈尔；还去了罗得岛，那儿有所大学，完全没人懂计算机科学，听众只是规规矩矩坐着听我讲，也不笑；然后我去宾夕法尼亚大学，学生、挤得爆满的人群，人人都跟我走，演讲很带劲；然后我到康奈尔，在那儿待了两天。那是个周末，Peter Wegner 在。他是教授，我以前在英格兰见过他——不，他来过加州理工；总之周末 Peter 和我去伊萨卡徒步。那时计算机科学里一个大问题是所谓"编程语言的语义"（Semantics of programming language）。你怎么描述语言里事物的意义？我们懂文法，但怎么得到语言的意义？我有个想法：一种定义意义的好办法是，如果你知道小东西的意义，就能用它来构建大东西的意义，如此递推下去；但也有另一种路子，你可以从意义入手——从顶部开始，把它向下传播，传播成——上下文如何影响句子的词。

[35 - 1967：动荡的一年（中）](http://webofstories.com/play/17094)
--------------------------------------------------------------------------

所以有"继承"下来的意义部分和"综合"出来的意义部分这两者：从部分到整体的，以及从整体到部分的。我说：我不知道这两个哪个更好。于是 Peter 在公园散步时对我说：那你为什么不两个都做？我说：这显然荒谬。你没法——如果你要从顶往下、用顶来描述底的意义，又从底往上、用底来描述顶的意义，你会陷入循环。这毫无道理。但我跟他争了大约十分钟后，意识到自己在喊，因为我忽然发现他完全正确：只要小心你从顶定义的那些意义方面不依赖于从底上来的那些，你确实能两个都做。所以意义有不同的部分。这就引出了一个计算机科学的研究子领域，叫**属性文法（Attribute Grammar）**。这个想法产生于二月份的这次巡回讲学途中。但我回到家，完全没有时间研究属性文法，因为我得在一切空余时间写《计算机程序设计艺术》，还有学生、要教的课、其他一切，还要照看孩子——如今我当父亲了。好。与此同时，我也在想数学里的另一个东西，叫"词问题"（Word Problem）：这里的问题是，如果你有两个数学表达式，你能证明存在一种办法把一个变成另一个吗？我偶然发现了一个解决这个问题的办法，现在叫 **Knuth-Bendix 算法**。Peter Bendix 是我加州理工课堂上的学生，他为他的学期论文写出了这个算法的计算机程序。由于我做过的一些工作，这些想法凑到一起，所以 1967 年，除了这些该办的事，我还有这些崭新的、等着被探索的想法——Knuth-Bendix 算法这类工作，和属性文法这类工作。可没有时间去研究，所以那是我一生中最忙的一年。我还编辑期刊，当时我担任 12 份技术期刊的编辑。我收到要审的论文，并且尽职尽责。我在加州理工时的运作方式是：先照看孩子、换尿布什么的，他们上床后，如果他们醒来哭，我戴上耳塞，这是我写《计算机程序设计艺术》的时间。我边看电视、看老电影，边写《计算机程序设计艺术》的章节。我到学校，做编辑工作，发论文送审，给论文作者写信。每天早上我都会盘算：今天要完成什么？然后我熬夜直到完成。我习惯了从高中起就有的通宵；我开始每天工作到做完当天给自己定的事为止。

[36 - 1967：动荡的一年（下）](http://webofstories.com/play/17095)
--------------------------------------------------------------------------

所以毫不奇怪，我突然得了出血性溃疡，住进了医院。我有那么多别的事在忙，没时间做那些冒出来的研究，然后身体造反了。医生给我看他的一本描述所谓"A 型人格"的书，那简直说的就是我，他说：你知道吗 Don，你不能这么活下去，这撑不下去。他是个极好的医生，他让我读他自己的教科书，不是只说"医生最懂，听我的"。他让我理解自己的状况；我打了针，他给我打针补充出血流失的铁质，还有些药，让我改变生活方式，只做这么多。于是我辞去了所有编辑职务。我给我的出版商写了一封信，信纸四边镶了黑框，说：很抱歉，我知道你们想让我今年完成第二卷，可我在医院；我完成不了，我会尽力，会继续工作。溃疡发作那天，我能准确说出自己在第二卷哪里，因为你看第二卷索引，有个索引条目叫"暴力破解"（Brute Force），我当时正在暴力破解一道习题，我把它放在那儿作为提醒，好让我准确知道这个低谷发生时我在哪儿。但等我意识到自己做得太多、开始改变生活方式、学会"mañana"（明日复明日）这个概念时，医生允许我去哥本哈根讲课。那些课讲的又是一个新想法，关于编程语言的语法和语义，是在哥本哈根举行的国际暑期学校上讲的。我没有预先准备，但大致知道想讲什么。我提前一周到了，好准备下周要讲的课。哥本哈根有美妙的森林，我去坐在一棵树下，开始规划演讲。结果第一周的另一位讲师 Niklaus Wirth 打来电话——他一直在环球旅行，在印度得了痢疾，没法讲课——所以他们把我的课从第二周提前到第一周，所以我只能比演讲提前大约一天准备：周一能准备周二的课，以此类推，再回森林想周三讲什么。那些课讲的是原创材料，是我以前没做过的东西。我正在从溃疡中恢复，但尽量放松；我确实很享受待在森林里的树下，因为那是做研究的好方式。那一切都很顺利，学生们很帮忙，帮我校正那天冒出来的问题。然后我去了牛津参加一个会议，报告我关于 Knuth-Bendix 算法的定理；我是在从哥本哈根出发的第二周在飞机上写成那篇论文的；去法国的途中，我有几天时间思考属性文法。所以这是 1967 年，那是我一生中最有创造力的时期——从某种意义上说，我在计算机科学领域三个后来证明重要的想法都出自那一年：无疑属性文法和 Knuth-Bendix 算法，加上第三个想法（自顶向下的语法分析），它没那么重要，但也不错。而那一年我只能靠从真正该做的事——家庭、书、教学——里偷出几分钟来做这些。所以我一直好奇：如果不是处在那么大的压力下，我还会那么有创造力吗？如果我设计一所研究院，理想的设计会是让婴儿尖叫、人们睡眠不足、被各种责任轰炸，然后他们产出更好的研究？还是给他们舒适豪华的环境？你读到斯特拉文斯基创作伟大音乐时的境况，他住在寒酸的阁楼里、处境糟糕。为什么 1967 年是我想法最多的一年？也许只是时机到了。你没法回头改变历史。

[37 - 一个新领域：算法分析](http://webofstories.com/play/17096)
------------------------------------------------------------------------------

67 年秋天圣巴巴拉有个数学家会议；我也记得，那年春天教堂山（Chapel Hill）是不是也有个数学家会议。我遇到了很多激发我灵感的人，我们之间有有趣的问题可聊。但等我到了圣巴巴拉那次会议，我意识到这是我唯一能做研究的机会，所以我没去听会：任何讲座我都没去，就坐在沙滩上，在这次会议上写我的属性文法论文。但我去了用餐，我特别记得会上有人问我做什么，而那一刻我正决定：我要成为计算机科学家，而不是待在数学系。所以我说：嗯，我想我要当一名计算机科学家。他说：那你做数值分析吗？我说：不，不算。他说：啊，人工智能？我说：也不是人工智能。他说：那你一定是做编程语言的——换句话说，编译程序正是我被请去写书的东西；事实上那时计算机科学被认为由三样东西组成：数值分析加人工智能加编程语言。斯坦福的系也大致按这三条线组织，有三门资格考试之类。可我说：我确实在编程语言上做了很多研究，也当过期刊编程语言栏目的编辑，但我的主要兴趣不同。于是我意识到，我没有一个名字来称呼我主要的兴趣。那我的主要兴趣是什么？你看，到这时我已经写了三千页《计算机程序设计艺术》，打字打了部分，发表了部分，几乎要出版了——在读校样或其中一部分。结果我发现，我们想要的是理解计算机方法质量的数学基础。我们想知道一种方法有多好，是不是比另一种好一倍，或者某种数量上的东西——不只是定性地说"更好"，而是好多少，某种给它加上量的办法。所以我把它作为我书里贯穿的统一主题：找到那些定量描述、判断一种计算机方法优劣的方法。但我没有名字。在圣巴巴拉这次会议上我意识到，如果我要向别人解释我的领域是什么，就得给它起个名字。所以我为这个领域起了个名字，决定叫它 **算法分析（analysis of algorithms）**。我想，我在写书，我可以用它来解释什么叫算法分析。我跟出版商说：咱们改改书名吧，别叫《计算机程序设计艺术》，叫《算法分析》。他们的焦点小组不买账，但无论如何我决定，那才是我真正的职业：主要专注于算法分析，也就是定量研究一个算法或计算机方法有多好。1971 年国际信息处理学会联合会大会请我演讲时，我的题目就是《算法分析》；1970 年在法国一个国际数学会议上演讲，我的题目是《算法的数学分析》。我努力把这个词当作一个"热词"来推广，好让别人理解我做的是什么、我喜欢的是什么、我希望做的是什么。我很高兴，大约十年后，70 年代末，它开始作为评论期刊里的一个类别出现，也开始有书冠以《算法分析》之名。事实上，虽然我的出版商不喜欢那个书名，如今有相当多的书带这个书名。所以是我给我工作领域命了名；但如果有人问我它到底什么意思，我就说：嗯，意思就是我所感兴趣的一切，所以头几年我可以随意改，让自己满意。

[38 - 《计算机程序设计艺术》：低估了书的规模](http://webofstories.com/play/17097)
----------------------------------------------------------------------------------------------------------------

从第一天起我就勾勒好了目录，12 章；我逐章填充、写作，材料越来越多，而计算机科学在成长。结果我发现我不仅很不擅长估计一件事要多久，也极不擅长估计我在写的书有多大。我看着我手写的稿子——我的稿子全是手写的——我觉得我的字看起来比书里的字大得多；我读过很多书，所以在我看来，我写的东西会是一本相当体面的书。事实上我写到第 12 章末尾，12 章之后，我想那是 64、65 年，这份手写草稿我攒了三千页。我攒了三千页手写稿，现在稿子还在我手里。写这三千页时，我给 Addison-Wesley 写信，他们问进展如何？我说：哦对，我在写，文思泉涌，你介意我把它写得相当完整吗？我发现这些别的材料。他们说：尽管写。所以我攒了三千页，然后拿到打字机上开始打。我打出了第一章，大约四百页的打字稿——那是隔行打的。顺带一提，我给自己买了台 IBM Selectric 打字机，当时非常新。他们后来告诉我，我是加州第一个买它的私人，而不是公司买的。这种打字机有个小球，会旋转、敲击页面；但对我来说重要的是它的手感比我摸过的任何打字机都好。你在 Selectric 上敲一个键，它会传出一个信号，告诉小球往这边走；但你可以提前敲好几个键，机器内部会缓冲、记住你敲过的键，然后它们被送到小球。你飞快地打 t-h-e，甚至能在 t 印完前就到 e；它是为此设计的。所以我能打得很快——我第一次在 IBM 展会上看到 Selectric 时，就打出了"now is the time for all good men to come to the aid of the party"，比我以前打任何东西都快。我看着它，完美无瑕。所以我说：我必须有一台这种打字机。我给自己买了一台 Selectric，用它打了我在加州理工的论文。我一直是个键盘快手，弹了很多年钢琴，还学过法庭速记员那种速记打字，还玩过萨克斯什么的，所以这只是又一种键盘。我用得很好，于是开始打，打完了 12 章中的第一章，寄给 Addison-Wesley，说：这是我书的第一章。然后我收到一个人的信——他就是 1962 年第一个来找我谈话的编辑；不过那是 1966 年了，等我攒到三千页再加打这一章的时候。现在我又收到这个人的信，但他这期间在公司升了三级，已经位高权重了，他说：这怎么回事？你有这么一本书。Don，你知不知道你的书会超过两千页？什么？我以为我有本六七百页的书。我说：我读了很多年书，你怎么能说这本书会那么长？于是我回去找《Thomas 微积分》——我大学一年级钟爱的那本原书——我打出来；他们跟我说，Don，你一直以为我打的五页只相当于书的一页，但他们说，不、不，是一页半对一页。我简直不敢相信，于是我拿《Thomas 微积分》，用我的打字机打了两页。果然，三页打字稿才相当于原书两页。所以我的书比我以为的大三倍还不止。难怪这东西我拖了那么久。但那时他们说：嗯，没人买得起这本书；所有出版商都有自己的恐怖故事，讲某个教授寄来手稿，比如十卷本的《鸡蛋的历史》之类，结果成了个大笑话。所以他们要怎么绕过这个问题呢？

[39 - 决定怎么处置这本书，以及第一版的成功](http://webofstories.com/play/17098)
-----------------------------------------------------------------------------------------------------------------

我飞到马萨诸塞州，讨论我们该怎么办。他们说：也许我们能想想办法。同时，他们给几个人看了那一章，人们很喜欢，所以他们没那么担心，但说：可是……我当时的编辑 Norm Stanton——我碰巧吃午饭时注意到他写给自己的便条，写着"成本大麻烦"之类。我明白，他在努力温和地告诉我这个坏消息，可我该怎么办？他建议，他们建议：嗯，你删掉这个、删掉这个；不给习题答案；不用专业插图，就用我手稿里画的那插图。他们说那些插图很可爱之类。可我觉得它们糟透了。我说：不，我喜欢 Addison-Wesley，是因为他们的书质量极好，插图一流——这正是我跟你们签约的原因。我的编辑事后对我说：天哪，你在那儿顶撞公司总裁，真够勇敢。于是他们决定：嗯，也许我们分三卷出版；然后他们又改主意，决定分七卷出版。于是我们定了个计划，把《计算机程序设计艺术》分七卷出版。这个计划如今名义上仍在，但三卷已经印了三十多年，我正在写第四卷。不过，原因是这门学科——计算机科学没有停在那里，所以我写的那三千页描述的是 1965 年的计算机科学现状。嗯，自 1965 年以来又学到了些东西，所以我们也得把它们加进去。这本书还经历了好几个阶段。起初他们说：你不该把习题答案放书里，我们单独出版，有人能订购，或做成平装；我们直接从打字稿翻印。但评审人开始读后说：不，把这些答案排版、放进书里更好。所以当 1968 年第一版真正问世时，它是一本昂贵的书，比所有其他计算机科学书都贵，大约贵一倍——第一卷我记得卖 32 美元左右，具体价格我忘了，可以查；而其他书卖 10 美元左右。然而第一年就有 50 多所大学采用它作教材，我们很快又加印，它取得了难以置信的成功；虽然不好读，但它证明了这个领域需要这样一本书。这就是《计算机程序设计艺术》的开端。1968 年 1 月，我拿到那本书的第一批样书。自那以来，第一卷英文版我相信卖了大概三四十万册，其他语言更多，所以我当时简直无法相信它会这么成功。但要是我 1962 年就知道我写的是这么大一本书，而且到 68 岁还在写它，我肯定绝不会答应做这件事。我原以为会在儿子 1965 年出生前写完。

[40 - 写小说：《超现实数》（上）](http://webofstories.com/play/17099)
------------------------------------------------------------------------------------

这是我一生的独特事件，发生在 70 年代初。我遇见了 John Conway——肯定是在世最伟大的数学家之一。71 年我去卡尔加里大学时遇见他，我们一起吃午饭，他在餐巾纸上潦草写下他想到的一个新理论，我觉得它棒极了。那是一个纯数学理论，讲一种定义数的新方式：不只是整数和分数，还有无穷数、无穷大的平方根、无穷大的无穷大次方、无穷大的无穷大次方的平方根、无穷大的倒数——让所有这些数都有了意义。一年后我在挪威度休假，半夜冒出一个念头：哇，这个理论这么美，讲成故事会很有意思——写一本书，书里的人物发现 Conway 的理论：他们在石碑上找到他的规则，破译石碑，推出这块碑的所有推论，从而自己证明关于无穷的种种命题。关键在于，这会是教人怎么做研究的一种方式：学生不仅能学到别人做过什么，还能学会自己怎么在数学里做出新东西。而且可以写成故事的形式，让角色自己发现这些。所以我想，这真会是一本很棒的书；它可以作为补充——我想高中老师可以把它推荐给一些学生，让他们看到数学是怎么被发现的。于是我想起给这些数起名"超现实数"（surreal numbers）。你得知道，实数是我们所说的那些有无限多位小数的数，而超现实数更甚，因为在实数之间还有超现实数。这就是 Conway 的体系。所以我想，我有这个书名《超现实数》，也有这个想法：一个理论可以由书里的角色发展出来。我把 Jill 叫醒，说：Jill，你知道我写《计算机程序设计艺术》写了很多年，到现在还差得远吧？嗯，我刚想到另一本必须写的书，你觉得怎么样？我说我可以在一个星期内写完这本，真的只要一星期，因为它很短。她说：好，Don，去吧。这是你度休假的一年，我们在挪威，何不真拿一星期去做这个项目，专心做它，做完你就高兴了，我们从此幸福地生活。

[41 - 写小说：《超现实数》（中）](http://webofstories.com/play/17100)
------------------------------------------------------------------------------------

于是我们做了计划。我决定在奥斯陆市中心租一周旅馆房间，就挨着易卜生故居，这样也许能沾点他灵魂的气息。我们计划这周她来看我几次，我们能在旅馆房间里来场小艳遇。我们从来——我们一直好奇那会是什么滋味。所以我可以当一星期作家，然后我们能有这么件事，让旅馆的人以为是有女人偷偷来探望我。事情就是这么发生的。接下来几周我开始——我在脑子里把这部小说的第一页写了好多遍；我坐巴士时总会想到另一句话。所以一月份我住进旅馆，那大概是我一生中最棒的一周。如我说的，仿佛有缪斯女神在那儿向我口述这本书。我住的是一家教会旅馆，由挪威教会的志愿人员管理的廉价旅馆；反正我们有了那场艳遇。旅馆里还住着美国学生，来自明尼苏达州的圣奥拉夫学院。在挪威，每天早上旅馆都有挪威式早餐，那是一大桌丰盛的东西——不像英格兰那种腌鱼，但我们肯定有鲱鱼，还有很多别的东西、鸡蛋、各种各样。所以我每天花一小时悠闲地吃挪威式早餐，足够撑到晚饭，一边听那些美国学生互相交谈，一边留意他们说的话——尤其因为我已经很久没听到美国英语口语了。我们已经在挪威住了好几个月，这时已六七个月了。所以我记得一些方言、一些表达，而我的小中篇是用对话形式写的，所以给这些人物配上真实的口音对我很重要。我听着学生们说话，吃得很多，然后回房间开始写书。这本书真有点像歌剧：歌剧有好音乐加一点情节，我的书是好数学加一点情节。所以我是在自己发展那些数学。我记得 Conway 把东西写在餐巾纸上，而我把餐巾纸弄丢了，所以我努力回忆他一年前告诉我的东西，试着让书中人物自己去重新发现那些数学。我自己也依据和他们一样的规则去发现数学；如果我犯了个错——我想了个不奏效的东西——书里的人物也会犯同样的错，然后像我一样从中恢复。所以这样写出来，这本书也是对数学研究的一种真实呈现。于是我开始写，每天结束时——早上我总是——我通常有前一天留下来的东西可接。第一天我已经思考这本书的第一页好几个月了，所以准备好写第一页；我只在写到第二页时才停一下，第一页我几乎能口述出来。然后我继续写，试着再做点数学，然后卡住，遇到瓶颈：下一步往哪儿走？接下来做什么？于是我会出门，在奥斯陆街头散步；那是一个没有雪的月份，所以一月走在街上不太滑。大约一小时、一个半小时，就在我旅馆周围闲逛，问题的解法会浮现在我脑海，我回去写下来，晚上悠闲地吃顿挪威式晚餐，然后回房间再写一点，为明天做准备；如我所说，睡前我必须先知道明天开头的几句话，否则睡不着。你可以想象，那阵子我完全沉浸在这本书里。

[42 - 写小说：《超现实数》（下）](http://webofstories.com/play/17101)
------------------------------------------------------------------------------------

我预计写这本书要一周；六天后我写完了最后一章，第七天我休息了。这很有意思。第六天其实是我妻子来看我的日子之一，我们出去看电影，片名叫《蝴蝶是自由的》（"Butterflies are Free"），主演是高蒂·霍恩（Goldie Hawn），我记得；之后我们在奥斯陆的王宫周围散步，树上有美丽的霜花，王宫花园里有那些壮丽的树，我抬头看着覆雪映衬在深蓝天空下的树枝，完全着了迷。我只是想告诉你，这一周对我来说多么美好：灵感一直不断，写着书，然后——那时我正写到倒数第二章——回到房间前，我抬头看天空，看着那些覆冰树枝的图案，那是我一生中最美妙的时刻之一；Jill 正回我们的公寓。我回去写完最后一章，那是第六天；第七天我休息了，但第七天我想给秘书 Phyllis 写封信——她将把稿子打出来——告诉她怎么写。我开始写一句，写到句子中间就写不下去了。我流利地写了六天，然后到了终点，书完成了，我的写作也完成了。我竟想不出怎么给 Phyllis 写信。最后我写完了信，把手稿寄给她，全是手写的。她几个月后打好寄回给我，我把稿子寄给英格兰剑桥的 John Conway，他在那边的学院。他礼貌地指出，我把他两条规则中的一条搞错了：我书里的人物其实一直在用一个不同的体系，而不是他的——他的体系其实比我做的那个更漂亮。嗯，还不算太糟。我们去英格兰拜访他，去了剑桥，复活节在他家住了几天，我了解到我本该怎么说。回到挪威后，我又花了一周，这次不在奥斯陆，而在一个偏远的山谷——那个山谷在黑死病时期实际上失去了全部人口——那里有个小疗养院叫 Solheimen，很多人夏天会去待一周，那儿人人都说挪威语。我们在公共餐桌吃饭，那时我努力用挪威语和他们交谈；但大部分时间我把整本书过了一遍，用 Conway 说我本该一开始就用的规则重写，结果好多了。我还有其他几位读者的意见，比如我妻子——书里有些浪漫场景，我妻子是那些场景的顾问。等等。我吸收了读者的一些意见，又工作一周，然后这本书《超现实数》就完成了。它是我人格中与计算机书完全不同的另一面。它成了检验一个人是数学家还是计算机科学家的试金石。有人认为两者一样，有人认为——总之，我知道它们不同：因为数学家看《超现实数》会觉得它真的很有意思，而计算机科学家看它会说：这是我最大的错误，我干嘛浪费时间做这个项目？嗯，我刚得到出版商的信，他们想印《超现实数》第 17 次印刷，我下周该把订正发给他们。它已被翻译成八九种语言，所以世界上还是有一些欣赏这本小书的数学家。它大概有八九十页，小开本；但结果它成了我觉得像是被口述给我的小东西。我再也不可能做出别的东西像它一样了，但那段经历很棒。

你有没有过再写一部小说的冲动？

没有，但你不知道，写它的时候，我眼睛是睁开的，一切都在眼前；我走在奥斯陆街头，看见鸟，听见声音，以一种特别的方式感知着世界，因为我正在写的东西意味着我接下来要写我的角色在说什么，这自然而然地让我对世界更加敏锐。这是这段经历的又一层面，我能理解作家为什么会从中得到快感——当你面对把某物写成散文的任务时，它会磨锐你的感知。是的。但没有，我是说，也许哪天半夜我会醒来冒出个念头，但我一直把它看作一辈子一次的事，如我所说，也有人觉得那是我最大的失误。

[43 - 计算机科学作为一门学科的出现（上）](http://webofstories.com/play/17102)
------------------------------------------------------------------------------------------------------------

我写第一卷时在加州理工，在数学系里晋升，我当时仍是数学家；如我所说，在 60 年代初，我绝不会相信会有计算机科学、不管叫什么都好，这样一个学术门类。然而在斯坦福，George Forsythe 50 年代末去了斯坦福，他和极少数人有远见，认为这里有些东西真该成为每所大学课程的一部分，它后来叫计算机科学。我视他为计算机科学之父，他是个很棒的人；他想出办法把人请到斯坦福、建起这个系；他开始满世界淘人。凡是他觉得在他眼中这个新兴领域里最好的人，他都会邀请他们来斯坦福，说：请来加入我们吧。于是他招募了我。他在经费极为拮据的情况下运作。他得到了教务长 Al Bowker 的支持——Bowker 后来因许多别的事出了名，包括当伯克利的校长——Al Bowker 在斯坦福管理层，非常支持 Forsythe 的想法，还给他出谋划策。所以，尽管没有经费，他还是设法让一些人在数学系兼课，一些人在电子工程系兼课，一些人在 SLAC 兼课；人越来越多，John McCarthy 也来了，于是 60 年代他那里聚集了全世界最优秀的计算机科学家。下周我们系庆祝四十周年，我们要追忆那段时光——其实是四十一周年，因为这个系始于 1965 年。最开始他们大约有六名或十名学生，后来相当多；它在这个做计算的领域是开拓者。当时我了解到计算和数学之间的联系。我说过我先学文法，喜欢"计算机语言的文法能用数学工具研究"这个想法；我和 Bob Floyd 通信，他当时在马萨诸塞州；62 年夏天我写完另一个编译程序后遇见他——我为 Univac 公司写了个编译程序，62 年秋真正见到 Bob——他向我介绍一个全新的东西：你其实可以证明关于计算机程序的事情。你不只能摆弄程序直到它能工作，还能发展一套理论，让你知道程序会正常工作。这是个启示。我从来没把数学的一面和计算机的一面结合起来。计算机一面，我只是个工程师，在摆弄。Bob 说：不 Don，你看这个。只要你用正确的方式看，你其实可以确信你的计算机程序在正常工作。这对我来说是个巨大的启示，所以我和 Bob 成了朋友，我去马萨诸塞州看他，他来加利福尼亚看我；我开始看到，也许"计算"这个学术门类是有可能的。Forsythe 邀请我去斯坦福；那时我小姨子住在旧金山，所以我们去很方便，去看了看校园——那当然很美——George 说：好，Don，加入我们吧。哦，我说：不不不。我在写这本书，我要写完它，我儿子要出生了，我们需要稳定。但我知道，人生某个时刻我终究要决定，哪里是我永久的家，而不只是——那时我是助理教授。加州理工两三年后把我提升为副教授，我想我该说点关于终身教职的事。大约那时《洛杉矶时报》有篇报道，说 UCLA 的学生不满，因为一位 UCLA 教授没拿到终身教职；我以前从没听过"终身教职"这个词，所以我去问 Marshall Hall，我说：Marshall，这"终身教职"是什么词？她没拿到终身教职是什么意思？他说：呃 Don，还记得你去年收到加州理工的任命表吗，上面写着你被聘为副教授？我说：记得，怎么了？那上面有一行，写着你的任期截止日期，记得那行是空白的吗？我说：记得。他说：那就是终身教职。你的工作会一直延续下去。我以前从没听过这个概念，所以我在知道它存在之前就有了终身教职；我很庆幸，因为现在很多学生那么担心拿不到终身教职，以至于妨碍了他们的专业发展——他们花更多时间谋划怎么拿终身教职，而不是怎么做好的科学。

[44 - 计算机科学作为一门学科的出现（下）](http://webofstories.com/play/17103)
------------------------------------------------------------------------------------------------------------

那时我在加州理工，但我知道总有一天我必须决定：我要做什么作为永久职位？因为我从没指望一辈子待在一个地方，可我又不喜欢搬家，所以我知道会有个时刻，我该搬到我度过余生的地方。那该是哪儿？我第一个正教授职位邀请是俄克拉荷马州诺曼（Norman），然后是教堂山、北卡罗来纳，但这些都是不请自来的。我开始想我该去哪儿；我当然知道 Forsythe 在这里的事业，所以我写信给 Bob Floyd——他是我在计算机科学里最好的朋友——说：Bob，你怎么评估世界上不同的地方？不管我去哪儿，我都想当你的同事，我们两个能去同一个地方。你想去哪儿，我看看是否也适合我？于是他给我写了封漂亮的长信，把他对世界上所有地方的排序都讲了，他把斯坦福列在榜首——正如我私下也把斯坦福列在榜首。他说：如果你想去斯坦福，大概我也想。所以这成了一种打包交易，后来我们和斯坦福谈判时就说：你们要是给一个人发出邀请，应该容得下我们两个。我开始寻找永久的家，主要进行面试、收到邀请的有四个地方：哈佛、伯克利、斯坦福和加州理工。如我所说，这发生在 60 年代中期，1967 年是主要面试进行的年份，嗯，66 年，差不多那时候。正式邀请到 68 年才下来。但 1967 年是通信往来最多的时候。所以我可以在那四个地方的任何一个当正教授，每个都不一样。如果我留在加州理工当正教授，就会留在数学系，做那里的数学正教授，那就是我的职业。如果我去斯坦福，会成为计算机科学正教授；哈佛和伯克利也一样。哈佛几乎没有计算机科学的人，学生很少、教员很少。我在哈佛的角色会是帮忙把它建起来。而加州理工和哈佛——你看，我知道加州理工很长一段时间不会有计算机科学系，那会是一场苦战，因为加州理工的教员在物理、化学、生物方面太强了。物理学家不认为计算机科学重要，除非它帮物理；生物学家也一样，除非它帮生物。他们看不到计算机科学家可能有自己有趣的、不仅仅是服务其他学科的问题。出于这个原因，在我看来加州理工极不可能像斯坦福那样想要一个计算机科学系。哈佛也一样：哈佛说他们想让我当应用科学教授，帮他们建起计算机科学；但我知道要是我去了，会把大部分时间花在为计算机科学辩护上，而不是做计算机科学。我讨厌那样。我不是搞政治的，我不喜欢对抗，不喜欢劝人相信什么；我喜欢他们自己得出结论。所以虽然哈佛很诱人——因为我知道在有分量、有人听你说话的地方给计算机科学当个代言人会很好——但我想做计算机科学，而不是为它辩护。我见过很多例子，别的领域，运筹学（Operations Research）就是个典型：早期运筹学的论文一多半是在为运筹学辩护，而不是在做运筹学、展示运筹学之美，却说要我们为什么需要运筹学。我完全不想那样，所以我没有对哈佛的邀请嗤之以鼻，但我断定那不是我想要的生活。然后我面前是伯克利和斯坦福。我觉得从所有学科整体来看，加州大学伯克利分校是世界上最好的大学，很被它吸引；但他们不像斯坦福那样有很多计算机科学。我的角色又会更多是建设。而我可以在斯坦福校园里住。这对我有很强的吸引力：能像我现在这样盖一栋房子，每天步行或骑车去游泳池，不用操心通勤。所以斯坦福已经有那么多好学生、好教员，我可以来这儿成为他们中的一员——我是说一员——所以我把斯坦福列为第一选择，正如我——不过另一方面，斯坦福是有标准的，而我相当年轻，他们凭什么在这么个年纪聘我做正教授？幸运的是，第一卷恰好在我被提交批准的那个星期出版。我是说，校园里其他系的人、校董和其他那些要批准一个年轻人不寻常地当正教授的人——书恰好在他们需要的时候那个星期出版了，帮了忙。所以他们都笑容满面，我收到了斯坦福的来信：是的，你可以来这儿。

[45 - 在普林斯顿做一年国民服务](http://webofstories.com/play/17104)
-------------------------------------------------------------------------------------

但我没有马上去斯坦福。我在斯坦福的第一年实际是在新泽西州普林斯顿度休假。那时是越战时期，你们有些人可能记得，校园里风起云涌。我之前因为先是研究生、又结了婚、视力又差而推迟了征兵，所以有段时间我是 4F；总之，我觉得自己欠美国点什么，因为它给了我自由去学习，不必扛枪、不必捍卫领土，所以我想至少做一年国民服务是好的。那么，像我这样技能的人能为国家做什么？答案是，我被招募去做破译密码的工作——密码分析；我的导师 Marshall Hall 和加州理工的其他人正是在这方面出名，因为我做的组合数学对构造和破解密码很有用。于是我去了那儿，不是在普林斯顿大学，而是在国防分析研究所（Institute for Defense Analyses），它在普林斯顿校园里有一栋楼，叫冯·诺依曼楼。我在那儿和一些极其优秀的同事做保密工作；我们的方式是，一半时间做纯数学研究，一半做与破译相关的保密工作；我们中的大多数人尤其擅长编程，所以我们会试着写能帮助破译的计算机程序。那里的工作是保密的；至今我还不能告诉我妻子我那年做了什么。虽然那年我遇到很多伟大的人，但我也发现保密生活不适合我。我是那种喜欢谈论自己在做什么、喜欢解释和教学的人，所以我努力工作帮那个机构一年，但此后我知道我真该做学术，不再做保密工作。所以关于那段时期我不能说太多，只能说与我共事的人极其出色。我也发表了一些论文——和我一起工作的人，我在那儿的室友 Ed Bender，我们一起解决了一个著名的组合学问题：我们能把所谓"平面分拆"（plane partitions）拿来，找出为什么 n 的平面分拆数有如此惊人简单的形式。平面分拆可以这样理解：假设你有 100 块方糖，想放进一个盒子，紧紧抵着盒子的一角堆起来，有多少种堆法？一个叫 Percy McMahon（M-C-M-A-H-O-N）的人花了生命中许多年解决这个问题，他得到的答案是一个相当简单的公式，说明把 n 块方糖放进盒子一角有多少种方法。但没人知道为什么它该这么简单。我和 Ed Bender 是室友，我们花了很多自由研究时间思考这个问题，看哪，我们真的找到了解法。Ed 是那种最完美地把他的研究技能和我的结合起来的人——我一生中从没和任何别的人合作得如此理想。他的长处弥补我的短处，我的短处弥补他的长处，我的长处补他的短处，反之亦然；我们能以同样的速度交谈、以同样的速度理解彼此。所以我们在同一个房间，一起解题，我们各自要走下一步，我们正在取得进展。我从没遇到别的人能这样完美地默契。事实上这配合太好了，我们现在都怕见面，因为我们知道一旦凑到一起，就负有对世界的责任去发明某个新想法，那责任太重了，会把我们累垮，所以我们已经多年没见。但当年做的时候，我们真是配合得天衣无缝。我们在普林斯顿那段时期解决了这个平面分拆问题。

[46 - 搬到斯坦福，以及怀疑自己选得对不对](http://webofstories.com/play/17105)
-------------------------------------------------------------------------------------------------------------

人们会问我；我在普林斯顿，人们会说：呃 Don，你从哪儿来？我该怎么说？我从斯坦福休假；我在斯坦福的任职已经正式开始，虽然我在普林斯顿。原因是这样我才有法定资格在那块地上拿地（也就是现在这栋房子的地），赶在别人抢走之前；否则我就拿不到一块中意的地。所以我名义上是斯坦福教授，但没领薪水，因为我在普林斯顿。他们问我从哪儿来，我说我从斯坦福来。他们说：哦，不就是学生刚烧了某某大楼的那所吗？我说：那也许是，但我其实从没在斯坦福住过。所以我在普林斯顿待了一年，离开了斯坦福，然后终于回到这儿，哦，那很吓人，因为我知道，我这辈子只想搬一次家，我以为自己选了最好的地方搬：好图书馆、好气候、能住校园、有好学生、离旧金山近。听起来很棒，可我真到了这儿，心里却在想：现在我把所有鸡蛋都放一个篮子里了。我记得到这儿第一天开车，我们在斯坦福大道一个红灯前停下，我说：哦我的天，我这辈子还要在这个红绿灯前等多少次？我现在意识到自己不再有任何选择了。当你有选择、有很多地方可去时，你总能说：哦那该多好。但一旦你做了选择，你就放弃了所有其他选择，然后你说：从现在起，任何出错的事都可能成为烦恼。关于斯坦福还有些我不知道答案的事，但幸运的是，我真正学到的那些答案都很美好，所以我在这里非常幸福。我是 1969 年夏末来斯坦福的，虽然名义上 1968 年就开始任职了；我想加利福尼亚还让我交了那一年的税，尽管我在新泽西。

[47 - 设计斯坦福的房子](http://webofstories.com/play/17106)
--------------------------------------------------------------------------

在普林斯顿期间，每个周日晚上 Jill 和我都会谈我们梦想中的房子。其实我们第一次约会时——在克利夫兰的图书馆——我们各自开始谈梦想中的房子，结果我们俩有着同一个梦想的房子，所以我们——这就是说我们天造地设的一处；我们想到的是一栋豆形房子。从没建成豆形房子，但我们俩都想过它。总之，我们决定每周日晚上花一两个小时，为搬到斯坦福后想要什么样的房子做计划。孩子们睡了；那时我们有两个孩子——John 65 年出生，Jenny 66 年出生——我们做笔记，最终对每个房间我们想做什么都有了想法。我们回到这儿，当地有很多好建筑师；我们遇到一位叫 Jim O'Neill 的人，非常喜欢他；他倾听，看我们的笔记，没有嘲笑，但温和地指出我们所有计划完全不可行，这些我们计划的三角角落根本行不通。他对光线、对房子如何组合很有感觉，所以他是个很好的倾听者，知道我们真正想要的是什么，而不是我们写进计划里的东西。他善于把这些化约为现实。于是我们开始做计划。那时我们只是租房子住，直到终于能在这里建；但地已经有了。斯坦福有这个绝妙的主意：你能从大学租 80 年的租约，住在校园里；唯一的坏处是你所有邻居都是斯坦福教授——他们往往有点怪，但我们就是这样。我们的一大想法是，房间不该全都一样。度蜜月时我们去看过巴洛克宫殿，见过那种地方：有大尺度的房间，也有小的房间。所以何必让所有房间差不多大呢？我们还去了罗马，看到罗马浴场，说：哦我们得有个大浴室，浴室应该大。我们觉得卧室应该小而私密。所以我们决定，给 Jill 一间大房间做她的艺术创作，给我一间大房间放管风琴（你要是问，我可以稍后多讲点管风琴）。不过到那时我已经在弹管风琴了；在普林斯顿期间，我在西敏寺唱诗班学院（Westminster Choir College）上过管风琴课。所以有两间大房间会很好，然后是小房间，但主要是多样化，让你不会处处都一样。还有很多其他想法，确保我们能看着孩子。我们不想有那种孩子能绕圈跑的房间，因为我们知道那很危险；还有其他各种计划。我们跟建筑师谈；我们坚持的关键想法之一是要有螺旋楼梯，圆形楼梯。那很浪漫。你需要一栋带圆形楼梯的房子。嗯，你在这栋房子里会注意到，我们没有圆形楼梯，但那是 Jim 画各种方案时——方案 1 到 12 都带圆形楼梯——但他就是没法让这玩意儿好用。最后我们决定，好，他有另一个方案，第 13 号方案，基本上就是我们现在这个：一边是 Jill 的房间，采北光；另一边是我的房间。中间是给大家的空间，一个可扩展给孩子的地方。我们希望有更多孩子，还有一个地方能让学生住，各种东西都放在房子的另一部分。不过他不擅长小空间，像擅长大空间那样。我们没有得到想要的小房间，所以后来我们真的在卧室里建了一堵隔墙，把它在视觉上分成两半。这仍是房子的基本理念。我们知道这是一栋我们要住一辈子的房子，希望它适应未来，比如它是两层楼；我们不知道我们中的某个人会不会因为某种原因残废，所以我们确保有地方能装电梯，以防我们需要装电梯上楼。与此同时我们可以用它当送菜升降机，送衣物什么的。然后施工的人来了；那时房子花了将近 10 万美元，被认为离谱地贵。如今当然，你在帕洛阿尔托能花不到 100 万买到房子就算非常幸运了，哪怕很小。但那时这被认为是一栋相当大的房子，我们银行里的钱不够付所有东西，所以木镶板是到一年后才装的，而那时木材价格已经翻倍；管风琴是四五年后才装的。你看我书里，第三卷索引里有"版税，用途"，它指引你到一个页面，那儿有张风琴管的照片。我书卖得好，意味着每卖一本我能得大约一美元；那本书太惊人了，至今每年每天都还卖十本以上。

[48 - 《计算机程序设计艺术》第三卷](http://webofstories.com/play/17107)
------------------------------------------------------------------------------------------

第三卷是关于排序和查找的书，这个领域在我做最终版本时正发生巨大变化。我在普林斯顿时就在想排序和查找。你知道，我写完了第二卷，准备来斯坦福，可我不断得到关于排序的新想法，因为领域在变。所以到斯坦福后，我得教课、开始做以前从没做过的新鲜事，花了一段时间，所以我直到 1972 年在挪威才写完第三卷。那是我度休假的一年。它其实不算真正的休假年，我叫它休假年，但那是请假。我在斯坦福三年了，我想，哦，太棒了，教授们该是干六年然后休假，再干六年再休假。我想，也许我走四年周期吧：干三年、请假，再干三年、休假。这符合斯坦福的规矩。于是挪威大学给我一个邀请，去当一年客座教授；我不需要斯坦福的经济支持，所以我能那样请假而不用担心谁出钱，而且我爱挪威。我们 1967 年去过那儿，信不信由你，那是 1967 年发生的又一件事，我爱上了那个国家。事实上，挪威国歌"vi elsker dette landet"（我们爱这个国家）。于是我去了挪威，就在那儿完成了第三卷，开始做第四卷。那一年我每周三在大学讲课，其余时间待在家写书、阅读、照看孩子。所以最后第三卷问世了，它给"算法分析"这个整个想法增添了新的维度，因为你一开始谈第三卷里的话题，就会发现有很多——虽然它讲的是具体的东西，排序、查找——你学到的经验适用于很多很多别的东西。这就是为什么第三卷对我来说特别重要：我们用来研究各种算法的那些范式、方法，似乎都在排序的语境中产生，所以我能讲一个统一的故事；同时又能教普遍原则、并围绕排序和查找这个特殊主题来举例说明。

[49 - 编写《计算机程序设计艺术》第四卷](http://webofstories.com/play/17108)
----------------------------------------------------------------------------------------------------

然后我回到家想：好，我准备好了，我要做第四卷。第四卷讲组合算法。组合，意思是处理数量庞大的做事方式组合；结果有很多很多问题，人们一直想让计算机解决，因为他们自己解不了。有太多情形要处理，你需要计算机，却没人能想出高效的方法。于是一个好想法就能让一种方法快一百万倍；我在收集所有这些好想法，但人们不断想出更多好想法。这个领域有个东西叫"组合爆炸"（Combinatorial Explosion），对多数人来说意味着问题的规模在迅速、急剧地膨胀。对我来说，组合爆炸意味着组合方法的研究在爆炸式增长。1974、75、76 年我写第四卷时，所有技术期刊上超过 50% 的论文都是关于属于第四卷的内容。换句话说，就像坐在一锅沸腾的水上，你控制不了。我这周写点东西，下周就过时了。就像今天想写一本关于互联网的书。所以写完第四卷看起来不可能。我尽了最大努力，为它收集材料、读章节、做大量笔记；楼上有几百个文件夹装着这些笔记。我开始时有 30 个文件夹，整理得井井有条；然后我做了 X1、X2、X3 直到 X15 的文件夹，不那么整齐，只是系统的扩展；新材料来了，我开始往一堆里扔，说希望哪天有时间读。这个领域发展得太快了。

[50 - 我书第二版糟糕的排字质量](http://webofstories.com/play/17109)
----------------------------------------------------------------------------------------------------

书的出版商对销量很满意。他们说：现在出个新版吧，出第二卷的新版。而我——我彻底修订了它。我在挪威的另一个项目是逐页过一遍；他们把书页做成撕样（tear sheets），我把旧书撕了，说：好，现在把这些内容都加进去。所以第二版我重写了超过一半。然后他们给我寄回第二版的清样，我震惊了，简直不敢相信。它看起来糟透了。排字质量恶劣，读起来很痛苦。你看不下去，因为印刷技术这期间变了。第一版的书是用蒙纳（Monotype）系统排的，涉及大量手工；第二版的书用的是照相法而不是铅字，字母在胶片上定位不很精确，有些比别的深。没有质量控制。下标和公式其他部分的字母风格不同，所以数学看起来尤其糟糕。总之，我不想我的书长这样。我受不了这种东西以我的作品面目出现，而我大学那本微积分书的第一版正是我钟爱的质量。所以我极其沮丧。我不知道该怎么办，又去了趟波士顿，和那儿所有人谈，他们同情我，说：也许他们能找波兰的一些地下人物，也许能做出旧字模的更好副本、做得更好；但我从那里拿到的清样也一样糟。他们正把活外包给世界上这门新技术最擅长的人。旧技术正在消亡。你还能在匈牙利的一些地方、也许印度，找到做数学蒙纳排版的地方，但掌握这门手艺的人已经去世了。印刷业已经转向新技术，因为对报纸和杂志来说它很好用。

用于排字？

用于排字；而对数学，没人在意。数学一直被看作"赔本活"。Addison-Wesley 其实有过最好的数学——他们有个叫 Hans Wolf 的人，在德国学的排版，在马萨诸塞 Addison-Wesley 总部隔壁开了他的字模店，做 Addison-Wesley 所有的书。这就是为什么我喜欢他的书，因为他采用了旧技术并把它做到完美；而他退休了，那些学徒什么的都从舞台上消失了。所以我很无措。与此同时，我在斯坦福，是设计综合考试委员会的主席。学生拿博士前要考两门试，一门综合、一门专业。综合考试要求他们什么都懂一点，专业考试是他们的领域——人工智能什么的。所以每年我们委员会的一项职责是读领域里的新书，看哪些该推荐给学生明年读；有一本 Patrick Winston 的书出版了，还只有清样，但那是本人工智能的书，用一种新方式排版——那排版是在南加州一台完全数字化的机器上做的。不是铅字，也不是照相，而是像素。是比特，就像现在我们所有印刷设备那样；但那时数字印刷不被认为高质量。这台机器由 Triple I 公司制造——我记不清 III 代表什么——它的总部在南加州。这台机器排了 Pat Winston 的书，他们把清样寄给我们委员会看；我一看，这是计算机做的，它看起来美极了。

[51 - 决定做我自己的排字程序](http://webofstories.com/play/17110)
--------------------------------------------------------------------------------------

我正要开始我第一个真正的休假年，计划 1978 去智利学西班牙语；但 1977 年 2 月我看到了 Winston 这本书的清样，我知道它是用像素、用比特做的，那是一个计算机科学解法。这意味着这些像素是 0 和 1，在页面每一处微小的地方，你说墨，是或否，是或否，0 和 1，那就是一台计算机。所以印刷突然从冶金学家的问题、从光学——摄影、镜头——的问题，变成了计算机科学的问题，一个关于 0 和 1 的问题。突然间，高质量印刷只是写个计算机程序的事。而世界上如果谁最擅长处理 0 和 1，那就是我，对吧？总之，我看清样看了很久，而我父亲地下室里就有印刷机——我还没提这个。所以我对字体有兴趣，而且现在我看到这是计算机科学问题。于是我改变了我整个的人生计划。我给智利那边的人写信说抱歉，我得留在加利福尼亚，因为我们这儿有特殊设备，我接下来一年工作需要用到它。我要尝试自己用 0 和 1 来印我的书，而不是用任何照相或金属方法，然后我就对它有了完全的控制；如果技术再变，我也能挺过变化，因为东西在数字形式里。那是在我 2 月看到 Pat Winston 书的清样一周之内，我决定留在斯坦福度休假年，做排版工作。

[52 - 做我的排字程序（上）](http://webofstories.com/play/17111)
-------------------------------------------------------------------------------------

1977 年初，我头三个月在写第四卷的一部分。我把第四卷的阅读材料都读完了，准备好终于打一些页面了，我打了一百多页；但与此同时，那正与我发现数字排版（能从计算机输出得到好质量）的时期重叠。所以我的计划本来是去智利，花一年做第四卷——我第一个真正的休假年——我取消了它，留在斯坦福，从 77 年 4 月起把第四卷搁置，开始说：让我花一年写让我的书重新好看的计算机程序吧。所以首先我想，我在施乐帕洛阿尔托研究中心（Xerox PARC）见过一些人玩字形，尤其 Butler Lampson；我记得坐在电脑显示器前，屏幕上有个大大的字母 B，他在看沿着 B 边缘的样条曲线。我想：好，那挺容易，我把书里所有字形捕获下来，去施乐用他们的设备，写个程序重现《计算机程序设计艺术》的格式，我有一年可挥霍，就这么做。结果头一个出错的是，施乐说：哦对，你来用我们的设备没问题，但我们拥有你生产的所有字体。我说不、不，我想要这些——这些是数学——我是说我从这儿出来带着一串数字，说明这些字母边缘在哪儿，可它们只是数字。你怎么能拥有这些数字？数字属于全世界。所以我决定改在斯坦福做。斯坦福设备不太好。我们有些旧电视摄像机，房间光线稍一变化，字母就会变深 50%。所以一天的工作和另一天的工作之间根本没法保持一致，而一致性对得到好看的字母极其重要。

[53 - 做我的排字程序（下）](http://webofstories.com/play/17112)
-------------------------------------------------------------------------------------

我决定改去斯坦福，而那时斯坦福在山里有一个很棒的人工智能实验室，由 John McCarthy 主持。他欢迎我去那儿做任何我想做的事，那一年待在那里是很好的工作场所，但和施乐的设备相比，我们设备不太好。我们有能用电视摄像机，但房间里光线稍变，字母就会在细和粗之间剧烈变化，所以一天和另一天之间没法保持一致。我应该提一下，我的出版商给我寄来了以前各版书印得极漂亮的副本。我所谓"印得极漂亮"指的是：书实际生产的方式挺有意思。用蒙纳，他们先铸铅、印一份，然后把那份完美的样张拍照、用那胶片做胶印，效果很好；但他们保留下了从铅上来的原始样张，所以给我寄了 50 页真正绝对的、之前各版书所用样张的定稿。我拿着这些去 AI 实验室的电视摄像机，但怎么也得不到一致性。所以我不知道该怎么办。我跟 Jill 说，她说：呃，她能做点好幻灯片；她能把那些页拍下来，做成 35mm 幻灯片，会很清晰，我们可以看用这个能做什么，而不是用电视图像。我们试了，然后我拿出我的家用投影仪，从走廊尽头把 35mm 幻灯片投到墙上，让它足够大，我能在纸上描出字形。但图像非常模糊。放大那么多，我们没有任何现在放大东西的手段——胶片扫描仪什么的都不存在。当然我们没有那种设备。所以我坐在那儿看着，试图描字母、弄清形状，忽然我想到：这些字母其实是一个脑子里有想法的真人设计的；只要我能琢磨出那个人脑子里想的是什么，我就能写出匹配那人意图的数学公式。这是个古怪的梦，但总之，我很天真，以为这样就行；如我说过的，高中时我在图形、以及形状和产生形状的数学公式之间的关系上玩了很久。所以我拿着铅笔和纸，试着从投在墙上的模糊幻灯片上描轮廓时，注意到很多规律。比如我注意到字母 n 恰好是 i 的两倍宽，字母 m 恰好是 i 的三倍宽；好，很棒，这里有一致性——如果你有个像 minimum 这样的词，所有这些竖直笔画都以完全相同的间距出现。还有 u 和 n 一样宽。于是我想到，如果我能弄清字体设计师用的所有这些原则，用数学捕获它们就不算什么大问题。所以，与其只是复制旧设计的输出，我整个焦点转向：我试图发现它背后的智慧，把这种智慧编程进计算机，这样你能告诉计算机"画一个 m"，它就画一个 m；但我还能说"现在加粗一点、加高一点、收窄一点"，它会正确地把一切适应过来。对字体设计师来说这是个古怪的概念。字体设计师总是用完全视觉的方法，没有数学——可能谢天谢地，因为他们做出了漂亮的字体；但不管怎样，我天真地以为这会很容易。当然，我的目标是在休假年后把第二卷交给印刷厂。我有一年时间来写这些程序、捕获字形、弄清怎么排版它们。

[54 - 研究排版史](http://webofstories.com/play/17113)
----------------------------------------------------------------------------------

我不会盲目投入这整个项目。我想避免几乎每个工程师用技术对待某物时都会犯的错误，那就是说：算了吧，过去都过去了，全是新世界，把旧东西扔掉、一切重来。所以我不想以任何方式脱离旧传统。我有用数学捕获过去的这些想法，但我不想扔掉过去，所以我在图书馆做了大量阅读和研究。斯坦福有最好的精印书籍收藏之一，在其善本部叫 Gunst 收藏。所以我花了大量时间读我能找到的所有排版书。另外，我和妻子是斯坦福图书馆之友协会的成员，我们去萨克拉门托旅行，看到了谷登堡圣经和各种排字样张。萨克拉门托蜜蜂报社办了一个关于排版史和精美物品的展览；我们还拜访了住在山里、自己有印刷机、收藏排版书的人。那是趟进"黄金之乡"的两日游；我盯着看到的每一个字母，说：我怎么才能把这个捕获进计算机？这一切都发生在 1977 年春天。

[55 - 做我的字母，以及 S 的问题](http://webofstories.com/play/17114)
----------------------------------------------------------------------------------------

1977 年 6 月我的休假年开始，课结束了，我准备好开工；我已经勾勒出用小写字母 A 到 Z 配合数学规格的办法，我想：好极了，这会解决我的问题，因为我能通过规格的微小变化做出各种尺寸的字母。好的字体设计不只是把九点的字母做成十点字母的十分之九，还把它们做得稍宽，字符的灰度微妙变化；但我能用参数来设计程序，做出这些变化，把每个字母按每种尺寸正确画出来。这对计算机科学家来说是很自然的事，因为我们总习惯用参数来指定东西。我们有任务要完成，有些东西是可变的，我们转动那些刻度盘，就得到不同的输出。但我惊讶地发现，后来和图形业的人谈话时，他们从没听过"参数"这个词，以为它指"周长"；我是说——但计算机人觉得这再自然不过了。总之，6 月中旬我做出了 26 个字母里的 25 个，它们不算美，但当时在我眼里已经相当接近可以了；然后到了字母 S，我怎么也想不出怎么画这个该死的 S。它的形状很特别，从曲线过渡——向左弯、又稍微向右、再回来，这形状里发生了什么？我的数学公式没有一个能应付它；我在实验室好几天不睡觉，试各种办法，每次看起来都很丑。最后我只好回家、上床睡觉；我把结果给 Jill 看，她对我说：呃 Don——你为什么不让它呈 S 形？这就是她对我问题的解法。哦天哪，我该怎么办？但最终，过了我不知道多少天，连着夜晚算上，感觉像过了一个永恒，我想到：我可以回到一个希腊人也许会喜欢的几何问题——椭圆。如果你有个椭圆，试着让椭圆大到恰好使下降的切线以正确的方式相交——这会变成一个对欧几里得或谁来说有趣的问题，虽然我不认为它会出现在他的著作里。这会是一个真正算出来的办法：椭圆构成 S 的一部分，当它到达这条切线，我们就沿切线离开、到 S 的另一部分。于是我终于有一个数学公式，看起来像 S，我能改一些参数，它会看起来像个略不同的 S，等等。但在想出那个公式之前，我在想：也许我能改我的书，试着完全不使用字母 S？但那我就得离开斯坦福了。所以我会——我去 Safeway 超市，他们有个好笑的 S；我到处看各种不同的 S。但最终解决 S 的问题——顺带一提，我从来没解决美元符号的问题。我的美元符号至今还很丑，我在等新想法出现；但说真的我对美元一直不太有兴趣，所以没花太多天去弄它。

[56 - 弄清怎么排版，以及规格的问题](http://webofstories.com/play/17115)
----------------------------------------------------------------------------------------------------------

然后我有 26 个字母了，但我得继续弄清怎么排版、怎么把它们放上页面，所以我停下字体工作，开始想：我现在要怎么指定我的书？这是非常早期的日子，现在有各种软件做这个，但当时谁也没有，除了报业写过一些好程序，尤其《美国新闻与世界报道》和《新闻日》（News Day）；写那些程序的人是我朋友的学生，所以我去找他们谈。我看了可用的程序，看了曾用来排被我扔掉的那版第二卷的程序。那个排版在北爱尔兰贝尔法斯特由一家在商业数学排版方面首屈一指的公司完成，他们懂行，只是他们的系统输出没有好字体可用。所以我看了那套系统，看了贝尔实验室开发的一套，以及其他各种系统；然后我坐下来，拿了我书的十个样本页面，说：只要我让这些页面跑起来，就能处理我需要的所有格式了。事实上这些只是页面的片段，但我的书里有各种不同的东西——从普通文本到数学公式、算法、计算机程序、表格、图表，所有这些不同的排版特征——但它们归结为四页内容，其中变化很多；我坐下来，说：好，这就是我想如何指定这四页样本文本，供一个能工作的排版系统使用。我熬了一个通宵，打出这种试验性语言来捕获我的书；然后唯一的难题是想象一个计算机程序，能从这个输入走到页面上的 0 和 1。那就能成了。于是我又熬了一夜，写下这种语言的规则，几周后给一些朋友看，修订了这些规则。然后到了 7 月中旬，该去中国了。我和一些别的人——我妻子、孩子，还有另外三个人——我们去了趟中国。那对当时中国来说是相当早的时期。毛泽东去世还不到一年，但我们受邀在中国各地待三周、看看这个国家，那是个独特的机会；对我的孩子们来说，他们是当时第一批获准进入中国大陆的美国孩子。所以那就是我的暑期计划。那年夏天我有两个学生助理，我把我的排版语言规格交给他们，那时我叫它 TEX（现在读作 Tech），但一开始它叫 TEX；我以为从中国回来后他们就会让计算机程序跑起来了，然后我就能做我工作的下一部分。嗯，我在中国玩得很开心，回来了，但令我惊讶的是，他们连一页都还没做出来，一个测试页都没完成；嗯，另一个学生在单词断字问题上有些进展。我有点惊讶原来这这么难，我原以为我的规格那么清楚。这是我领教为什么这么多软件项目会失败的原因——人们以为规格很清晰，但真的，一旦你试着把那些对真人来说似乎清晰的规格翻译出来、讲给计算机听，就会出现你从没预料到的各种问题。所以这儿学生们——每次他们遇到我规格里一个新部分，就会出现一个问题，而他们没法问我，因为我在中国。于是他们只好互相商量：他这句是什么意思？他怎么想的？如此等等，一次碰头会。然后他们解决掉，再干半小时，又冒出另一个这样的问题，一遍又一遍。所以他们在我离开期间做完了那么多，简直是个奇迹。总之，他们确实给我看了他们写的程序，这给了我一个想法，关于架构、结构，我以后自己写真正程序时可以用。然后他们回学校，我回来，我开始认真编程。

[57 - 为 TeX 编程，以及第一次使用结构化程序](http://webofstories.com/play/17116)
-------------------------------------------------------------------------------------------------------------------------------

我开始用一种以前没做过的方式编程。70 年代发展起一种编程风格叫"结构化编程"，它让人更容易写出可靠的、你能边写边理解的程序；我在小规模上做过一些实验，但这将是我用结构化编程方法写的第一个大程序。新地方在于，我写程序时，不觉得需要在写的时候测试每一部分。我可以一直写啊写，假设全部写完后，它会相当接近能工作。实际上发生的是，我 9 月或 10 月开始写，一直到次年 3 月，我都没把任何程序输进计算机、测试或调试；这么多个月过去了，我不觉得需要原型或什么——大多数程序员写东西时，会拼凑出一个东西，那只是程序的一部分，然后他们会搭出缺失部分的"架子"，让某些假装那些缺失部分在的东西在写它们之前就存在；但后来那些部分真的写好了，他们就能继续，并且不断建立更多信心。而有了结构化编程，我已经有相当信心，所以不觉得需要搭那些额外部分的架子，这省了我大量时间，因为搭架子的时间我再也不需要了。但有时我得承认会有几分怀疑：从我写程序到我真正能试它，隔了五个月；但你看，我没法提前试。我必须搭架子的东西之一是整个字体问题。没有字体我无法排版，而那些字体也得我写；那五个月里有三个月是在做字体。

[58 - 为什么程序的设计者和实现者应该是同一个人](http://webofstories.com/play/17117)
----------------------------------------------------------------------------------------------------------------------

要让第一版 TeX 跑起来，我还得准备好字体、字形；五个月后我终于有了能测试的东西。但两天后我就明白为什么我的学生没能走得更远了——因为我在开始写代码时，必须不断改变这门语言，每小时改好几次。要是学生来做——我的几个朋友试着管理软件项目，他们定下规格，对学生说"写代码"，从不奏效，现在我知道为什么了：因为学生得预约。每隔几分钟学生就得跟教授约个时间讨论那个问题，然后教授得花 15 分钟进入状态、理解问题是什么，或者他会说"哦对，这么做"，然后学生能回去再干五分钟，直到下一个问题冒出来。所以就是没完没了。当你做的足够多，像这样第一代软件，我认为只能这样：设计者和实现者必须是同一个人。

[59 - 把第二卷转成 TeX，以及实现者/设计者应是自己程序的第一个用户](http://webofstories.com/play/17118)
------------------------------------------------------------------------------------------------------------------------------------------------

到复活节时，接近我休假年的尾声，我终于能排几个样本页面了，我的测试程序跑起来了，但第二卷离完成还差得远。不过已经到位的东西足够让我看到这是可能的。我想我应该提一下，我没想到我在设计的这个排版系统会有世界上除我和我秘书以外的任何其他人使用。我的想法是，我会教 Phyllis——她做了我将近 20 年的秘书，我把我的一本书题献给了她，那是另一个长故事——总之 Phyllis 和我将成为这个 TeX 系统的用户，我努力让它——我知道她能学会，但我努力把它设计得刚好够做我的书，不做别的书。所以下一阶段是，我得把整个第二卷手稿过一遍；我写了个程序，从贝尔法斯特系统转成我的新系统，那会是一个接近的近似，然后我开始了。那是几个月的工作，那是一本 700 多、700 或 800 页的书。但这段时期我又学到一个重要教训。系统的设计者不仅该是第一个——对实现者来说，他也必须是第一个用户，因为我真的在使用这个系统时，总会不断得到怎么改进它的想法；如果我不是重度用户、而只是个设计者，我就没有经验去知道那些特性为什么有用。所以我这段时间一直记录我对系统做的所有修改，也知道我排了第二卷多少页。我过后把它画成图，它几乎是完美的一条直线。每排四页，我得到一个新想法——我排 200 页，那就是 200 除以 4，有 50 个新想法。它是一条直线，直到我排到大约 500 页，然后就平了。之后全是枯燥。我是说，过了某个点，就没有学习曲线了。我知道所有需要改进的东西，但开始时做的那许多修改，对所有未来的系统用户当然都很重要，虽然当时我不知道系统会有任何用户。

[60 - 为 TeX 写用户手册](http://webofstories.com/play/17119)
------------------------------------------------------------------------

不过 AI 实验室是个很开放的地方，有几十个人和很多访客，门都不关，所以人们看着说：Don 你在干什么？他们看到从印刷机里出来的这些有趣东西，所以很快大家就知道我有一个能排出版的样子几乎像真书的系统。其中一个访客是 MIT 的 Guy Steele，他说：Don，我想移植这个系统，我想改改它，让我们在 MIT 也能用。我想：哦我的天，我该有别的用户吗？但到这时我能看到，有足够多的人对它感兴趣，我最好写本手册，加以扩展。不会只有 Phyllis 和我用它了。于是在 78 年夏天我写了本用户手册；有点意思的是，我们那台计算机极其不可靠。有四个人——我们有四位真正杰出的计算机科学家每天改进操作系统，但正因为他们每天改进，它每天也崩溃，因为他们会犯错误。所以我在计算机停机期间写了整本用户手册。我早上九点上去，计算机九点半崩溃，我打开我的笔记板写另一章；计算机十点或十一点恢复，我能多做点工作，直到它准备好让我写下一章。我在那儿又学到一个教训：如果你有个一直在改进的系统，没人能用它。我稍后会再多谈谈软件的稳定性。操作系统工作的预算第二年用完了，所以这四个人里三个去了利弗莫尔做另一个系统、另一个项目；第四个人 Marty Frost 留下，他的工作不是再做改进，而是确保它稳定、可靠。所以，78 年之后系统不再改进，那是最好的事。我也把一本书题献给了 Marty。

[61 - 与美国数学会合作，以及做 Gibbs 讲座](http://webofstories.com/play/17120)
----------------------------------------------------------------------------------------------------------------------

我把用户手册准备好，美国数学会（AMS）的访客来了。他们有着糟糕透顶的排版问题。他们是世界上最大的数学出版商，努力在自己的期刊上做到最好，但他们的期刊看起来糟糕，就像我的书一样。他们对那种状况很不满，所以他们听说了关于我的系统的传闻。连他们最有声望的出版物《数学评论》（The Mathematical Reviews），一家非常昂贵的公司排的，那家公司也没法完成他们想要的所有操作。所以他们来拜访我两周，看了我的系统；我给他们看了一些样板，看我们也许能像排《计算机程序设计艺术》那样排期刊。随后我受邀做美国数学会的所谓"Gibbs 讲座"。每年它都是主年会上的主要特邀讲座之一，演讲者通常是纯数学家，但每四年他们会请一位更偏应用的；爱因斯坦就做过其中一个讲座——所有那些辉煌的数学倾向的物理学家都做过——所以能被邀请做 Gibbs 讲座是相当了不得的事。我决定我的 Gibbs 讲座不讲他们预期的计算机科学内容，而要谈排版，所以我的 Gibbs 讲座是关于数学排版的。不过当时我的第二卷字体还没全做完，只做到能测试系统的程度，要精调、让它看起来高质量还有很多工作要做。但我还是能做 Gibbs 讲座——那是 1979 年初——它在听众中大受欢迎，所以我知道外面也渴望人们能更好地排版数学。

[62 - 开发 Metafont 和 TeX](http://webofstories.com/play/17121)
----------------------------------------------------------------------

有人建议我把它叫 Metafont，因为那不是我自己编的——我想也许是 Bob Filman，但我不太确定；我们在实验室看这些时，总有很多访客、总有人跟我说话，而这个名字很好，因为参数。我不是只设计一种字体，我设计的是随规格变化的字体——它随不同规格大幅变化——所以有很多像"元数学"（metamathematics，意为稍稍超越数学）、"形而上学"（metaphysics，希腊语里其实意思是"物理学之后"）这样的词；而 Metafont 这个词结果相当贴切。它有点像变形（morphing），你能从一种形状过渡到另一种，所以我想到的是"变形"（metamorphosis）。但我最初的字体程序是：每个字母由一个用计算机语言写成的特定程序画出。我必须改变这个，这样我能为字体专门设计一门特殊语言，让修改和设计更容易。不用像 ALGOL 那样的代码，我现在能用这种 Metafont 语言写，然后我有一个解释器读 Metafont 语言、画出形状，而不是原来那种调用子程序来画形状的方式。所以这是和以前存在的任何语言都完全不同的一种语言；但我在 1979 年做出了 Metafont 语言的第一个设计。随着用户数从一个人增长到十个人，我需要改变系统，因为他们发现了不同的 bug、需要不同的设施。然后它从十人增长到百人，我又得给语言加更多东西。这时它叫 TeX 而不是 Tex，因为已经有一套叫 Tex 的系统；Honeywell 拒绝允许我们用那个名字，尽管他们的系统是操作系统、不是排版系统。我们不能用。于是我们说：好，这不是 Tex，这是 TeX，这是希腊字母 Tau Epsilon Chi，根本不是英文词，只是碰巧看起来非常像英文词 Tex。我们叫所有用户把它读作 TeX，但他们的律师不觉得这算多大区别，所以我们在纸面上留着：如果他们想告我们，我们——我们没有注册官方版权，只有版权，不是注册商标。而 Metafont 是注册商标，没人抱怨那个名字。我刚想说，当我们用户数增到十倍时，就需要回头重做系统。这可能是个太长的故事，所以我最好开始总结。TeX 的第一个版本，一个原型版，叫 TeX 78，因为它 1978 年问世；然后 79 年有 Metafont，但这些和我们现在的 TeX 和 Metafont 系统大不相同。这些是最初版本。我还有一条建议的政策：如果你在做第一代软件，让它跑起来、尽最大努力、试着做到完美、获得大量经验，然后扔掉它、重新开始。把它扔掉，别担心和旧的兼容，因为未来的用户会比过去多得多——即使过去可能有几千用户，未来会有成千上万，他们都会感谢你有一个更好的系统。不过第二个版本我会保留。现在有太多东西投资在里面了，我确信我再也不会想用一个和我这么多年来一直在用的系统不兼容的系统。好，这带我们到了这样一个时刻：突然我们有了来自世界各地的用户，甚至有一群人来到斯坦福看这个系统、试图让它跑起来——起初它在 MIT 跑，但后来它跑在世界各地几百种不同的计算机上。

[63 - 我为什么选择不保留 TeX 的任何权利，以及把它从 SAIL 转录成 Pascal](http://webofstories.com/play/17122)
-------------------------------------------------------------------------------------------------------------------------------------

从一开始我就决定不保留这个系统的任何权利，除了"谁都不许乱动它"这项权利。任何人都可以免费使用我的系统，只要他们不做任何改动。它必须完全和我这个系统兼容。而且我不想收任何费用。如果这是我一生中唯一做的事，我大概——我肯定会另有想法，但我见过专有做法让印刷业年复一年倒退的情形。有五六种不同的商业系统描述文本页面，每个人都以为自己的系统会被全世界使用，而它们彼此完全不兼容，不同系统不能用不同字体。简直一团糟。所以我在想，早期编程语言时代，IBM 没有把 FORTRAN 保留为 IBM 专有语言，他们允许几十家厂商做自己的 FORTRAN 版本，那对计算机的使用是巨大的福音。我能看到，如果我不保留对这个系统的专有权利，印刷业也会发生同样的事；我也把我所有代码公开，让人能读它、看我做了什么、给它找错，如果有人找到错误我还付钱。于是世界各地冒出成千上万的志愿者，帮我改进这个系统。

这是不是你发明 Weave 和 Tangle 的时候？

是的，文学编程（literate programming）的想法，Weave 和 Tangle，是之后不久 1982 年出现的。首先，我的程序是用一种斯坦福独有的语言写的，叫 SAIL，即斯坦福人工智能语言。没多少人会用它，所以起初要在别的机器上跑很困难，除非他们碰巧有一台带 SAIL 编译器的 PDP10 计算机。这就是为什么早期 MIT 是首批用户之一，这种计算机和系统有不少安装，但它没跑在太多不同机器上，我想 IBM 大型机就跑不了它。然后一个学生转录了我的代码——那是 Iñaki Zabala，把我的代码转成 Pascal，我想 David Fuchs 和 Art Samuel 也和他一起做了这个。总之很多人都在做这个，我自己没做，但他们把我的程序从 SAIL 语言转录成 Pascal 语言，然后它就能在每台计算机上跑了，我们于是有了几百个不同的用户；然后我们开始每年开一次会，来自世界各地的人交换信息。

[64 - 精调我的字体，以及为 TeX 找资助](http://webofstories.com/play/17123)
-----------------------------------------------------------------------------------------

用户多了之后，我意识到最初的、我的原设计太天真了。我得回头重做它们；而就在做的过程中，我同一时期遇到了文学编程的想法。但我得先把这个放一放，因为与此同时，用 TeX 78 和 Metafont 79 这些旧系统，我也想精调我的字体，好真正匹配字形；我读了很多关于字体设计的书，学了更多字母的历史；我也在业界和人们交谈会面，比如莱诺（Linotype）、Mergenthaler，他们把我介绍给字体设计师，尤其我认识了 Chuck Bigelow、Matthew Carter，最后还有 Hermann Zapf，他们是这行四位领军人物中的三位。第四位 Frutiger 我从没见过，他病了，但他要是健康我是能见的。总之他们帮我把设计里最糟糕的毛病剔掉；有了 Metafont 79，我就能借助他们的意见修订我的设计。我还得买一台排字机，所以我跑遍世界各地，去那些有各种实验性排字机的地方；我们终于买到一台，叫 Alphatype，它是我能买到的分辨率最高的机器，而且我们买得起。它花了我们，我不知道，4 万或 5 万美元。我想 Addison-Wesley 付了其中 2 万。我们捉襟见肘地运作，但后来我们得到了很好的研究资助。我受国家科学基金会（NSF）资助做算法研究，据他们所知，那是我休假年要做的事；我说，我的算法研究将有以下七个部分。前六部分是研究各种组合问题的算法；第七部分是我还要研究排版的算法，好让我能解释我资助里前六部分所做的研究。说真的，我几乎把所有时间都花在第七部分上，因为我其他研究基本已经做完了，所以我能把别的东西留在我的进度报告里，却全职做着排版。所以他们是从后门支持它的。后来系统开发基金会（System Development Foundation）得知了这件事。我和 NSF 的人见面，坦率地谈了这个需求，他们说：你为什么不向 NSF 的另一个部门提个提案，在我做 Gibbs 讲座之后做数字排版呢？于是人们知道了，我从另一个部门也拿到了 NSF 支持。但系统开发基金会是个特别的东西，他们想明智地花掉一笔从南加州系统开发公司 Sage 项目留下的钱；他们支持了像斯坦福音乐与声学中心这样的东西，给了我 100 万美元——用他们首席财务官的话说，他想给我这笔钱，好让我能完成 TeX 的工作、回到《计算机程序设计艺术》。所以最终我有了很好的资助，但早期我们绝对不宽裕。于是我得到世界顶级设计师的建议，他们看字母、用红笔在上面做标记，然后我修到他们满意为止。我弄到这台 Alphatype 机器，而为了运行它，我得为机器内部写我自己的软件。它里面有一个极小的 8 位计算机，有六层中断，我得给它写我自己的汇编程序；它内存极小。我们得用小小的 Zilog 机器从我们的主机传给它。所以这特别好玩，也非常令人沮丧，因为这机器又聋又瞎，要花大量功夫才能让它跑起来。最后我终于能在 Alphatype 上排版了，我的页面看起来高分辨率、比我以前做的好得多。所以，经过所有这些工作——我 1977 年开始，持续的时间远超过我以为的一年——我终于把第二卷完全准备好，在 Alphatype 上印出来，可以寄给 Addison-Wesley 让他们拍照、用胶印印刷。

[65 - 第二次尝试印刷《计算机程序设计艺术》第二卷](http://webofstories.com/play/17124)
--------------------------------------------------------------------------------------------------------------------

我本来期待那会是我一生中最伟大的日子，书在 1981 年 1 月到了——我期待那会是最棒的时刻，翻开这本书、庆祝。我终于完成了这个项目。嗯，结果那是我一生中最糟糕的日子之一。我翻开书，一点也不喜欢我看到的。我是说，它是旧装订，但当我看着、翻开它，它看起来完全不一样；我从看到的清样里原以为它会不错，但我感到——看着它时我能感到一阵巨大的热流涌上来，说：哦不。我花了这么多时间，就得到这个？我试着——人们说"干得好 Don"什么的，但我没法相信他们；我内心在说：天哪，离把它做到像样还差得远呢。最糟的是数字：如果你不那么挑剔，大多数页面看起来还行；但当你翻着书、找某一页、看数字，或者你的眼睛聚焦在数字上——我调试了 A、B、C、D、E，但 0、1、2、3、4 我没花多少时间，天哪，那些数字真是丑极了。所以我不得不又过一遍——首先我搞不定字母 S，现在又搞不定 2 或 5；所以我会——路上看到所有 25 英里时速的限速标志，我会说：他们是怎么做到的？总之，我为此沮丧，知道还有那么多要做的。但我有世界各地的大量用户，他们不知道我为这个沮丧；所以我试着——但我的字体设计师那时说：看，Don，字体设计师的学徒期总是五年，你才做了两年，你怎么能指望两年就成功呢？他们对我非常好；通过我们现有的资助，我能邀请他们来斯坦福、和他们共度时光、向他们学习我本该怎么做。这时我发现，图形艺术家是我到目前为止遇到的最善良的人。所以这是件大好事。我没法兼顾在斯坦福的所有教学，我不是在度休假，但我发现做软件比写书、写研究论文难得多。它需要另一种程度的投入——你必须在做软件时脑子里同时装这么多东西——以至于这段时间我不得不从斯坦福请好几个学期的假，暂停常规教学。

[66 - 文学编程](http://webofstories.com/play/17125)
---------------------------------------------------------------

与此同时，我也在做出 TeX 的定稿版，还有这个文学编程的想法。现在让我回到你刚才提到的 Weave 和 Tangle 的故事。回想起来，我觉得这所有排版工作对我个人最大的好处，是这个我决定叫"文学编程"的想法——它把计算机程序当作文学来对待：计算机程序是人应该去读的东西，你为让人读而写，而不是为让计算机读而写。所以我写程序时，是在当老师。我爱当老师。我不只是教计算机，我在教我程序的读者；而且，我希望有朝一日会有个"普利策奖"颁给最有文学性的程序，等等。我先是实验性地做这个，因为我朋友、牛津的 Hoare 教授说：Don，人们从不读计算机程序。牛津大学出版社有兴趣也许出版一些计算机程序，作为应该怎么做的范例，好让计算机程序不再只是这种隐藏文档，而是能像其他文学那样摆出来给人研究、评论——就像乐谱：人们出版交响乐的乐谱，不只是听交响乐，那为什么我们不能出版计算机程序呢？他种下这个想法，但它吓着我了，因为说真的，现实世界里的计算机程序充满了妥协。一个计算机科学教授不能承认写过那样的东西。我们能写很短的、真像小宝石的程序，也能假装写大程序时它全都有这种宝石般的特质；但事实上，我想任何大程序，作者当年写出来时都不会骄傲地愿意让别人去读。所以我也在想：我怎么才能写一个让人乐于阅读的程序？于是最终这个文学编程的想法成长起来，我能看到一种格式，让程序能呈现给别人；从中出来的最伟大之处是，我作为程序的作者也能更好地理解它。所以最终我有了这个系统：我以一种 web 语言写程序，然后有两个计算机程序处理它，一个从 web 语言到当时 Pascal 语言的计算机代码，另一个从 web 语言到我能读的文档，里面排版精美、有交叉索引和展开叙述。这个系统——它至今每周都给我带来快乐；我用 CWEB 写程序，它是原 web 系统的后代；能用这种我觉得如此正确的方式编程，是我持续的乐趣源泉。
[67 - 用我收到的反馈重写 TeX](http://webofstories.com/play/17126)
---------------------------------------------------------------------------------------

我用了文学编程从零重写 TeX，加了——改了很多用户觉得别扭的地方，加了他们需要的特性；TeX 82 作为定稿版问世，至今和我们今天几乎一模一样，只是多了些面向欧洲语言的特性。所以我终于得到一个我能相信会稳定的系统，并且有理由——这段时间我绝不是独自工作，我不仅有自己的研究助理，还有来自斯坦福社区的很多志愿者；我们每周五碰面，午餐时带便当，但常常一待就是两三个小时。我在开发新系统 TeX 82 时，手册有 22 章，我写手册每一部分时，都和这群人讨论：它真该是什么样？所有那些问题——我从很多人那里得到意见，而且不只是斯坦福的人，校园总有访客，所以我们有来自世界各地的人参加这些会议，既有字体设计师也有数学家；这些会议在我们后来多年精调 Metafont 语言时一直持续。所以我接触了大量各种不同的意见，但必须由我做最终决定。我知道我们有——我之前谈过"蔓延式功能膨胀"：每个用户都想要自己的东西；我也知道"委员会设计"：如果一个委员会对某个东西负责，委员会里每个人都要觉得语言里有一部分能指着说是自己的，结果得到的语言通常相当不统一。所以我坚持由我来当所有想法的过滤器，由我实现一切；但我的确允许很多人表达意见，最终决策权留给自己。裁决者说了算，基本上就是这样。我写这个程序时让它永续存在，不是总在改进——因为我那些"一直在改进的系统"的经验——所以我想要：如果某人在 1982 年用 TeX 82 创建了一份文档，他在 2002 年也能运行它，并在世界每台计算机上得到同样的输出；这个理想基本实现了。我还在书里出版了那个程序。全部代码是一本 600 页的书，《TeX, The Program》；我想世界上懂那个程序的人比懂任何同规模程序的人都多，因为它是用这种文学方式写的；在各国都有人看它、搞清它怎么工作、看到他们能如何在自己的程序里运用类似技巧。这本书没有版税；唯一有版税的是人们买的用户手册，而那些版税与 TeX 用户组（TeX Users Group）共享，这是一个国际用户组织，用于他们推广这种语言使用的项目。

[68 - TeX 稳定的重要性](http://webofstories.com/play/17127)
------------------------------------------------------------------------------

这在某种意义上可以说是开源软件运动的诞生，开源近来非常流行；但它不同于所谓的 GNU 公共许可证（GNU GPL），后者如今在大多数开源东西上都非常成功。有一个方式很不同，对我非常重要：就是这种开源 GNU GPL 软件带着这样的说法——任何人都能改它；不只是任何人都能用它，还能随心所欲地修改它。我不允许人们改 TeX，除非他们叫它别的名字。所以，如果你给它任何别的名字，你就自由了可以去改；但如果你叫它 TeX，那它必须和所有人的 TeX、和我个人提供的那个完全一样；我有特殊的程序用来验证你是否正确地实现了 TeX。所以这和开源不同。事实上，有人曾看我的一种字体说：哦我能改进它，我改一点点间距；结果我的书突然排版不一样了；而 Linux 的早期发行版之一包含了他所谓的"改进字体"，我突然从我的合著者那里得知，他得到了不同的段落行为，我们追查到一个看起来像改进的东西。这就是当任何人都能修改时会发生的事——就像现在的维基百科：你去维基百科，看任何条目，有个小按钮写着"编辑"，你能改那篇文章的任何地方，它就在维基百科上了。他们甚至不问你是谁做的修改。我认为维基百科极其成功，但它如此脆弱——如果我花大量时间给维基百科写一篇长文章，想确保没人搞砸它，我就得每天检查那篇文章确保它还正常；做完那个之后我又想继续去做生活中别的事。而 TeX，我尤其迫切地要稳定，因为人们依赖它作为一个可以建造的固定点；所以在这一点上，我和 GNU GPL 不同。

[69 - LaTeX 与 ConTeXt](http://webofstories.com/play/17128)
------------------------------------------------------------

我开发 TeX 时让它支持许多更高级的不同格式，所以 TeX 是一个人们可以在其上建造的固定点；人们在其上建造的主要方式之一就是 LaTeX，以及多年来不断改进的 LaTeX 的各种版本。另一个非常重要的系统远超 LaTeX，叫 ConTeXt；我不知道他们怎么读这个词，它来自荷兰——在荷兰他们有种很有趣的发音——但当然最流行的是 LaTeX，LaTeX，作者从没决定怎么读它；我自己不用它，但我知道很多人真觉得那是对他们最方便的语言。所以我开发了基础系统，让它支持特殊项目的许多不同风格。如果有人想写一本汉冰词典，他们可以做出一个对自己真方便的格式；有各种各样的学术版本、各种版本，所以我努力让它容易在其上构建不同的结构。当我妻子和我用特殊格式做家族史报告、厨房里的食谱什么的，每个在你输入计算机文件时看起来都不一样，但 TeX 是所有情况底下的引擎。

[70 - TeX 项目的总结](http://webofstories.com/play/17129)
-----------------------------------------------------------------------

整个事情始于 1977 年我独自工作；然后 78 年我们开始有其他用户，79 年有了 Metafont，81 年出版了新格式的第二卷。这段时间来了很多用户，我也接触了好字体设计师。然后我得重做所有字体，也得有一种更好的字体语言，所以 1983、84 年我对 Metafont 语言做了重大修订，那时 Hermann Zapf 来住了几周，他教了我很多我需要知道的东西，也帮我精调 Metafont 语言的新版本。Richard Southall 和 Chuck Bigelow 加入了我们的教员队伍好几年。我们得到硅谷人士的慷慨捐赠。我曾希望斯坦福艺术系和斯坦福计算机科学系之间能有个常设项目。结果这太难了，因为做它需要不止一位教员，Chuck 本来会很好，但一个人应付太多了；不过我们有十几个学生基本拿到排版的硕士学位，他们此后在业界的地位极其重要。1984 年我们在斯坦福开了这门字体设计课，由我、Southall 和 Bigelow 合教。不幸的是录像带似乎——全程录了像，但我想磁带被抹掉了；Bigelow 和 Southall 的讲座很精彩，我以为它们被存档了，但有人似乎弄丢了或重新使用了它们。但那是发展的一大节点，因为我实现 Metafont 的功能，总是比课上介绍的早一周；而那时 Sun Microsystems——Sun 工作站刚出，软件也是全新的，我们还在教学生用 Sun 工作站准备他们的 Metafont 程序；所以我们有一段激动人心的时光，他们日夜工作让这门课成功，它取得了巨大成功。那种字体语言最终在 84 年稳定下来，Metafont 手册写好了，然后我得对我的字体做最终修订、让它们看起来可接受；为此——总之，我在 1985 年完成了，所以最终，经过八年，我得以把我的排版项目画上句号。它本该是我休假年一年的项目。

[71 - 在波士顿的一年](http://webofstories.com/play/17130)
-----------------------------------------------------------

现在轮到我真正的休假了。我真正的休假年很特别，开始于 1985 年秋，我去了波士顿。Jill 和我去了波士顿，之所以特别，是因为我答应过 Jill，这会是她的休假年，不是我的。有人认为我慷慨，其实只是比我能做到的要少一点自私——因为这是结婚 24 年后，我给她 25 年中的一年。所以这一年波士顿，我做饭、我购物、我打扫，而她写书；她有攒了很多年的项目，而我有了机会去学她这么多年一直耐心为我做的这些事。今年做这些比任何一年都容易，因为我们的两个孩子现在都在上大学，所以我只需要照顾她，不用照顾 John 和 Jenny 了。虽然孩子们来看望过几次。所以我学了一点"大批量烹饪"，但大多只是学会做两人份的饭。我们住在波士顿市中心的贝克湾（Back Bay），非常非常惬意：我得走六个街区去杂货店，只有一个小背包，每天能背回一点杂货；公寓也不算难打扫。总之那是非常有趣的一年，而且我是隐姓埋名的。我只去过 MIT 一次，去图书馆查本书，但没告诉任何人我在那儿；有一次遇到 Nick Trefethen，他在查尔斯河上走。总之那是完全做不同事情的一年。我做的唯一与计算机相关的事是，我们公寓有网络连接，这样我能和斯坦福通信，完成我的排版书——因为那套五卷丛书由我的出版商出版，收录了排版工作的全部成果：第一卷是 TeX 用户手册，第二卷是 TeX 程序，第三卷是 Metafont 用户手册，第四卷是 Metafont 程序，第五卷是计算机现代字体（Computer Modern）的所有程序，也就是我书里那些字形。那一年我把这五本书送过了印刷关，印刷厂恰好在波士顿。

[72 - 写一本关于《圣经》的书：3:16（上）](http://webofstories.com/play/17131)
----------------------------------------------------------------------------------------

我那时开始做的另一件事是一个完全出格的项目，后来成了另一本书，叫《3:16》。《3:16》是一本和任何写过的书都不同的书；发生这种事有两个原因，一是写这样一本书是个愚蠢的主意；另一个原因也许是，写这样一本书的时机终于成熟了。总之，《3:16》是从一个以前没用的角度对《圣经》的研究。我得稍微解释一下。计算机科学家在研究复杂事物时，觉得看那事物的随机部分、然后深入探究这些部分，通过少数几个自己充分理解的片断来了解整体，是很自然的事。就像盖洛普民调：盖洛普会来采访几个人，采访一千人后，他们就能代表他们对数百万人的看法；尼尔森收视率也基于抽样。我批改论文时也会用抽样：如果有人给我一篇学期论文，我没时间读全部 50 页，我会随机选一页左右，看看它会引向哪里。学生事先不知道我会看哪一页。总之，抽样是计算机科学家很自然的事。70 年代某一天我说：呃，如果我把这用在《圣经》上会怎样？那是个复杂的东西。如果我随机看《圣经》的部分，去图书馆看人们对那些部分说过什么——而不是由某人告诉我看《圣经》的哪部分——我就随便挑一个普通的部分，一个没被预先计划的部分，看看我能不能这样学到些什么。我发现这样做真的很有意思。事实上，我是和我们当地教堂的一群人一起做的；我们决定过一遍《圣经》每一卷的第三章第十六节，从创世记 3:16 开始，然后出埃及记 3:16，一直做到启示录 3:16。我告诉过你，我小时候上过路德教学校，所以接触过《圣经》，但我从没觉得其中有任何一部分是我真正熟悉的。这样我就有大约 60 节《圣经》经文，是我真正牢牢掌握了的。我可以说自己相当透彻地了解创世记 3:16，因为我能去斯坦福图书馆，借出所有关于创世记的注释书，而只需要读几页就能知道创世记 3:16 的重要之处。所以抽样这个想法是个大赢，与其说是为了理解《圣经》，不如说是为了理解二手文献、理解关于《圣经》的注释。你能相当清楚地看到，几个世纪以来人们对这些不同经文的看法是如何变化的；你能看到很多人有真知灼见，而有些人没好好做功课；如果你恰好知道几个值得探究的部分，你就能对那成千上万本写《圣经》的书大致看出它们的倾向。总之，这是一种了解《圣经》的惊人有效的方式；于是又一次，半夜我醒来，说：嘿，这会是一本好书，我可以把这些在图书馆学到的关于 3:16 经文的东西解释给别人听，我想别人也会乐于了解这个故事。

[73 - 写一本关于《圣经》的书：3:16（中）](http://webofstories.com/play/17132)
----------------------------------------------------------------------------------------

于是我写信给 Hermann Zapf，他那时已是我的好朋友，我说：Hermann，我有个疯狂的书的想法，叫《3:16》，你能给我做封面吗。我想要你设计出世界历史上最美的一个"3"、最美的冒号、最美的"1"、最美的"6"，然后我就能有我的书，它看起来会很棒，写着 3:16。Hermann 热情地回信说——他也从他德国《圣经》里挑了两节经文，用他的书法写了；他是有史以来最伟大的书法家之一。然后他说：Don，我认识世界各地几百位书法家，我可以让那些人给你书里贡献一页，每人写一节经文。如我所说，图形设计师是世界上最善良的人，他会用这种方式把我介绍给更多这样的人。所以，我在波士顿一边打扫房子什么的，一边去波士顿公共图书馆、基督教科学派圣经博物馆、哈佛安多弗神学图书馆，研究、抄录我能找到的这些经文的各种译本，开始读注释，好真正比我 70 年代粗略做过的大得多的研究。Hermann 为约翰福音 3:16 写了书法——我们之所以选 3:16，因为它是以编号论最著名的经文。超级碗上人们总举着写有"约翰福音 3:16"的牌子；它有点像福音的浓缩提要。我选了 Hermann 来为那节经文做书法，他给了我一个样张，展示他对约翰福音 3:16 的演绎。所以我在波士顿期间，把这个样张拿到一家好印刷厂印出来，然后 Hermann 和我起草了一封信给世界各地 60 位书法家——他们各自国家最优秀的——邀请他们为其余经文贡献页面。这是我在波士顿有时间做的项目，我花了很多时间在波士顿公共图书馆和其他图书馆，尽我所能读人们对这些经文的评论；到我休假年结束、Jill 的休假年结束时，我正在《旧约》的中间——让我想想——是的，我那时刚进入《雅歌》部分；然后我们开车横穿美国回加州，途中在耶鲁停了两天，用那里的神学院图书馆，做了《以赛亚书》和《耶利米书》；又在宾夕法尼亚停靠——匹兹堡神学院——横穿全国在不同地方继续做这个。然后我回到斯坦福，还要好几年才能走完《新约》；我们这儿有很好的图书馆——斯坦福图书馆、伯克利联合神学研究生院图书馆——所以此后几年它成了个周末项目，看这些 3:16 的故事会是什么。

[74 - 写一本关于《圣经》的书：3:16（下）](http://webofstories.com/play/17133)
----------------------------------------------------------------------------------------

不过我拿到了世界各地书法家的作品。那些作品在我们还在波士顿时就陆续到了，每天都像过圣诞节，因为我们会收到某人寄来的又一封美丽的信，带着他们对书的贡献。那些作品太棒了，我努力让我配套的文字质量接近我收到的作品质量。此后几个周末我花时间做这个；然后我想到，我最好把这些作品数字化，因为世界正越来越数字化；一家叫 Adobe Systems 的公司成立了，我给联合创始人 John Warnock 打电话，而且机缘巧合，是他接的电话。我此后试过很多次，再没成功过。但那天他接了电话。我说：John，我有一些很棒的艺术品，我想把它们数字化，我们想做一张海报，把艺术品做成不同尺寸。有没有什么计算机软件能做到？他说：Don，我正好有适合你的东西，我们在做一个叫 Photoshop 的程序，还有 Streamline——结果它有点成不了器，但那时他喜欢它——他说：你来用我们的设备吧，把你的艺术品带来。于是在 1989 年夏天我过去，做了 Adobe Systems 的夜班看守。我在他们的艺术部门工作，每晚有大约 50 台 Macintosh 在房间里，大多数人都在家。我能——那时 Photoshop 还远没到 beta 测试阶段，但我得以和那个叫 Tom 的人（我就叫他 Tom，来自密歇根）一起工作，他是主要实现者；所以那段时期我们给 Photoshop 除了一些 bug。总之，我能在 Adobe 用我《3:16》书的艺术品，经过几个月，我把它弄成了我喜欢的形式，准备——那时的 Macintosh 很慢，处理一个两三兆的文件简直是英勇的努力。你可以在一个机器上启动 Photoshop 做过滤操作，五分钟后它才准备好下一步操作，所以这就是为什么我能去另一台 Mac——有点像国际象棋大师打车轮战：在一个棋盘上走一步，然后去下一个。所以我就这样慢慢地把这些艺术品弄过印刷关，把这些文件传给印刷厂也要很长时间，但他们当时有所谓的 RIP，即光栅图像处理器，你能印出我书要用的胶片。我去新加坡看着这本书印出来；我本以为也许会有一两个被这本书触动、喜欢它的读者，那就能让整个项目值得；结果出版后一周内我的愿望就实现了。太神奇了。其实我本来预期这本书会招来大量负面反应，因为：一个计算机科学家为什么做他无权做的事、写关于《圣经》的书？我会读一本神学家写的编程书吗？而我能做而神学家做不到的唯一一件事是：在我的书里，我能在很多情况下称赞神学家工作做得好。我能给出见证，而他们不能那样做，因为他们显然有私心要照顾；但作为局外人，我至少能指引人们，说：这儿有些真酷的东西。这是我能做的一件事。总之，我发现这个周末项目是一种充实，我非常高兴它结果这么好。

[75 - 在 MIT 做一轮科学与宗教讲座](http://webofstories.com/play/17134)
-------------------------------------------------------------------------------------------------

关于宗教这个话题，我不妨多说一点。不只是——好，我出版这本书，以为大多数人会说：克努特疯了吧，他出版一本关于《圣经》的书，他擅长的是计算机科学，我们还能信他吗，等等。但反应，至少当面给我的，恰恰相反，很多人似乎喜欢这本书。最令人惊讶的是，1999 年——其实早一年——我收到 MIT 的信，邀请我做一轮关于科学与宗教的讲座。嗯，这显然是我没资格做的事，但很难就回信说"算了吧"拒绝它，因为这是我一生中想了很多的事，我想也许我的一些经历，能对那些脑子里同样在纠结这些问题的人有些相关；如果我这辈子要谈这些事，那是一种，如果我不做点回应，我会不会觉得不完整？另一方面，我当然不希望这成为我的职业——我可不想去跑宗教巡回演讲什么的。但权衡之下，我想：好，把它看成双赢吧。我去，希望"原力与我同在"，我能说些对人有意思的话；如果我这辈子要做一次这种一次性的事，哪里比波士顿更好呢？我在波士顿大部分时间都泡在图书馆研究、看神学著作，而且我在 MIT 有一群听众——如果有哪个地方能产生影响，那儿是理想之地。但他们请我做一轮六场的公开讲座，每场一个半小时；而我有些标准——我不确定自己有没有那么多话可说。所以我决定：好，我这么办，我只准备一半讲座，另一半是问答，是即兴回应听众的问题。所以如果讲得不好，那又怎样，我试过了、做完了、过去了。如果人们觉得有价值，那就更好。而且我不介意再在波士顿待几个月，那儿是个好地方，我在那儿也有些想在图书馆查的东西。所以我说好，1999 年末秋天天去待了三个月，重新体验波士顿。这次我没住贝克湾，我住在哈佛广场附近，天文台对街；我每天早上沿查尔斯河骑车去 MIT，在那儿交了很多朋友——以前不认识、做计算机科学的年轻人。然后我做了那六场公开讲座，还做了几场别的，讲我设计的一台计算机什么的，以及正在进行的其他项目。我还去了几次纽约，拜访了 Will Shortz，利用在东岸的机会。但我在这儿做这些公开讲座——我第一场讲座那晚，我是说那天，我想我在和 Jesse Ventura 竞争，他同一天也在波士顿讲座，但我那个厅还是站无虚席，大约四百人——厅没那么大，但对我来说很神奇；第二周他们也回来了。我们的讲座放在下午晚些时候，大约三四次，然后停一停，再每周间隔三四次。在这些讲座里，我没有给出任何深奥问题的答案，我只是说：你看，我觉得计算机科学很棒，但它不是生活中的一切，还有别的东西值得关注。我遇到的一些悖论，它们如何影响我；我有点像在问听众，也许下次轮到你们来讲。所以它更像一个焦点小组什么的——不，它更像只是说：让我们这辈子破天荒谈一次我们专业之外的事，只是我们怎么权衡这些问题。听众给了我很好的反馈，这些问答环节非常刺激人；我也从在那儿遇到的人那里学到很多，因为背景五花八门。这又是一件加分的事，但当然不是我想做一辈子的事——我得专注于《计算机程序设计艺术》，那是我能做独一无二事情的地方。

[76 - 回到斯坦福工作，以及提前退休](http://webofstories.com/play/17135)
-----------------------------------------------------------------------------------------------

1986 年底我的休假结束了，我还在周末写《3:16》，但回到了我正常的教授生活。当然我回到斯坦福，像往常一样投入，恢复教书，有很棒的研究生——但我几乎没时间做《计算机程序设计艺术》。不知道看我这个的人里有没有也度过休假的；你回家后发生的一件事是，人们不断问你：哦，你不高兴回家吗？接下来一年、再下一年，他们一直这么问我；我总是笑着说是的，但说真的我回家感觉没那么好，因为我在《计算机程序设计艺术》上毫无进展。时间滴答作响，我 50 岁了，在《计算机程序设计艺术》上还有大量工作要做。所以那时——1988 年我 50 岁——我过了整整一年，却在《计算机程序设计艺术》上只取得了两天的进展；按这个速度，我得活到 150 岁才能写完这本书。所以我断定，这不是可持续的状况，我必须想办法度过余生、写完《计算机程序设计艺术》。于是在 1988 年夏天我做出了一个不情愿的决定：我应该很早就从斯坦福退休，把余生献给完成我最擅长的东西——《计算机程序设计艺术》。你知道，自 1962 年以来，我一直在收集成千上万篇论文，读它们、做笔记、整理这些，所有我认为真正该写进书里的东西；我却没有机会真正把这些准备好。所以我给我们系主任写了封信，说：Nils，我想在 1990 年 1 月 1 日退休，距今还有一年多。我觉得一个只打算写书、不做大学里其余工作（包括教学、指导、参加委员会，还有筹款、通信、回信）的教授是不对的。我说：所以我去看看——但我还是必须写《计算机程序设计艺术》，否则我永远不会真正快乐，它还需要我多年的工作；所以请你给我在斯坦福找个接替我的人，我不想要一份只拿薪水不干活的职位——然后我们会见院长和教务长，他们先想说服我继续按原样干，我说：不，说真的，这本书是个特别的东西，我觉得它让你和几百个别的教授都不一样——这本书比所有其他教授的书都重要一点，我告诉他们。院长问了些人，然后他说：呃，反正那些书相当不错，所以他想也许他能找人捐一个教席，让我只需负责写书。我说：不，不如找别人来干我以前干的活，让我提前退休。嗯，52 岁提前退休是不可能的；可行的办法是我请假三年直到 55 岁，然后退休。但事情就是这么发生的：1 月 1 日起，我不再需要参加委员会或筹款了。另一方面，我深深遗憾不能再教书了，也不能指导研究生了——那一直是一种特别的乐趣。为了弥补教学，我们决定我做半定期的讲座，叫"计算机随想"（Computer Musings），对公众开放，谁都能来，没有学分，但我讲我觉得酷的东西、讲斯坦福课程里没有的；定期地，我们打算每月一次，我会做这些讲座。我还能有个头衔，那很好——我不知道自己是不是唯一能自己选头衔的斯坦福教授——我成了"计算机程序设计艺术教授"，这就是我的正式头衔。T 是大写。这不意味着我有薪水，但意味着我有一个好头衔、很漂亮的信笺；我 55 岁时正式成为"计算机程序设计艺术荣休教授"。这给了我医疗保险，而且事实上我有一个秘书、一间办公室、完全的图书馆访问权，以及做好书所需的一切。但我不在任何依赖我做某事的内部圈子里——我能像今天这样一整天不露面，也没人受损。

[77 - 开始游泳来应对压力](http://webofstories.com/play/17136)
-----------------------------------------------------------------------------------------

那段时间我感到压力很大，有各种健康不稳的症状，不知道怎么回事；我想是因为我人生这次大转变带来的焦虑，我正从一个人生阶段转向另一个。所以我甚至遵照医生的建议找精神科医生谈过几次，因为医生觉得我症状太多。精神科医生说：这件事让你得这么多压力分，那件事那么多压力分，你的压力分远远超标了，你为什么不试试定期游泳？我此前从没怎么运动过，总是坐着写东西；在波士顿我能走很多路，因为那儿没车；但大部分时间——我一直不明白为什么体育是大学必修课；我是记分员，但从没真正打过篮球。可它是必修课，所以我不得不做点体操什么的。现在我能看到，人体生来就适合偶尔让心脏动一动；1990 年我开始一周游三四次泳，突然我的背好了，我感觉好了，其他问题也消失了。不过我也很气馁，因为斯坦福还没找到接替我的人，至今也没有。他们确实做过几次招聘，但被认定的教授决定留在原处，所以那部分交易斯坦福从没兑现。

[78 - 我的研究生和我 64 岁生日](http://webofstories.com/play/17137)
------------------------------------------------------------------------------------

这时在 1990 年，我最后的两三个学生完成了博士学业，所以我总共有 28 名学生；数学家说 28 是完美数。这只是个玩笑，但如果你考虑 28 的所有约数：14、7、4、2、1，加起来等于 28，所以叫完美数。真了不起，28 名学生，28 种不同个性，来自世界许多地方；大约一半从教，一半在业界。比如和我一起做 TeX 的人：Michael Plass 成了施乐 DocuTech 系统及其许多桌面出版系统的关键程序员之一；Frank Liang 后来成了 Microsoft Word 的关键人物之一；我在排版项目里的很多学生，也在印刷软件行业担任领导角色。Bob Sedgewick 是普林斯顿计算机科学系主任，Jeff Vitter 是普渡计算机科学系主任，现在是那里的院长，所以我有很多学术型学生。其他人在自己祖国——西班牙、巴西——总之，我真心感激我有这么多出色的学生，他们教我的几乎和我教他们的一样多。虽然我可以把他们的成功归于自己，但其实是他们了不起——过去和现在都了不起。我只有一个学生是伤心事，他似乎在不幸福的生活后自杀了；但 28 个里 1 个，我想是相当不错的成绩单。我现在还见到他们至少一半，因为他们都在这一带。这让我想起，我不妨提一个巨大的惊喜：我 64 岁生日时，人们从世界各地来参加一场两天的庆祝，Jill 对我完全保密，我简直无法相信——每次我一转头，就又看到一位惊人的来客。为什么 64 岁生日？嗯，对计算机科学家来说，数字 64——2 的幂是最重要的数字，所以 32 之后下一个有趣的数字是 64，之后是 128。所以我怀疑自己不会再有一个更合适的生日了，所以我们叫它我的"百万岁生日"，因为在二进制里，64 写作 1 后面跟六个 0。那时我见到了我的许多许多学生，所以现在我想起了这个。

[79 - 我的《具体数学》课](http://webofstories.com/play/17138)
---------------------------------------------------------------------------

现在我退休了，但我仍不能全职做《计算机程序设计艺术》，因为还有其他我真正必须完成的项目，比如我跟你说过的《3:16》书，我一直周末在做，我想完成它。所以我那时在做那个，那时正是 80 年代末，我想它 1990 年初出版。然后我在斯坦福开了一门课叫《具体数学》（Concrete Mathematics）；我想我 1970 年或 71 年开的，可能在 70 年秋或 71 年春。总之是课程表里一门全新的课，因为没有——斯坦福的学生学不到我发现做计算机科学工作所必需的那种数学。我一直在想，我写《计算机程序设计艺术》头几部分时需要、而我在学校里没被教过的东西是什么。那时也有一场大争论，有人说数学变得太抽象、太脱离现实，所以我可以用一个玩笑来回应，叫它"具体数学"（Concrete Mathematics），虽然我说过，"具体"这个词并不是"抽象"的反义词，而是"连续"（continuous）和"离散"（discrete）两词的组合。我们有这门《具体数学》课，学生们很热情，我一遍又一遍地教。有时我度休假或离开时，会有客座讲座，别人照既定模式来教。我在斯坦福教学的一种方式，是受 George Pólya 启发的：我让学生在课上说话，而不是我告诉他们书里有什么。我假设他们都会阅读，所以在课上我们做书里没有的东西。所以我总是把课上得几乎像语言课，而不是计算机或数学课：我向学生提一个问题，学生该想出怎么解决问题，或至少朝解决问题迈出下一步，或者尝试然后失败，然后我们学习怎么从失败中恢复。你找不到书讲怎么从糟糕的猜测中恢复，所以我们能在课上学这个。为了让这些课学生不必记笔记，我总是让我的助教记下学生说的话，然后他们事后快速出版这些笔记，作为课程的记录。

[80 - 写一本关于我的《具体数学》课的书](http://webofstories.com/play/17139)
------------------------------------------------------------------------------------------

所以到 1990 年，我有了近 20 年这些《具体数学》课上课堂讨论的记录，把这些遗产传给下一代是自然、甚至几乎是必然的，所以我想写这本《具体数学》书，描述这门课如何演变、学到了什么。最尽职的助教之一是 Oren Patashnik，他不仅记录了课堂，还起草了——我想是书里几乎所有的章节，作为给学生的手册，供我不教的那一年使用。所以我能从他的笔记出发重写，但写这本书时利用他对教学法的洞察。还有 Ron Graham，我离开时这门课最成功的老师，他来过两三次，学生们上他课那么喜欢他，以至于那些年的《具体数学》班事后还有年度聚会。他也开始去普林斯顿教这门课。所以我有这本《具体数学》书，两位合著者是 Oren Patashnik 和 Ron Graham。通常我写书大约每天完成一页：如果书有 365 页，要花我一年；如果 500 页，要一年半。这次我超支了，我在不到一年的时间里完成了这本 600 页的书，那不是可持续的工作方式，但我实在太想回到《计算机程序设计艺术》了，所以 Jill 给我一年时间，让我不必那么——怎么说呢——不必当个那么负责任的丈夫，允许我有一年不像个人，好让我完成这个项目，然后我再找时间补偿。所以那是一次冲刺项目，在压力下完成，但我有这些优美数学材料的激励，还有 Oren Patashnik 那清新的草稿，我们能把它做成一本"加州风格"的书。《具体数学》书最有趣的特点之一，是我从斯坦福抄来的——70 年代初，斯坦福大学给未来的学生做过一个很有创意的东西。他们出版了一本《走近斯坦福》（Approaching Stanford），由前学生写成；正文部分讲你期望从大学看到的：这地方多棒、天气、教员多么出色、学生等等。而在页边空白处有涂鸦，学生们写着真实情况，比如"斯坦福宿舍就像没有看守的动物园"之类；他们写着真实情况的线索。斯坦福出版并随宣传材料寄给未来的学生。所以我想：好，咱们也用这个做数学书吧，在数学书里放涂鸦，让学生评论他们对这门学科的看法。结果这个想法显然流行起来了，因为——先说一句，如果有人在我任何一本书里找到错误，我会付他们钱；如果他们第一个找到错误，我给他们寄张支票。涂鸦里任何错误都被立刻抓到，很明显所有读者都在读涂鸦；书其他部分的错误，也许要三四年才有人发现，但涂鸦部分里任何可评论的东西都立刻被发现了。而且这本书被翻译成大约十种其他语言，几乎在所有情况下译者也翻译了涂鸦，他们觉得那是书的重要部分。所以这本书不自命不凡，但它结果也成了为书的内容做贡献的一种方式，因为一条评论可以说："你最好略读接下来几页，在读过一遍之前不用太费劲。"还有别的——有些是相当老掉牙的笑话，但我们稍微审查了一下。所以总之，那是一本关于数学的加州风格书，一本展示斯坦福课堂随意风格的书，也展示了我个人对做数学方式的宣言，我认为是我热爱的、研究计算机程序时需要的数学。

[81 - 斯坦福 GraphBase，以及更新《计算机程序设计艺术》第一至三卷](http://webofstories.com/play/17140)
--------------------------------------------------------------------------------------------------------------------------------------

我完成了《3:16》，完成了《具体数学》，却还是没法回到《计算机程序设计艺术》，因为我还有一件事必须做，叫斯坦福 GraphBase。这是文学程序的一个集合，用于《计算机程序设计艺术》第四卷的标准示例。所以那又花了我几年时间把它做好；有必要先让这本书出来，我才能和世界各地贡献的人一起完成其他项目，因为他们能借助斯坦福 GraphBase。最后，大约 1995 年，我得以打开那个房间的门，我 15 年一直往里面扔《计算机程序设计艺术》的新材料。我做 TeX 时真的没时间、没太多想它，所以有东西寄来、和第四卷第五卷相关时，我就往一堆里扔，然后我有了一箱又一箱；最终攒了大约 17 英尺厚的材料。此外我还有往年收集的所有材料，所以我决定必须把它们全部重新整理；那又花了一年，一年多了，把每张纸都过一遍、放到合适的地方，做一个计算机索引让我能找到一切，放进成千上万个文件文件夹，还纠正了第一、二、三卷所有已知的错误。人们一直给我写信，我有 1981、1982 年还没回的信，报告第一二三卷的错误，所以我给这些人写了支票，还带着从那天起的利息——我有个小计算机程序算这些利率，但里面有个错误，我想我多付了点利息。总之我寄出几百张支票，为《计算机程序设计艺术》第一二三卷做了一份更大的勘误表，我能用 TeX 排版、正确排版它。这些年人们仍在书店稳步买这些书，买第一卷、第三卷，买 70 年代做的那个版本，比如第 30 次、40 次印刷。现在每一本仍以每年约 4000 本的速度销售，大概那样。第二卷是 1981 年版，就是那个我受不了其数字的版本，但数学内容没问题。我的《计算机与排版》丛书五卷出来后，全用新字体、正确的排版做的。我的《具体数学》能用 Hermann Zapf 设计的新字体；《3:16》用了另一种我参与做的字体。所以到这时只有《计算机程序设计艺术》的排版还是难看的，而我仍不想——我花了这么久才回到写第四卷，怎么能停下重做第一二三卷、再等更久呢？救星来了，住在伯克利的 Silvio Levy，他在数学界很多项目里非常活跃，现在是数学科学研究所在职馆员。但他是个 TeX 的铁杆粉丝；他和我创造了 CWEB 文学编程系统，用 C 作为编程语言而不是 Pascal。Silvio——勘误表——找到了第一二三卷的错误，他决定无偿地（pro bono）用 TeX 排第一二三卷，请出版商付他一笔象征性的钱，出版商当然欣然同意。他和妻子 Sheila 做了校对，他们干得棒极了，通读了全部三卷，把我勘误表里所有订正都并入了。然后我没花多久——我花了两三个月，但远不比我全部自己做花的时间多——所以我们最终，在 1997/1998 年，终于能让《计算机程序设计艺术》用像样的排版、并把我文件里 20 年的改进全部并入文本。

[82 - 开始《计算机程序设计艺术》第四卷的工作](http://webofstories.com/play/17141)
------------------------------------------------------------------------------------------------------------

然后我准备好终于开始第四卷的工作，但它仍没出版，对吧，所以发生了什么？嗯，其实它约 400 页已出平装版；而我花的时间超过一天一页；我无法说服自己满足于只是重制我在文件里找到的东西——每当我看到什么，就发现有改进它的机会，那又花我几天。所以我写第四卷时加了大量文献里没有的材料。我知道这也不可持续，但我告诉自己，我现在写的部分是如此基础，和后面要写的部分不同，明年我就只是把不那么原创的东西拼起来。但事实上，比如今晚我会完成一个新部分的索引，那约 60 页，而那 60 页里，我想有 15 页是文献里没出现过的，里面有相当多不同的想法；已出的这 400 页第四卷也是这样——当它是这个学科如此基础的部分时，我忍不住要超越我看到的来源。所以按照我目前的进度，很明显我得到 90 岁才能完成整个项目。所以，虽然我没有超出我在 1962 年 1 月被请去写编译程序书那天匆匆列下的目录——我还有那份目录——这个领域已经急剧膨胀，有太多好东西我忍不住要放进去。让我想想——所以这就是我目前的生活：基本就是翻第四卷的文件。我一直在读的、图书馆里读的更多东西，都提示出我拼起来的想法，我联系世界各地的人帮我调试这些想法、核实我没搞错。希望我能长期继续下去。这很有意思，因为我能把互不知晓彼此工作的作者的作品拼到一起，然后有机会在它们之间做出自然的联系；我爱找到呈现材料的方式。我知道我现在越来越老了，我的风格不如年轻时那么轻快，但我还有 60 年代写的那 3000 页手稿，能用来让书里保留一点年轻气息。不过我知道这些材料不好读，人们也许把它放浴室里什么的，或者把书放书架上，只为向某人暗示他们能读懂它。这门学科不是——有些材料没有"皇家大道"，部分内容天生困难；但大体上我对事情的进展很热忱。比如今天早上我做索引，看到一些我写时曾艰难挣扎的部分，现在它们出来时看起来像个好故事——而那些挣扎，我当时苦苦挣扎的事实，如今对我似乎不那么明显了。

[83 - 最后两个大型研究项目](http://webofstories.com/play/17142)
----------------------------------------------------------------------------

现在我仍能做一些一两天就能解决的小研究问题，但我知道自己再也没法做真正困难的大问题了，因为在写《计算机程序设计艺术》时，我很难放下它。所以我发现自己做了两个大项目，一个在 80 年代末、一个在 90 年代初，它们算是专题论文。第一个项目叫《公理与凸包》（Axioms and Hulls），我在研究几何、凸几何里有趣的问题；我在新加坡看着《3:16》付印时开始做它，结果它成了一本一百多页的小书。然后我开始研究随机图问题，那是一种极迷人的现象：你从完全不相连的点出发，然后随机选两个点、在它们之间加一条连接，一直这样做。一旦连接数超过大约点数的一半，突然几乎所有东西几乎总变得相连，很大一部分变得相连，那叫"巨连通分量"（Giant Component）。我和 Boris Pittel 一直在研究这个问题，他是我 80 年代末研究项目的访问者，我们得到了一些数学上似乎挺激动人心的初步结果；所以我在写论文，我意识到还有更多结果就在眼前——事实上，我看这问题越深，似乎就浮现出另一个美丽的图案。结果它最终发展成——我不只研究巨连通分量，我们写了一篇研究论文，那篇论文是篇巨大的论文，填满了整整一期期刊。我有三位合著者：我提过的 Boris Pittel，还有 Svante Janson、波兰的 Tomasz Łuczak。我们不断在这个主题上发现更多东西，互相挑战去做对这个现象的探索中又一个惊人的一步。所以从某种意义上说，就像在我的研究生涯末写了又两篇博士论文：这两篇专题论文，一篇关于公理与凸包，另一篇关于巨连通分量。这是我的"天鹅之歌"，之后我说：好，这些我都去过、都做过，现在所有有趣的难题，如果我一天内解不出来，就留给别人吧。或者我试着给自己一个小时，但一小时后有时我想，也许再给我一小时我就能做出来。所以从现在起，如果我想到一个新问题、看不出怎么解，我就会把它传给某人，说：你不觉得这很酷吗？让他们享受解决的乐趣。

[84 - 我对写作的爱，以及幸运的一生](http://webofstories.com/play/17143)
------------------------------------------------------------------------------

从我这些评论你能看出，我沉迷于写作，我爱向别人传达想法的这个理念。我想，在每一种情形下，我写的书都是那些我学到的、我觉得太好了不能独享的现象，所以我希望别人分享阅读它的乐趣。所以结果我现在有 20 多本书在印，那么多，我怀疑世界上有没有人读过其中一半以上。我有时想，如果世上有十个像我这样的人会多么可悲，因为我们没有时间读彼此的书——它没法规模化。不过，每本书背后都有个故事，我写的每篇论文背后都有个故事，而且我从不——我不懂"要么发表要么完蛋"（publish or perish）这个说法，因为我从没写过任何这些论文，因为我觉得自己职业需要它什么的。总是因为我觉得有个很酷的想法正等着被传达。两三个星期前有个家伙问我，那是他给小学老师做的一个项目，他该录一些他略有所知的人的视频，问他们这个问题：如果你能在人生中重做一件事、做得不一样，那会是什么？我从来没被问过这个问题，五分钟后我放弃了。我是说，我这把年纪可能有点健忘，但我想不出自己人生中有任何遗憾的事；我是说，我只是觉得自己太、太幸运了。我赶上了一波又一波浪头——我是说，我出生的时机正好，正逢计算机开始进入世界；而我又恰好有这样的背景，这种技能的组合，让我那种独特的思维方式与让机器耍把戏所需的东西和谐共鸣。所以如果我早生十年、晚生十年，整个事情都会大不相同。我进入计算机领域够早，那时的问题比较容易，我能解决。我们把容易的刮走了，现在那些更年轻的人只剩下更难的，或者得在全新的领域里找问题——那当然非常刺激，比如机器人和其他类型的应用，现在被打开了，因为那些基础、较容易的问题提供了另一层可攻击的有趣问题。但我简直无法想象还能更幸运或——即使我一生做的许多事并不受欢迎、不是一切都变成金子——我想不出有任何我宁可做得不一样的事，所以回答那个男孩的问题对我非常难。

[85 - 应对癌症](http://webofstories.com/play/17144)
-------------------------------------------------------------

去年我得知自己得了癌症；希望现在我们是在很早期发现的，所以它不会阻止我写完更多《计算机程序设计艺术》，但去年年底我并不知道癌症有多严重。我只想稍微讲讲这个故事，因为这种事会发生在——每个人都会死，但你从不知道最终夺走你性命的是什么，每个人都得时不时面对这种事，所以我只想稍微说说去年它如何影响了我。我现在到了要参加很多我所认识的人的葬礼的年纪；我的同事 Bob Floyd 几年前去世了；我偶尔会想该如何面对死亡。它当然是不可避免的，但我总发现，如果我写完了一本书，我就准备好死了；但要是在写完书前一周，那不行。你知道，如果我不能完成这个项目，那就太、太可怕了。等它做完了，好，又能平静一会儿了。我父亲 70 年代去世后，我面对过这个问题，不得不心里想清楚该如何对待它；我记得大约花了一个月，我才能一小时一小时地不想到死亡和那些问题；但那时我想通了，对死亡变得稍更自在。近来我得知很多病例，某人去世了，我们说：哦，但那是个幸福结局，因为就在一周前他们得以见到孩子或朋友、把事务安排妥当——他们有时间做一次体面的总结，一切都如人所愿的好。所以我说这些的原因是，去年我被诊断出前列腺癌后，我们安排了十二月做手术；但与此同时我被邀请去欧洲做重要演讲，尤其是苏黎世 ETH（瑞士联邦理工学院，我想它像欧洲的 MIT）建校 150 周年庆典。我是主演讲人，接受所有媒体采访什么的；我当然没跟东道主提将要进行的手术。但就像——我的演讲很成功，人们对我做的事都很热情，我在世上没有敌人，我处于某种巅峰。所以如果我要在十二月的手术中死去，那会是这些幸福结局之一，甚至更好——因为我在这儿，我是说，关于我的工作有专访出来；在苏黎世演讲之后，我获得荣誉博士学位，那是我第 31 个荣誉博士，超过罗纳德·里根得到的，没 Bob Hope 多，但计算机科学界这已经很了不起了。所以我实现了所有——除了写完《计算机程序设计艺术》——我在人生中希望能实现的一切。瑞士之后我飞回家，和我的孩子、孙辈度过一周，我们都很开心；所以如果我要死，这又会是完美的落幕方式。所以我看来，我拥有了一切可能的优势和天赋，所以如果我要死在手术里，那也没关系，那会是——我并不预期自己会为手术不顺而难过；但如果手术顺利，我就说：好，这意味着我有机会多做一些，这是礼物而不是权利，不是我理应的。你能懂我的意思吗。这不是我随便说说的——我进医院时，真的没计划出来后要做什么，我只是想：好，如果我能回家，那时再想。所以我做了四五小时的手术，昏迷着，然后突然我听到快乐的声音、有人说：哦，你做得很好。好，那太好了，我还活着，也许我能再走远一点。手术恢复期不好受，但一切都如预期般顺利，我今天还在这儿，下个月我会开始做一点放疗以防万一，但预后看起来相当好。所以从现在起，我健康良好的每一天，我都视之为一份特别的礼物，给我一个机会多做一些我最擅长的事：把计算机科学里的人发现的东西，组合成一个那些看不懂原始论文的人能理解的故事。

[86 - 荣誉博士学位](http://webofstories.com/play/17145)
--------------------------------------------------------------

我过去常说，我接受这些荣誉博士是为了让我母亲高兴。我想确实如此；但她去世后我仍接受，所以我知道它对我自己也有意义。但我想，我现在没多少时间旅行了，但我为这些而旅行过——我想我该写一本关于毕业典礼演讲的书，因为我坐着听了太多大学的学位典礼；但这对计算机科学领域很重要，因为我们是新来的，计算机科学存在还不到 40 年，而其他学科已经存在很久很久了。所以当一所大学决定授予计算机科学领域的博士学位，这对这个领域是好消息，说明地方更加认可这个观念：我们有一个自立门户的领域，有其正在研究的基础问题。所以对我而言，因为我是最早一代——从能让我代表计算机科学领域领奖的那代人——所以我把这些学位更多地看作是为领域、而不是为个人。我朋友 Bob Floyd 总说，最难的是拿到第一个奖；之后，人们总是不太愿意给一个从没拿过奖的人颁奖，但有了第一个之后就是一路滑行了。他说他——他自己从没拿过博士，但他要用"绿票法"拿到：如果他有足够多称呼他为"Floyd 博士"的信，他就能把那些寄给某个地方，他们会给他一个荣誉博士。

[87 - 奖项的重要性与京都奖](http://webofstories.com/play/17146)
---------------------------------------------------------------------------------------

我认为奖项在人生中是重要的，它确证别人欣赏你投入工作的心血——我做的是好玩的事，但也有不好玩的部分，知道它被欣赏是令人愉悦的，所以获奖当然是好传统。对我重要的第一个奖是获得卡特总统颁发的国家科学奖章（Medal of Science），那完全出乎意料，但我的极大荣幸是，我坐在 Richard Feynman 旁边，他从卡特总统手里领了国家科学奖章。就在——我上去领奖前，他用胳膊肘碰了碰我，说：好了 Don，这是你的大时刻。他是我巨大的英雄之一，我在加州理工认识他，所以那天对我不折不扣是个大日子。然后还有几个我能代表计算机科学的奖，有一个叫以色列的哈维奖（Harvey Prize）；同样，这些奖不只对计算机科学家开放，也对化学家、物理学家、生物学家、所有科学学科的人开放。还有一些奖也对人文学科的人开放——我很高兴我有一个是文学博士（doctor of letters）；我想我在做了 Metafont 之后，理应有个文学博士。所以这东西，我想在内心深处给我一些满足感和继续前进的鼓励。最大的奖当然是京都奖，那是大约十年前；那大概是计算机科学家能指望的最好奖项，它表彰一个领域的终身成就，每三四年颁发给技术界的人。那时我得以带上我的家人、我妻子的家人，我妹妹能来，我岳父岳母、小姨子，和我的孩子们，在日本待了几周，所以那对全家也是件好事。我在日本待了三周，做了 13 场讲座、13 个不同主题，八场是准备好的，五场即兴。我得以见到日本天皇和皇后，哇，她是一位极其令人印象深刻的人。我得以见到我的英雄 Nob（最伟大的谜题专家），我们能和他一家一起去泡温泉，所以能体验日本的很多很多地方；那是我人生的又一个重要亮点。

如果我没记错，还有个很好的联系点，联系到你职业生涯的开端——密尔沃基的小学。你把一部分奖金捐给了你的小学。

没错，京都奖还带着钱，它没有诺贝尔奖那么丰厚，但足够让世界相信他们颁奖时是深思熟虑过的。所以它大约有 40 万美元；Jill 和我可不想让它毁了我们的生活，因为没这些钱我们也很幸福，所以我们不知道有它是否最好。于是我们用了 10 万支付家人们的旅行，10 万给了我一年级到八年级上的那所学校，10 万给斯坦福，10 万为我在帕洛阿尔托去的教堂支付了一台新管风琴。

[88 - 管风琴（上）](http://webofstories.com/play/17147)
------------------------------------------------------------------

我父亲是教堂管风琴师，事实上我出生那天，他是从教堂礼拜中被叫到医院的。路德教学校教师的培训也包括音乐，而他音乐相当好。他在芝加哥世界博览会上演奏过，1934 年还是哪年做过独奏会；他做过好几场独奏会，我有节目单，也继承了他的一些管风琴音乐。我年轻时学过钢琴，但我的钢琴老师也懂些管风琴，所以我 12 岁时有一年是上管风琴课而不是钢琴课，那时学了一点这种乐器。我遇见过 E. Power Biggs，那年他到底特律演出。他坐在——其实我坐他的车去独奏会；我不知道他是多么出名的人，但他把管风琴音乐带进了美国的录音。不过也就那样，我又回到钢琴，高中时我和乐队一起弹钢琴、伴奏。兄弟会所有派对上我都弹钢琴，我们唱很多歌，大多是百老汇剧目、曲调。我喜欢弹钢琴——比如我们第一次出国去挪威时，我们没租电视机而租了一架钢琴，Jill 和我每晚弹四手联弹。所以我一直喜欢钢琴；但 60 年代在加州理工时，我们在唱诗班唱歌，某人周六打电话给我说：Don，我们的管风琴师兼唱诗班指挥刚得了视网膜脱落，住院了，听说你十几岁时上过管风琴课，你能顶替明天的礼拜吗？所以我去了教堂，试着回忆怎么弹，周日我弹了礼拜；那时为了从视网膜脱落中恢复，你得几个月保持头部几乎固定不动地坐着，等它愈合，那时就是这么治的。所以接下来的六个月我成了一座教堂的管风琴师。帕萨迪纳有很好的管风琴演奏传统，一个叫 Clarence Mader 的人，他的许多学生在周围的教堂，所以他们当时实际有全国最好的管风琴师。我开始参加管风琴师的独奏会，他们还把东部最好的管风琴师请到这个美国管风琴师协会（AGO）分会，我开始意识到管风琴有大量真正伟大的作品。我认识了一些家里有管风琴的人，觉得那很酷。所以当我在普林斯顿那一年，全国许多最好的管风琴师都在普林斯顿，我在帕萨迪纳时听过其中一些人的演奏，所以我在西敏寺唱诗班学院上了课，那些人就在普林斯顿。我旁听了课；我发现作为正教授重新回去上课有点奇怪，有人会告诉我该做什么，对习惯了当老大的人来说这是不小的落差——但不管怎样，我在普林斯顿有位极好的老师，她给了我很多好音乐让我开始学。所以这个想法在我心里扎了根：管风琴音乐是人生的一大乐趣。

[89 - 管风琴（中）](http://webofstories.com/play/17148)
------------------------------------------------------------------

自那以后我决定：好，我书有版税，能用它给家里添一台管风琴；所以建这栋房子时，我们告诉建筑师这个梦想：我想要一间音乐室，里面放一台管风琴。所以即使当时我们没钱付，我们把它放进了计划，让它在前厅支撑三吨的重量。我去和管风琴制造商谈；那时我认识的最好的制造商在丹麦，我一个朋友、哥本哈根大学的 Peter Naur，我在挪威那一年去拜访他，花了一周和丹麦不同的管风琴制造商谈话。天哪，他们造的那些精美乐器，美国很少。如果你喜欢轶事——这是我一生中唯一一次喝了一杯咖啡，也许那还选错了国家，但那是唯一一次，之后我再也不想试了。故事是这样的：我在那个管风琴制造商那儿，他英语不太好，我德语也不太好，我们试着用德语交流，他招待我咖啡，我不知道怎么拒绝，所以我就喝了。每次他看我的时候，那咖啡对我来说太难喝了，所以我要么抿一小口，要么至少让它在杯子里晃一晃，好让他知道我在关注咖啡。但最后他一个没注意，我把咖啡倒进了一株植物里。不过那就是我的经历。他是哥本哈根附近希勒勒（Hillerød）的一个很棒的管风琴制造商。不过我没买成丹麦管风琴，因为虽然我拿到了我最喜欢的那位先生的方案，但结果由于劳动法的设置，你不能为任何东西定固定价格——如果发生通货膨胀，你就得多付。而且那是提前两年，所以我得——不管经济发生什么，我都有义务按丹麦货币付当时的工资。而且运输也是个很大的问题。所以结果丹麦方案不是最好的。不过我确实遇上了 Larry Abbott 和 Pete Sieker，他们在 UCLA 附近有个工坊；有次我去南加州时遇到他们，他们每年造四台很棒的管风琴；我认识他们——事实上我以前在帕萨迪纳见过的其中一台就是他们造的。所以我跟他们合作，回到斯坦福；与此同时，我和我们自己的教堂合作过，我们门洛帕克的教堂有了一台新管风琴，我在那个委员会里，那时走访了很多美国管风琴制造商，学了些指定一台管风琴的过程。我从图书馆借了大量书，看了巴赫弹过的那种管风琴的规格，以及荷兰和世界各地的许多管风琴。那是个好背景；斯坦福有四台管风琴，我能在每一台上弹，仔细听不同的音色，感受它们如何平衡，然后尽可能好地和洛杉矶的 Abbott 与 Sieker 沟通。所以他们最终完成了设计；他们的工坊不够高，放不下这台管风琴，它分三件，他们用卡车运上来、安装好。它只住在我家，但作为家用管风琴，它相当不错。通常家用管风琴得小到没多少种不同音质，但他们能把它做成有几十种组合都很好用的程度。

[90 - 管风琴（下）](http://webofstories.com/play/17149)
------------------------------------------------------------------

很多斯坦福学生在这里做过独奏会，包括 Walter Hewlett——他现在是休利特基金会的重要人物、惠普董事，他是老休利特的儿子。所以拥有它很好，它现在也算斯坦福的管风琴之一。我作为管风琴师不是多出色，但作为计算机科学家我还行，所以这给了我一个引子：我去世界许多地方，人们会给我看他们的管风琴、允许我弹。而且我不必那么出色，因为我只是计算机科学家，我不是音乐家。所以我在——事实上去年十一月在苏黎世，我有一小时弹苏黎世最好的管风琴、圣母大教堂（Fraumünster）那台绝妙的管风琴。我还能弹费城 Wanamaker 百货那台世界上最大的管风琴，还有荷兰的管风琴，哈勒姆（Haarlem）那台著名的。在京都还有一台很好的管风琴，有四组音管基于日本乐器，相当引人入胜。我想我几乎从不在公开场合弹；唯一一次真是在加拿大滑铁卢，那儿的管风琴教授和我办了一场管风琴二重奏节目，所以有一些为两位演奏者写的相当有趣的音乐，通常在一台管风琴上，但有一次在两台管风琴上。那是我——我在那次之前很努力练习，所以那算是我管风琴演奏生涯的巅峰。

你现在在家弹得多频繁？

我一阵一阵地弹，有时一个多月不碰它，然后坐下来弹三小时什么的。你知道，我真该——不该惩罚自己，我总想：哦 Don，你这个项目落后了，你抽不出时间玩。所以我不该对自己那样说，我该允许自己多弹一点。但我非常享受音乐；有些为管风琴写的曲子那么好，无论你弹多少遍都听不腻。

[91 - 苏联的一个算法国际研讨会](http://webofstories.com/play/17150)
-------------------------------------------------------------------------------------------------------

我说过"算法分析"是我想要称呼的毕生事业，确实如此——这个领域，我认为我所做的绝大多数事，包括写《计算机程序设计艺术》，都在于找到一种定量方式来说一种计算机方法、算法有多好。所以既然我知道算法是我所有所爱与所做里最伟大、必须是第一的东西，我很高兴得知"算法"（algorithm）这个词来自阿拉伯语 Al-Khwarizmi，其中 Khwarizm 是乌兹别克斯坦的一个地区；但那时它是——有个湖，我是说咸海（Aral Sea）曾叫 Khwarizm 湖。那是世界上几乎被遗忘的一角，通常无论你看什么地图，它都在东、北、南或西的边界之外。如果你看伊朗地图，它在伊朗北边；看罗马尼亚地图，它在东边；看印度或阿富汗地图，它在西边；在俄国南边——它就是不出现在地图上，它是个被遗忘的世界角落。但我发现"算法"这个词就来自这里，Khwarizm。它意思是"来自 Khwarizm 地区的人"；其实巴格达有个区叫 Khwarizm 区——就像亚美尼亚人住在一个地方，他们会叫它亚美尼亚区，但这是巴格达的 Khwarizm 区。所以我想：好，我这辈子什么时候去趟 Khwarizm 会很有趣；我查地图册，哦不，它在苏联中部，我怎么去得了，从任何方向都没有路进去。所以我向我朋友 Andrei Ershov 提了这事，他当时正从俄国、从苏联科学院来访。嗯，那时他还不算我朋友，我对他不太熟，但他是 John McCarthy 的朋友，我们在 John McCarthy 家的派对上。我跟他说：你看，algorithm 这个词来自世界的这个角落，它在苏联；我们该找个时候庆祝一下，要是世界上的计算机科学家能来个"朝圣"，去 Khwarizm 庆祝这门学科诞生，那该多好。他说：嘿，那听起来是个好主意。于是他回国，做了所有安排，让苏联科学院赞助一个国际算法研讨会，持续两周，在乌兹别克斯坦那个被所有人遗忘的 Khwarizm 州举行。所以我不只去了 Khwarizm——我下飞机时，200 个孩子捧着花迎接我，还有地方电视采访。这是世界上第一次有人对他们那一角世界表现出兴趣，所以中东人的热情好客惊人地好。事实上，东道主那么慷慨，我开玩笑说：呃，给我提供个——不是妾，但你知道，我确信他要不是确信我是在开玩笑，真会照做。我们还能参观就在附近的希瓦（Khiva），那是一座博物馆般的古城，al-Khwarizmi 作者真正来自的地方——嗯，我不太确定，但总之那是一座保存完好的城，展示那种文化的一切伟大之处。在这个会议上，一半人来自苏联，一半来自世界其他地方；我们能沉思算法的意义。所以那又是我的一个亮点，能完成那次小访问、看到世界那个角落。令人惊叹的是，我们在这个村庄遇到各种民族的孩子，金发碧眼的，有些有韩国血统；我们参观棉花农场、摘棉花。我给自己买了顶 Khwarizm 人戴的那种帽子，这样我做算法工作时就能穿戴得体了。

[92 - Knuth-Morris-Pratt 算法](http://webofstories.com/play/17151)
---------------------------------------------------------------------------

几乎我写的每篇论文背后都有个故事，这一篇是个挺有趣的故事。这个算法本身出名了，但我不太确定——嗯，我自己过去 20 年没再用过它，但它出现在所有教科书里，而且它是一个很好的、有教益的例子：如果你想在一长段文本里搜索、找一个特定的词——假设我在找"the"或什么的——那样找那个词很蠢，让我们找"Dikran"吧。好，明显的办法是，你从文本的每个位置开始，说：这是 D 吗？哦是；然后你看下一个字母，是 I 吗？是 K 吗？不，这个词是"direction"什么的。好，那就去下一个位置重新开始，那是 D 吗？我们只观察到，你已经知道它是 I、不是 D，所以你不如在下一次测试前往前多跳一点。不过故事还不止于此，你可以有更复杂的词，比如你在找 Didymus 这个词，里面有不止一个 D，所以你会——但这件事有趣的地方在于，伯克利一位教授 Steve Cook 证明了一个非常惊人的定理。他说：如果你能——如果你取一台能力非常有限的计算机，如果你能在那台愚蠢的计算机上写个程序解决一个问题，无论那个程序多慢，都存在一个为真计算机写这个问题的快速办法。换句话说，如果你取一台特定的受限计算机，如果它到底能解决一个问题，那就有一个在真计算机上快速做它的办法。所以我们在这种奇特计算机上能解决的问题之一是，判断一串字母是不是回文——不管它倒着读正着读是否一样；不，抱歉，是判断它是不是回文的连接（concatenation of palindromes）——一个回文接一个回文，如此下去。这纯粹是个奇想，没人真在乎回文的连接，但就是这样；所以按 Cook 定理，既然存在办法让这台奇特机器识别这些回文，那就一定存在一个在常规计算机上快速识别这些回文连接的办法。但我想不出在常规计算机上做它的好办法，对我来说那似乎会是个难得多的多的问题。所以，我以为自己是个相当好的程序员，可这里有这个定理说存在办法，而我想不出这个办法。那是我第一次被某人用这种方式难住——他说他有好办法而我想不出。所以我花了下午，也许一个下午加一个晚上，在一个黑板上极其详细地推演出 Cook 的构造最终会怎样给我一个在常规计算机上快速做它的办法。突然，啊哈，当然了，就是那个窍门。我于是悟出这个一般定理如何应用于一个真实的编程问题，而且它也会解决文本搜索的问题。所以我在去伯克利的旅途中提到这个，在那儿我遇见 Vaughan Pratt，他是做出大部分关键洞察的人，我只是之后写下来的人；然后我们发现 Jim Morris 几个月前也发现了同样的想法，并用在软件里；而别的人看过这个程序却不理解，所以把它去掉了。但总之，这是一个高效搜索文本的好方法，也适合用来教计算机科学原理，所以它出了名、和我的名字联系在一起。可我有 160 篇论文，每一篇都有点小转折，让它研究起来很有趣。

[93 - 我给年轻人的建议](http://webofstories.com/play/17152)
--------------------------------------------------------------------

如果有人问我会给年轻人什么建议——他们总爱问这种好笑的问题。我想最先浮现在我脑中的想法之一是：不要只因为某个东西很潮流，就相信它是好的。我大概会走向另一个极端——如果我发现太多人采纳某个想法，我大概会认为它是错的；或者如果我的工作变得太流行，我大概会认为我得改变。那当然很荒谬，但我太常看到另一面：人们违背自己的直觉做事，因为他们觉得群体想要他们那么做；所以人们会研究某个课题，即使他们对它没什么兴趣，因为他们觉得研究它能得到更多声望。我认为，做好科学比做流行科学能让你得到更多声望，因为如果你顺着自己真认为重要的东西走，它长期真正重要的概率更高，而长期对世界的益处最大。所以通常我写书、出书，都不同于以前写过的书，因为我觉得有这种书的需求——不是因为有人请我写这样一本书，或别人已经做过那种事。所以在我看来，跟随自己的直觉比随大流好。我朋友 Peter Wegner 60 年代告诉我，对《计算机程序设计艺术》来说，我不该先写整个系列，而该先写个"读者文摘"版，之后再扩展各部分。那对他可能比对我更适用、更适用得多，但我工作的方式完全不同。我必须把一样东西看到我已经包围它、完全理解它，才能有信心写它；所以这就是我的工作方式，除非我完全理解了底层的东西，否则我不想写高层的东西。我知道其他人有完全不同的长处，但对我而言，我写了一本关于《圣经》几节经文的书——一旦我理解了那些经文，以及我能从图书馆找到的关于《圣经》一小部分的一切，突然我就有了牢固的钉子，可以把关于它的其他知识挂上去。但如果我一辈子只是走马观花，对任何部分都没有深入了解，那一切似乎都轻飘飘的，对我没有满足感。经典的说法是，博雅教育（liberal education）就是"对每样东西都学一点、对某样东西全学会"；我喜欢"在一个领域全学会，你才感到——如果你没有一样真正扎实掌握的东西，就永远没有足够的信心"。很多时候，为了写一个句子，我不得不读大量材料，因为这样我的句子就会——我会选那些比我真没掌握知识时更有说服力的词，如果我真没知识，它总会隐含地泄漏在我的写作里。这些都是我在反思那些区分我所做和所见别人所做的方向时，涌上心头的一些模糊念头。

[94 - 我的孩子：John](http://webofstories.com/play/17153)
------------------------------------------------------------

从一开始我就努力做个好父亲，而不只是个缺席的父亲什么的。我确实花了很多时间写书，但也花了很多时间陪他们。我最喜欢的论文之一是由他们在我们一次加州旅行中启发的，那篇是个玩笑论文，叫《歌曲的复杂度》（"Complexity of Songs"）；我们想找的是：在不需要记太多的情况下，你能拥有的最长的歌。我们从《墙上的 99 瓶啤酒》这样的歌开始，那不用记住太多就能唱很久；然后我们继续到别的一——《梨树上的一只鹧鸪》。总之我能从数学角度研究这些歌，看生成一首能持续很久的歌需要多长的计算机程序。我的孩子们是这个灵感的一部分，因为我们去了尖峰国家纪念碑（Pinnacles National Monument）旅行，在车里，我们不是在说"爸爸我们什么时候到"，而是在唱歌。然后我们唱完了所有的歌，于是我们想到这个，它引出一个有趣的数学问题；最终我们得出了最终解：是"耶耶，我喜欢，耶耶，我喜欢"无限重复，那是对那个问题的最佳解。我也很高兴现在有一些孙辈，四个男孩。似乎有什么在我母亲那边——如果她今天还在世，我想会有十个孙辈、曾孙辈，全是男孩。所以这里有些有趣的事，它看起来不太随机。但我儿子，令人惊叹地，成了个运动员——他老爸完全是个废柴——但 John 在斯坦福时是世界级的飞盘（Ultimate）选手，是全国锦标赛的最有价值球员。然后他加入一支半职业队伍，他们好几次世界第二；他左撇子，显然是打飞盘的人的一个优势，那是一项很难的运动，大量奔跑和策略。所以人们来找我，我在其他国家遇到很多人，他们认识我儿子、从没听说过我，这很有意思，因为他有运动才能。但他结果也是个很棒的老师，和更年轻的学生打交道；他现在做了十多年的高中数学老师。他上了斯坦福的 STEP 项目（斯坦福教师教育项目），然后在当地学校教书，现在在科罗拉多教，还在那里一所私立学校赢得过最佳数学老师奖之类。所以他在自己的天地里，这就是我父亲曾做的；我一直觉得教书是我、我的角色。我通过书来教书，因为我这样能触及更多得多的读者；John 不喜欢写作，我们打电话给他而不是收到家信。现在这个国家对那些献身高中教育的人有巨大的需求，而由于现代高中，这是个如此吃力不讨好的工作。他教过吸毒、怀孕、家里有巨大问题的孩子；他没有很多老师面对的那种学校里有人持枪的情况。但考虑到挑战和老师的低薪，似乎我们需要一场真正的社会革命，让那些有动力成为好老师的人也得到恰当的回报、为他们的付出得到认可。我遇到过很多英雄般的老师，比如加州里士满的，他们在那里教计算机科学，那是个艰难的生活。他们得靠配偶支持；我儿子也是。他妻子在 Sun Microsystems 工作，远程办公，这意味着他们能勉强度日。

[95 - 我的孩子：Jenny](http://webofstories.com/play/17154)
-------------------------------------------------------------

我为我的女儿非常骄傲，她现在没有职业，她在养育她的两个孩子，而且在国际母乳会（La Leche League）相当活跃。她和丈夫在牛津住了几年，她在那儿养育孩子的同时做了很多活动，总有许多项目在进行。她也做了一些事，比如协调我《3:16》书艺术品的展览，那展品环游了世界。她在做博物馆陈列的项目，她是个出色的校对和写作者，现在是个博主。所以似乎我还有这些生活里想提及的其他部分——

她学的是什么？

她上了布朗大学，她发现如果她在布朗上一门计算机课，人们会期待——她姓 Knuth，人们会期待她真的出类拔萃，那把她吓跑了。我想她其实很擅长科学，但布朗大学独特之处在于它给学生自由选择自己课程的自由。那儿有种"自己卷"（roll your own）的风格，发展得很好；她到那儿后开始从字母 A 读课程目录，大一她选了艺术、人类学、亚洲文学、非洲史——目录里一切她感兴趣的，但她从没读到字母 B。但她最终成了布朗的人类学专业，然后她要在美国——做一种"美国人类学"的论文。她也有一些极好的关于安提瓜土著房屋的研究，她去过那儿考古挖掘；她还研究了服装店里模特（mancle）的形态演变——那是叫什么的——？我努力想这个词。

人台模特（Mannequins）。

人台模特，对。所以研究人台模特历代的形状，暗示了她要做的某种兴趣。她还大举研究过河流系统、人们如何应对防洪、努力让河流保持生机——兴趣相当广泛。她从没找到合适的导师；当她丈夫在 MIT 获得职位时，她去了哈佛上课，本来可以在那儿完成，但后来他在牛津找到工作，所以她从没完成正式教育；但她通过写作做了很多有意思的贡献，我想她现在忙得不可开交、干得不错。但高中时她表现出科学上的强项。我一直觉得她——她非常敏捷，我们常玩游戏，她总赢我，John 也是。

[96 - 做一套我的论文集](http://webofstories.com/play/17155)
--------------------------------------------------------------

我 90 年代开始游泳这件事，还有另一个很好的副作用：就是有一天在游泳池遇到你，你说：我们为什么不出版一本关于文学编程的书呢，就是你这个热衷的想法？我想，其实在日本已经出过这样一本书，日本有人决定写这么一本。我那时手上已经够忙了，但你去让我最好的学生之一 John Hobby 做了一个计划，看这样一本书该包含什么，于是我被打动了。事实上我如此被这个想法吸引，想到我能把我写过的论文收集起来、在我有生之年出版，我就激动不已。作为一个大量使用图书馆的人，我当然大力使用科学家的论文集；我知道很多我常查的数学家的论文卷，也有物理学家和其他人的。但这些几乎总是在那人去世后收集的，有时在他死后 100 年。所以这儿有样东西，是你真在提议把我写的几篇以文学编程为统一主题的论文收起来、放成一本书。一旦我意识到这会多么令人满足——你看，我有这 160 篇论文，我都有它们的抽印本，形状、大小、颜色各异；我总想，如果我妻子哪天想给我惊喜，她可以让人把它们精美装订，它们就不会这么乱了。但你在这儿说：不，不仅能精美装订，还能重印，我甚至能纠正我知道的这些论文里的错误。而且你要自己做全部工作，你有 Beth Bryson 打理，所以她给我寄来最干净的抄本。我此前从没遇到过这种情况，有人处理过我的论文、拿给我一样我几乎不用完全重做的东西——那是在我遇见 Silvio Levy 之前。所以我得到一本对我个人也惊人地有吸引力的书，也算实现了我一个自己都不知道的梦想。然后它发展成：我所有的论文会出现在后续的各卷里，按不同主题组织；到目前为止，那八卷中的六卷已完成。我必须说，让它们都以一致的格式、把我知道的错误剔除、放进上下文、按我希望最初就那样写的方式重铸，这让我多么高兴。它给我一个机会——它们不是忠于历史记录的：如果有人想知道我某年犯了什么错，他们能去期刊里查；但如果他们想知道什么让我兴奋、我为什么写那篇论文、我认为那篇论文未来重要的是什么，他们能看这本你准备的论文集。所以八卷里六卷完成了。我要题献给 Bob Floyd 的那卷是下一个，是关于算法设计的；我留着当甜点的最后一卷，是那本我提过的关于乐与游戏的。所以，当我梳理自己的优先事项——如果被告知我只剩多少天可活我会做什么时——我想到，我真的非常希望把最后这两卷论文集完成。所以希望这能成。我正在写的第四卷那部分我得先做完，但之后我要做另外这两卷论文集，把它们完成，然后再继续第四卷，这是我现在 的想法。那本关于排版的书对我是一种特别的乐趣，因为它里面有大量精彩插图；但关于算法分析的书，那是我主要的毕生研究工作，把所有那些论文放到一个地方，是能带来巨大满足的。

[97 - 我为什么选算法分析作为课题](http://webofstories.com/play/17156)
------------------------------------------------------------------------------------------

说到算法分析，我应该很快说一句：我给这门学科命名、我喜欢它，但我没提起初最关键的东西——我为什么认为它足够丰富、能作为毕生工作。原因是，1962 年我在做编译程序时，花了一天看一种叫散列（hashing）的算法，更具体说是叫线性探测（linear probing）的一种散列。我听说了普林斯顿一些学生研究过这个算法，他们弄不清它会跑多快。我有几个小时可消磨，就看了看，我运气不错，看出怎么分析它、精确证明它会跑多快，这改变了我的一生。我说：哇，做这个问题、算清楚它，这太好玩了；结果它是一个美丽的数学问题，虽然它出自一个完全实际的计算机科学领域。而且我知道在排队论（queuing theory）里还有很多其他问题，只是某些算法的特例——这已经是个热词了，排队论，研究队列行为方式。那只是某种算法的特例，所以如果我考虑所有有趣算法这个完整类别，它必然充满和排队、散列一样有趣的问题，而我知道它们就在那里。所以这就是为什么就在那时我说：嗯，花一辈子做这个不坏，因为你有一大堆问题；它们不仅有优美的数学结构、彼此和谐地牵连成美丽的图案，而且外面还有"客户"，当你解决问题时，人们会说：嘿，谢谢你解决这个问题，Don。所以这是一个值得投身进去的伟大领域，而事实证明确实如此。

（以下为提取上述文本所用的原始代码）

（代码为 Perl 脚本，用于从 webofstories.com 抓取各章节文本，此处按原文保留，不翻译。）
