首页 >> 计算机科学 >> 文章

高德纳近照

上一篇我们讲到,高德纳计划要写一套七卷本的《计算机程序设计艺术》,没想到刚刚写完第三卷,就被ACM授予了图灵奖。这在图灵奖历史上是从没有过的事。我们还记得巴黎会议上的诺尔吧,他的图灵碗比他的获奖成果迟来了整整45年,他等这个碗时间,比高德纳获奖时的岁数还要长。但是,高德纳在获此殊荣之后,再一次令世界大跌眼镜:他宣布从此歇笔了,因为排版工具太差,破坏了这套书的美。

高德纳的这一动作让外界十分震惊,可以想见,他遭到了排山倒海的怀疑。有人说,高德纳肯定是江郎才尽,拿了图灵碗,见好就收;有人说,图灵奖对前三卷的评价过高了,高德纳无力面对这么大的压力,只好找个理由撤退;还有人说,获奖之后停止写作,充分体现了他写书的目的就是为了功利。他们纷纷质疑,这个图灵碗是彻底发错了人。

然而,如果我们真正翻开TAOCP读一读,就不难理解这是为什么。我觉得,对于算法的研究,可以分成三层境界。第一层是分析算法的复杂度,这是计算机专业的大学生普遍掌握的技能,达到这个境界,可以说是入了算法的门;第二层境界是改进算法的复杂度,在分析之后继续思考,想办法去降低它,这就可以算是懂算法了;第三层境界,就是寻找算法的最优复杂度,不但要改进它,而且要改到什么程度呢?就是要证明出来,我改完的算法就是最优的,你无论如何都不可能再改进了,再改进就违反宇宙规律。

高德纳,就是典型的第三种人。诸位不妨看看,TAOCP里面给出了多少最优算法,高德纳是铁了心,要当算法世界中的上帝。高德纳就是这么一个极致地追求极致的人,他强迫自己把每件事都做得不可逾越。那么他怎么能够容忍,这套被他视为毕生事业的书,被糟糕的排版技术束缚?于是,无论别人怎样质疑,他最终还是把写作晾到了一边,开始全力以赴地研究字体和排版。高德纳让我们领略了什么才是真正的个性,个性绝不是打18个耳洞,或在牛仔裤上抠36个窟窿。个性,就是在所有岔路口都追随自己的心,让所有影响你追求梦想的障碍统统跪倒。

高德纳这一歇笔,就是十年。在这不务正业的十年当中,对极致的追求像只看不见的手,推动他创造了三个响亮的成果,其中影响最大的,就是排版系统TEX。如果大家用MS Office Word写过论文,就会体会到那份求死不得的心:不断地调整字号、行距、缩进、分栏,如果这还不算什么,你再写几个数学式子看看?但是在TEX中,这些麻烦几乎完全不存在,你唯一需要做的,就是把你想写的内容告诉它。如果说时间就是生命,那就可以认为,TEX每天都在拯求科学家们的生命,说它推动了科学的发展也不为过。TEX是一场出版界的革命,直到现在仍是全球学术排版的不二规范,它所排出的文字之美,特别是数学式子的美,让人们由衷感叹:啊,一毫米都不能再挪动了。

除了功能上的美之外,TEX作为一个软件产品,也令人叹为观止。它的版本号不是自然数列,也不是年份,而是从3开始,不断地逼近圆周率(3.14,3.141…目前最新版本是3.1415926)。高德纳再一次用行动宣告,我这个东西,不可能再有什么大的改进了,最多只能小修小补,使其趋近完美。他还专门设立了奖金:谁发现TEX的一个错误,就付他2.56美元,第二个错误5.12美元,第三个10.24美元…以此类推。我们都知道,传说某个国王就因为这种指数游戏失去了江山,高德纳作为算法大师,更清楚指数增长的可怕性。然而他却敢立此重赏,结果直到今天,他也没有为此付出多少钱,可见TEX经过了怎样的千锤百炼。这个耗费十年打造的玩具,让当初质疑图灵奖发错了的人们全部闭嘴了,他们甚至改口说:哦,为了这个TEX,不妨再给高德纳一个图灵碗吧。

第二个成果,就是METAFONT,这是一套用来设计字体的系统。对于它的价值,一句话就能概括:计算机界最懂字体的两个人,一个是苹果的乔布斯,另一个就是高德纳。

第三个成果,就是文学化编程(Literate Programming),它把程序设计的艺术性展示得淋漓尽致。高德纳说,一段好的程序,不仅仅是要清晰易读,而且要能够读出美感,读出意境。天呐,意境,一排一排的计算机代码,要像诗歌一样充满意境。高教授,你疯了?

高德纳说,你才疯了呢,看我给你们露一手。于是,他在C语言的基础上,开发了一套CWEB系统,除了用它写出了TEX程序之外,竟然还用它写了一本叫作《Stanford Graphbase》的书。高德纳微微一笑,我都能用编程语言写书,何况有意境的程序了,我的口号是:程序员也能得普利策奖(这是全球新闻写作领域的最高奖项)。

文学化编程还为高德纳报了一个小仇。我们第6章中讲过的迪科斯彻,当年提出了一个“结构化编程”,提倡不要在编程时使用“goto”语句,高德纳偏要唱反调,结果被迪科斯彻称为“没结构”。这下可好,高德纳狡黠一笑,嘿嘿,如果你不跟我混,你就是“没文化”咯(literate也有“文化”之意)。

歇笔十年的高德纳,手捧这三项成果重出江湖,打消了一切质疑。这时他才对十年前的歇笔事件做了一个轻描淡写的解释:一个人要想把事情做得漂亮,就必须要跟上帝保持和谐,现在,上帝终于让我去写四卷了。

他的笔,又拿了起来。在写作第四卷的过程中,为了帮助读者打好数学基础,以便面对TAOCP中的数学高峰,他又专门撰写了一本《Concrete Mathematics》。这本书有中文版 ,翻译为《具体数学》,我一直觉得稍有不妥。Concrete到底是什么意思呢,高德纳说,意思就是我不教那些软绵绵的数学,我要教的是扔到地上能砸个响儿的数学。据说,他在课堂上说完这番话,有好几个同学扭头走出了教室──他们是土木工程系的学生,还以为高德纳是讲混凝土的呢(Concrete在土木领域意为“混凝土”)。说到高德纳的教学,还有个趣闻,他批改作业的时候只抽查第314页,就能判断出这份作业的质量。为此,我们这本书的第314页用来向高德纳致敬。

1992年,高德纳为了专心写作,宣布提前退休,并停用电子邮箱。高德纳一共带了28位博士生,他觉得28这个数字很好,于是便宣布不再收学生了。尽管如此,他仍然为想要师从于他的人们留下了一个盼头:他开了一门叫做Computer Musing的公开课,每次会提出一个问题,如果谁能快速解出来,高德纳就会为他的博士论文签名。不知道哪位后起之秀能够获得如此殊荣呢,我们拭目以待吧。

2008年,在TAOCP的前三卷面市30年之后,第四卷终于千呼万唤始出来,而高德纳,却已是白发苍苍的古稀老人了。一句话,一辈子,一生情,一杯酒,他对计算机科学的热爱,使他为这套丛书耗费了一生的心血。在这一章的最后,我想用一个词,来形容这位天才的计算机科学大师,但是思前想后,我只能想到唯一的一个词:God。

我想,尽管高德纳是一位虔诚的基督徒(他还专门写过关于圣经研究的书),但他一定会欣然接受这样的形容。正如当年Linux的作者Linus说:上帝在梦中告诉我,我做出了最优秀的操作系统。

高德纳回答说:我可没这么说过。

(\end{第八章})

0
为您推荐

82 Responses to “近看图灵碗 (8. 我就是上帝) (下)”

  1. Armeny说道:

    碰到沙发,不抢不可~

    “个性绝不是打18个耳洞,或在牛仔裤上抠36个窟窿。个性,就是在所有岔路口都追随自己的心,让所有影响你追求梦想的障碍统统跪倒。”

  2. 贝吉塔说道:

    额,这篇(下)熬了我一个过年!

  3. pathintegral说道:

    tex确实是个伟大发明

  4. c2blog说道:

    很有意思

  5. baopao说道:

    写得真漂亮! 忍不住过来留言向作者也向高老头子致敬!

  6. 打破的管道说道:

    “在TAOCP的前三卷面市30年之后,第四卷终于千呼万唤始出来,而高德纳,却已是白发苍苍的古稀老人了。”
    感觉挺可惜的,排版、字体、铺垫用的数学教材,换别人也不是不能写。Word之所以不如,也许是因为它的最大客户群不常用公式,不值得在上面投入太多研发精力。我相信如果微软想做,应该比高德纳做得好。高德纳是个旷世奇才,如果把搞业余爱好搭进去的几十年用来攀登学术顶峰,计算机算法界也许就不是现在的样子了,因为有些事情只有他才能做到。

    这篇介绍高德纳的文章,是我看过的最好的一篇!

  7. iceblast说道:

    牛人,大牛人。

  8. conwood说道:

    好文啊。高老师牛人。

  9. A.S.说道:

    对老头很不满,他这一个性,后四卷得等到啥年月啊,要是写不完咋办,这损失可不是一般地大呀。

  10. lalunasun说道:

    啊,这就end了?

  11. Metaverse说道:

    长年受WORD折磨的人飘过……那个该死的项目编码功能,同一个文件几乎每换一台机打开一次格式就会乱,每次批量地调标题级别和进缩量都几乎想砸机……是不是该游说老总用TEX重新做一个报告模板。。。

  12. KOMA说道:

    zan~
    请问什么时候这一系列文章会出书?

    • 苏椰说道:

      谢谢支持啊,争取今年内完成。我自己总觉得写得不好,总回头改以前的,进度就慢了,抱歉咯。

    • 苏椰说道:

      谢谢支持啊,争取今年内完成。我自己总觉得写得不好,总回头改以前的,进度就慢了,抱歉咯。

  13. subey说道:

    呵呵,这个系列估计会成为松鼠会的家传宝。
    隔这么久才出这么点,憋得人心慌慌。

    当我们这些痴迷者们,苦苦的守候着下一篇时,
    松鼠会的编辑没准都藏在后头乐着:
    不能轻易吃着的东西才好吃呢~

    • 苏椰说道:

      真不是故意吊胃口,每一篇写完后,除了我博客之外,第一时间就发在这里的。写得有点慢,只能说抱歉了,我会尽量快的。

      • subey说道:

        呵呵,只是份心情的描述而已,无它。
        写的多好!
        而且,越加以熟思,改进,岂不更好!

        当时,在你的博客看的时候,就这种心情~

  14. 焦淑华说道:

    “说到高德纳的教学,还有个趣闻,他批改作业的时候只抽查第314页,就能判断出这份作业的质量。”——很可爱的老头!

    • 打破的管道说道:

      果然是趣闻,确实有点儿扯,谁的作业能有314页那么多

      • iyuorc说道:

        恩,这里我也看得有点糊涂了,究竟是学习交的作业中的第314页,还是在他撰写的书《Concrete Mathematics》第314页里的作业内容?

      • 苏椰说道:

        就是作业的314页,如果没有那么长,就看第100页。他的作业都长。

      • 苏椰说道:

        就是作业的314页,如果没有那么长,就看第100页。他的作业都长。

        • 打破的管道说道:

          太有意思了,突然想到几个气死高德纳教授的办法:
          1. 作业本上不打页码,让老头子翻着去找吧,当他翻到最后一页发现是第313张,为了找到第100页,还要从头再翻100张
          2. 有页码,但故意缺少314、100两页
          3. 有页码,且不缺页不多页。但故意在314、100两页留大量空白,比如章节断开之类,总之看上去要很自然,偏不满足高德纳变态的心理:)

  15. stopping3721说道:

    对他感兴趣的人去看看他的主页吧http://www-cs-faculty.stanford.edu/~uno/
    一个很有魅力的科学家 一下摘抄一部分 他最近的言论
    Retirement

    I retired early because I realized that I would need about 20 years of full-time work to complete The Art of Computer Programming (TAOCP), which I have always viewed as the most important project of my life.

    Being a retired professor is a lot like being an ordinary professor, except that you don't have to write research proposals, administer grants, or sit in committee meetings. Also, you don't get paid.

    My full-time writing schedule means that I have to be pretty much a hermit. The only way to gain enough efficiency to complete The Art of Computer Programming is to operate in batch mode, concentrating intensively and uninterruptedly on one subject at a time, rather than swapping a number of topics in and out of my head. I'm unable to schedule appointments with visitors, travel to conferences or accept speaking engagements, or undertake any new responsibilities of any kind. I'm glad that the WWW makes it possible for me to respond to questions that I don't have to see or hear.

    I miss teaching and daily interaction with students, but I get stimulating feedback by giving regular public lectures about once a month.

    I'm proud of the 28 students for whom I was a dissertation advisor (see vita); and I know that 28 is a perfect number. So I won't be advising any more students. But I do say that if somebody solves one of the open problems stated in one of my Computer Musings, within about two or three weeks of the time I stated it, I'll sign their thesis. (After two or three weeks, I'll be working on something else and won't have time to read their work.)

    I tend to spend about two hours per day in the library, about a half hour in DeGuerre Pool, and the rest of the time at home reading and writing, sometimes also sleeping and eating. I like to play piano and organ in the music room of my house, although lately I haven't had nearly as much time for music as I would like. If you're good at sightreading four-hands piano music, I have hundreds of pieces I'd like to try playing with you; please drop me a note and we can hopefully get together for a jam session. By the way, I'm also a big fan of the Stanford Theatre.

    Of course I like to read nontechnical books, although I read very slowly. Here are some that I recently read and heartily recommend:

    * Life A Users Manual by Georges Perec (perhaps the greatest 20th century novel)
    * Gaudy Night by Dorothy L Sayers (captures Oxford high-table small-talk wonderfully)
    * An Instance of the Fingerpost by Iain Pears (also Oxford but in the 1660s)
    * Death of a Salesperson by Robert Barnard (who is at his best in short stories like these)
    * The Haj by Leon Uris (great to read on a trip to Israel)
    * Marjorie Morningstar by Herman Wouk (in-depth characters plus a whole philosophy)
    * On Food and Cooking by Harold McGee (applied biochemistry in the kitchen)
    * Food by Waverley Root (his magnum opus, a wonderful history of everything delicious)
    * The Golden Gate by Vikram Seth (the Great California Novel, entirely in 14-line sonnets)
    * The Age of Faith by Will Durant (volume 4 of his series, covers the years 325--1300)
    * Efronia by Stina Katchadourian (diaries and letters of a remarkable Armenian woman)
    * The Man Who Knew Infinity by Robert Kanigel (biographies of Ramanujan and Hardy)
    * Hackers by Steven Levy (incredibly well written tale of our times)
    * The Abominable Man by Maj Sj??wall and Per Wahl???? (one of their brilliantly Swedish detective novels)
    * Blasphemy by Douglas Preston (the best novel to deal with "science versus religion" that I've ever encountered)
    * Blacklist by Sara Paretsky (a brilliant characterization of the tragic state of politics and class relations in America that also happens to be an action-packed murder mystery)
    * The Travels of Ibn Battutah edited by Tim Mackintosh-Smith (fascinating and eye-opening journal by a 14th-century Muslim scholar)

  16. Mike说道:

    omg

  17. MarsV说道:

    \begin{ack}
    感谢苏椰同学带来的这么精彩的系列!
    \end{ack}

  18. laplaceme说道:

    写得很有意思啊~

  19. sidbai说道:

    希望早日出书,也希望给我们这些忠实读者们打打折,嘿嘿。

  20. lpiszdf说道:

    自从七年前接触TeX之后,我一切需要处理地文档都是用TeX排版的。

  21. fubenlewis说道:

    看他的主页,他的中文名字高德纳是一个叫Frances Yao的人取的。我搜了一下,悲剧的发现全部是姚明和弗朗西斯……这个Frances Yao是谁啊??

  22. ck说道:

    這樣的文風寫他,神話他,是不合適的,我自己不會給小孩看這樣文風的東西,這個不利於他自己成為大師.

    • 苏椰说道:

      感谢意见。

      这篇主要是想体现高德纳作为一个天份异常的人(这一点不得不承认),他是如何坚持自己的性格,坚持做自己认为正确的事,并做出了非凡的成绩。这并不是对他的神话。您如果觉得孩子看了会不利于成为大师,我也只能感到遗憾了,但是以我的观点,真正的大师不是培养出来的。个人观点啊,仅供一笑。

  23. dob502说道:

    SET  Cweb=1
    SET  Tex=1
    IF   Concrete=3.1415926  GOTO  God
    THEN             GOTO  $
    God

  24. 锋了说道:

    我喜欢这篇

  25. Winnie说道:

    好看

    • felixlong说道:

      写的太文学化了,偏离了许多事实, 给小孩子看不好!!高德纳拿图灵奖主要是在编译理论上的贡献, LR文法就是他先提出来的。图灵奖是不会为写书写软件这种偏工程的贡献而发的, 到现在为止就只有两个做工程的人 汤普森 和 里奇 因为UNIX和C语言而拿到了1983的图灵奖。

      • 苏椰说道:

        感谢意见。

        1、LR文法不是高德纳提出的,他只是把一些早期算法推广到了LR parser。事实上,LR文法不存在“谁提出”的问题,它是经过许多年,由许多人的工作逐渐完善形成的,没有明确的提出者。高德纳只是后期的一个参与者,他在编译领域的贡献并不大。

        2、高德纳获奖时,颁奖词是这样说的:

        授予高德纳图灵奖,以表彰其在算法分析、程序设计语言的设计和程序设计领域的杰出贡献,特别是其著名的《The Art of Computer Programming》系列丛书。

        从这里看,他获奖的原因主要还是算法分析和程序设计,而TAOCP是他在这一领域的集中结晶。

        3、因工程成就而获得图灵奖的学者有很多,仅一个Algol语言就造就了至少5个图灵奖。还有数据库,软件工程,面向对象领域,都诞生过图灵奖。毕竟计算机科学是一个工科。

        以上是我的看法,欢迎继续讨论。若还有其它不符事实的地方,也欢迎您指正。

  26. Thyme说道:

    登录膜拜神人~~~

  27. Tri说道:

    悬赏那个好象不是这样的吧
    我看wiki上是这么说的:
    "TeX是非常稳定的程序,Knuth悬赏奖励任何能够在TeX中发现程序漏洞(bug)的人。每一个漏洞的奖励金额从1美分开始,并每年翻倍,直到目前的327.68美元封顶。然而Knuth从未因此而损失大笔金钱,因为TeX中的漏洞少之又少,而真正发现漏洞的人在获得支票後,宁愿将其裱起来留作纪念也不愿拿去兑现!
    TeX的最後一个bug已经被Knuth自己发现了。"

    你看,1美分开始(起点就挺低),每年翻倍(不是每个),15年后才能翻到327.68美元,最后,还封顶,封顶啊!Tex出来有25年了吧,不封顶早涨到30万美金了。Knuth才不傻呢,要像文中说的那样,十几个bug出来他就赔光了。

  28. luantiao说道:

    网文《程序员的十层楼》里就说了,最高层被称为God。这位高德纳,大家一起看上帝吧!

  29. luantiao说道:

    网文《程序员的十层楼》里就说了,最高层被称为God。这位高德纳,大家一起看上帝吧!

  30. guest说道:

    3.14日上了新京报,故意选的日子?

  31. guest说道:

    不过新京报版本有个问题,说“20世纪最重要的12本物理学著作之一”,不准确。
    我估计是来自网上的这样一句话:
    They are selected by the American Scientist as one of the twelve physical-science monographs of the twentieth century
    第一,这里的physical-science是“物质科学”,隐约相当于"自然科学"吧,不是特指物理学。
    第二,monograph不能直接省略成“著作了”,实际上American Scientis是选的20世纪最重要100本科学著作,此书属于The Physical Sciences分类下Monographs列表的12种之一,这个意思不能像文中那样描述。

  32. guest说道:

    还有什么“序列号”也不知所云。至于BUG奖金问题上面有人说了。

  33. zn说道:

    接下来会是McCathy么

  34. i坠落的魔说道:

    抓紧发稿

  35. zebrat说道:

    写得不错啊。 赶紧发。 一个小小的建议,能不能把一些不常用的专业术语的英文用括号注上。 方便读者了解究竟是什么意思。

  36. 错杂谈说道:

    以下是我收集的一些Knuth的八卦,给学生讲Latex时,学生们每次都听得很High,发出来,大家一起瞻仰一下高老爷子的绝世风采。

    1938年 1 月 10日生于美国威斯康星州密尔沃基市。他在模式方面
    辨别和熟练操作的能力在八年级的时候开始显现出来。当时,当地
    的一家糖果制造商举办了一项比赛,比赛要求选手用其品牌
    “Ziegler’s Giant Bar”中的字母组成新的单词,规定时间内组成单词
    数量最多者获胜。Knuth参加了比赛,并以单词总数 4500余个远远
    超过了裁判的 2500 个的标准,轻松赢得头奖。赛后,Knuth说道,
    如果自己当初想到回答时用些省略符号的话,还能写出更多。这次
    比赛 Knuth为学校赢得了一台电视机,还为每个同学赢得了一根糖
    果棒。

    Knuth多产的出版事业开始于他的高中时代,当时他的科技设计
    被 Westinghouse Science Talent Search 光荣提及。他的“Potzebie
    System of Weights and Measures” 的基础章节被登在 Mad 杂志
    第 26号,“Power” 的基础章节被叫作“whatmeworry”。Mad 的编辑
    认识到了年轻的 Donald著作的重要性,以 25美元买下了他的文章,
    并刊登在了其 1957 年 6月的期刊上。

    虽然 Knuth的等级平均分是学校历史上最高的,但是他和他的指导
    老师还是对他能否成功学习大学数学持怀疑态度。Knuth 说在他高
    中阶段和大学早期一直有一种自卑感,这个问题一度是他的一个障
    碍。作为一个大学新生,Knuth 没有对于失败的恐惧,他花了许多
    时间攻克额外的数学难题,几个月后,他在这方面的能力已经远远
    超过了其他同学。

    当 Knuth 在 Case科学院(现在的 Case Western Reserve)获得物理
    奖学金时,梦想成为一个音乐家的计划改变了。Knuth 回去继续研
    究数学是在大二,当时一个爱出难题的教授提出了一个特殊的问题,
    并说哪个学生能解决这个问题就立刻记成绩 “A”。Knuth跟大多数
    同学一样,也认为那是道解不出来的题目,直到有一天,他错过了
    公共汽车,只能步行去看一个演出,Knuth利用路上这点空闲时间
    决定尝试一下。那阵子他运气真的是非常好,不仅问题很快就解开
    了,得到了“A”,还成功地经常逃课。虽然 Knuth 也承认,逃课让他
    有负罪感,但是很明显,他完全有能力补上落下的功课,接下来的
    一学年,他的离散数学就又得了个“A”,而且还获得了给自己不能
    参加的课程评定论文等级的工作机会。

    1956年,作为 Case的新生,Knuth第一次接触到了计算机,那是一
    台IBM 650。Knuth说直到一年后,女孩才进入了他的生活。这又是
    计算机科学界一直以来亏欠科学家们的一个事例之一。

    Knuth熬夜读 IBM 650 的说明手册,自学基本的程序设计。那时,
    在高等计算机语言发明之前,程序编写只能用第二代或是汇编语言
    这个工作既耗时又困难,因为指令必须根据每台机器特定的构造编
    写,而实际上指令只须一步就可从二进制 0、1系列转存到计算机
    硬盘上。Knuth 说,有了第一次使用 650的经历,他便肯定自己能
    编写出比说明手册上介绍的更好的程序。

    Knuth很快便开始编写可以执行数学函数的程序。他的第一个程序
    是把数字转化为素数,第三个是做井字游戏(或者说是让计算机在
    改正每次输的错误的过程来学会玩井字游戏)。作为学校篮球队的
    经理,Knuth 编写了一个根据不同成绩标准评定每个运动员对球队
    贡献等级的程序,他的努力赢来了那些认为这样做有助于球队赢得
    同盟冠军的教练的好评。Knuth 的成就成了新闻周刊的标志,他和
    教练、计算机的照片也被刊登在 IBM 650 后来的说明手册上。

    1960年,Knuth从 Case 毕业时享有着最高荣誉,在由全体教员参
    加的选举上,他因其公认的出众成就获得了硕士学位。1963年,
    Knuth回到加利福尼亚理工学院攻取了数学博士学位,之后成为了
    该院的数学教授。在加利福尼亚理工学院任教期间,Knuth 作
    为 Burroughs司的顾问继续从事软件开发工作。1968 年,他加入了
    斯坦福大学,九年后坐上了该校计算机科学学科的第一把交椅。
    1993年,Knuth成为斯坦福大学“The Art of Computer
    Programming”(计算机程序设计艺术)的荣誉退休教授。

    1962 年,Knuth 还是个研究生的时候就开始了为不同的机器编写
    编译程序。在不知道众多软件公司正高额寻求成百上千的编辑者的
    情况下,Knuth 编写了一个程序,赚得 5000美元,他的名字立刻响
    誉了整个行业。世界上一流的出版社 Addison-Wesley找到 Knuth,
    请他写一本关于编译程序的书。到 1966 年,Knuth 已经发表
    了 3000页的手写设计草图,并且发明了一种综合方法,用于分析或
    决定结构翻译所客观需要的文法规则。最近,关于他的那第一部著
    作,Knuth 自己这样评述:“用三年半的时间写第一章可并不是件好
    事。

    当 Knuth 的出版商计算出他的那 3000页的笔记打印成文章大约需
    要 2000页时,大家才发现这实际上是一项多么大的工程。Knuth决
    定将它详述,成为一部更大的关于程序设计科学的纵览,共分为七
    个部分。一部巨著就这样诞生了。《计算机程序设计艺术》,至今仍
    是各程序类图书书架上标志性的书籍。微软首席执行官比尔 ·盖茨
    在 1995年接受一次采访时说,“如果你认为你是一名真正优秀的程
    序员,就去读第一卷,确定可以解决其中所有的问题。”盖茨还
    说:“如果你能读懂整套书的话,请给我发一份你的简历。”

    依 Knuth 本人所讲,《计算机程序设计艺术》是他毕生最重要的事
    业,其目的是“组织和总结所知道的计算机方法的相关知识,并打
    下坚实的数学、历史基础”。Knuth 撰写的前三卷被翻译成多种语
    言,到 1976年为止,已卖出超过一百万册。他目前正全神贯注地编
    写第四卷,他期望第四卷的篇幅约为 2000 页,并分为三个独立的章
    节。为了完成丛书的其余部分,Knuth现在进入了一种引退的状态,
    全身心地投入这项工作。Knuth 说,一般说来,他更喜欢在一段时
    间内集中精神完成一项工作,正像他自己在书中提出的:按“批处
    理”的模式。

    Knuth从他主要的工作计划中拿出了十年,即从 1976年起,致力于
    对数字排版的研究,设计了著名的 TEX 系统,字体生成程
    序 METAFONT。这项工作带来的值得注意的副产品是用于结构文
    件和“文章性程式语言”的 WEB和 CWEB 语言。

    现在,Knuth和他的妻子 Jill,两个孩子 John和 Jennifer一起,住在
    斯坦福大学校园里。他继续着《计算机程序设计艺术》第四卷的编
    写工作。虽然说 Knuth 是全身心的投入这一项工作,但他还是能挤
    出时间研究 MMIX (计算机编程艺术一书中的虚拟计算机汇编指令
    体系)的设计,那是一台 64 位 RISC(精简指令集计算机)。而他的
    业余爱好仍然是音乐,还一直邀请那些能够即兴演奏四手联弹钢琴
    曲的人们给他留下便条,以便安排一些活动。

    传说Knuth 写书写文章的第一稿都是用铅笔写的,很多人不明白他
    为什么不用键盘。其实原因是这样,Knuth曾经参加过一个训练小
    秘的学习班,练习打字每分钟 80个词以上。到了后来,他发现他打
    字的速度大大高于他思考的速度,如果他用键盘,就会出现很多停
    顿。所以他决定用铅笔,这样可以与读者的思考速度保持一致。
    很多人都对 TEX 断行的算法感到满意,其实只有 Knuth 觉得担心。
    他设计 TEX 的时候听说有一本书叫做 Aesthetic Measures,作者是
    美国 No.1的数学家 George David Birkhoff。是说怎样用数学公式来
    衡量“美”。他查阅了 7个 Harvard图书馆,其中有一个图书馆有一
    个拷贝,但是却被人借走了。无奈,跑到 MIT去借。还好,借到了。
    后来他就在 TEX 里加入了一个变量叫做 badness, 用来衡量一行文
    字的美感。badness越小这行文字就越美。但是与 Birkhoff不同,
    Knuth对这个公式没有多少信心。也许是因为谦虚。

    Knuth的书都是自己用 TEX 排版的,但是却不都是自己设计的。传
    说 Knuth和 Graham, Patashnik合作写 Concrete Mathmatics 的时候
    请了一位有名的图书版面设计家为他们设计好了书的尺寸,字体大
    小,标题样式,后来 Hermann Zapf 专门设计了一种数学字体叫
    做 Euler,自此,数学家 Euler的灵魂浮游于 CM当中……此外,这本
    书本来不会做的那么花哨的,结果后来他们专门为那本书设计了字
    体,页面样式,所有习题都给出了出处。几乎所有页面都至少有一
    个涂鸦,连《爱利丝漫游奇境记》都被列入参考文献……
    这是怎么回事呢?原因就是Knuth 在写书期间去看了一部电影:“白
    雪公主与七个小矮人”。看完之后Knuth 感叹道:难以置信,这样完
    美的艺术品竟然可以在1937年完成。我一定要把我的书做成一个艺
    术品,而且要在三个月之内完成!结果他说到做到了。

    大家都知道 1974年图灵奖授予 Knuth主要是因为他写了一部巨著
    叫做The Art of Computer Programming 但是不幸的是,很多人不能
    理解,甚至不相信他为这部书起了这么一个不“科学”的名字。后来
    很多人的著作里出现这样的文献引用:“The Act of Computer
    Programming, Donald Knuth.”

    Knuth是个喜欢自夸的人,这是毫无疑问的。在他出版 The Art of
    Computer Programming 之前就已经有这种苗头了。还没有出版的时
    候,在一次会议上,有个人知道他的这种性格,就说:“我猜你正在
    写的这本书的书名肯定是 ‘An Introduction to Don Knuth’。”Knuth
    回答说:“正好相反。我要以你的名字来命名它。”原来这个人的名字
    叫 “Art Evans”

    Knuth是 Caltech数学系博士毕业的, 但是他常常说:“我戴着一顶计
    算机科学家的帽子,而不是一顶数学家的帽子。”这说明他似乎对数
    学家有某些看法。在他看来数学家只知道 “What is it”,而他还知
    道 “How to do it”. 这就是他认为的数学与计算机科学的区别。

    Knuth回到 Stanford时,学校让他自己给自己一个头衔他就选了一
    个 Professor Emeritus of The Art of Computer Programming 他其实
    觉得“计算机科学”不是科学。虽然大家很希望计算机编程变成科
    学,但是 Knuth 觉得奇怪为什么大家这么喜欢用“科学”这个字眼,
    以致于他们瞬间把程序设计变成了科学,方法就是叫它“计算机科
    学”。在他眼里,计算机科学其实仍然是门艺术。

    在 Knuth 的眼里,科学与艺术有什么区别呢?艺术是人创造的,而
    科学不是。艺术永远是可以无止境的提高的,而科学不是。艺术需
    要天赋才能掌握,而科学不需要,按部就班就行。所以…

    Knuth的 TAOCP 开始写的也不那么好。传说有一天 Bob Floyd
    给 Knuth 一封信,开门见山就说:“Don, 请不要用那么多感叹号!”
    信的结尾至少打了五个感叹号。看了之后,Knuth 发现 TAOCP 里
    竟然平均每页有两个感叹号!!

    有人说 Knuth写完三卷 TAOCP 就去研究 TEX,其实是因为害怕写
    第四卷。很多人早就希望他放下 TEX,继续写书。Knuth 说:“一个
    人要把事情做的完美,只有当他跟上帝的意图保持和谐,现在上帝
    要我去写第四卷了。”

    Knuth很推崇随机算法。他批改作业时,一般都是翻到随机一页,仔
    细看那一页,之后就对学生的作业有了一个概貌,其它的部分就看
    的不那么仔细了。Knuth看书的时候首先看第 316页,如果书很短
    就看第 100页。仔细看那一页。之后他就可以说那本书好不好。据
    说这样做出判断的正确率很高。不知道是否有很多人跟他学,
    看 316和 100. 以后写书要注意把第 316页或者 100页写好呀!

    Knuth发明了一种程序设计方法叫做 Literate Programming (文学编
    程) ,把程序当成文学作品来写。这样可以创造永恒的作品,甚至几
    十年后还有人用它作为茶余饭后的读物。他为什么要发明这个东西。
    原因有:他想让一个程序员(也许是他自己)在某一天拿到普利策奖。
    他想让提出“Structured Programming”(结构化程序) 的那些家伙在
    写“非文学程序”的时候,就像他当年写“非结构化程序”的时候一样
    觉得自己有罪。
    他的“文学编程”思想最早是在英国Computer Journal发表的。当人
    问他为什么不在美国发表。他说,美国人没文化,他们不能理解这
    个东西

    Knuth喜欢在他的作品里用”we” 作为主语,虽然很多时候文章是他
    一个人写的。有人认为使用被动语态好。但是Knuth 认为不应该大
    量使用被动语态。“用 We可以减少被动语态带来的麻烦。‘we’是
    指你和你的读者。”那么怎么称呼作者?答案是: the authors, the
    first author, 或者直接用名字。但是他确实反对使用”I”,除非你是身
    名显赫,人人尊敬的君王式人物,否则最好不要在论文里用”I”。
    在你描述你的程序时,喜欢说”we insert the element in the heap” ,
    还是”it inserts the element in the heap” ? Knuth 总是喜欢用”we”。
    显然他已经融于算法的动作之中了。

    虽然他不喜欢论文里用”I”, 但是他喜欢让他的程序自称”I”. 看这里:
    This is TeX, Version 3.14159 (Web2C 7.3.7x)
    ! I can't find file `kkkk.tex'.
    kkkk.tex
    Please type another input file name:
    有很多人跟着他学,把这种称呼顽皮的发挥到极致:

    Welcome to Scheme 48 0.57
    Copyright (c) 1993-2001 by R Kelsey and J Rees.
    Type ,? (comma question-mark) for help.
    > (define (sq x) (* x x))
    ; no values returned
    >
    Exit Scheme 48 (y/n)?
    I'll only ask another 100 times.
    Exit Scheme 48 (y/n)?
    I'll only ask another 99 times.
    Exit Scheme 48 (y/n)?
    I'll only ask another 98 times.
    Exit Scheme 48 (y/n)?
    I'll only ask another 97 times.
    Exit Scheme 48 (y/n)?

    Knuth曾经在 American Mathematical Monthly 发表过一篇叫做”The
    Toilet Paper Problem” 的论文,据说是一个研究怎样合理使用厕纸
    的算法。现在收录于Selected Papers on Analysis of Algorithms,这
    篇论文投到Monthly时,在节标题使用了大量“粪便学”词汇。编辑
    警告Knuth 说,笑话在我们这里是危险的,请你三思!不得已啊,
    Knuth后来把小节标题里的那种词改掉了。可是他很不想改文章的
    标题。怎么办呢?他给编辑一封信说,我已经以这个标题做过两次
    演讲,这个主题已经被广泛的采用和讨论……云云。
    最后编辑回信说:“你的厕纸被接受了!”(Your toilet paper is
    accepted!)
    P.S. 附录:增加这篇论文的信息:
    Stanford计算机科学系楼里的厕纸架上可以并排放两筒厕纸。人上
    厕所时有可能从两个中的一个取纸。两个卷筒不一样大的时候,喜
    欢从大的那筒拿纸的人叫做big-chooser,喜欢从小的那筒拿纸的人
    叫做little-chooser。如果两筒大小差不多,一般人都会从离自己最近
    的那筒取纸。厕纸用完的时候一般由 janitor(门口老大爷?)提供新
    的纸。如果一边的用完了,那就换掉那一边,如果两边同时用完,那
    么有人就有麻烦了……(我怀疑Knuth 遇到了那么一次:)
    Knuth似乎在计算那种两筒同时用完的窘境出现的概率……

    高老爷子发布了 TEX的源码,同时宣布支付给每一个发现 bug的人
    2.56美元(256美分为16 进制的1美元)。此后奖金逐年翻倍,直至
    目前冻结在327.68美元。但由于程序的设计及编写极其优秀,被发
    现的bug极少,加之高德纳教授的权威声望,以至于有发现bug的
    获奖人将高德纳教授亲笔签名的奖金支票装裱进相框内留作纪念。

  37. caizr说道:

    当初读大学的时候看过他的算法书,感觉怎么会写得这么好,换成我想破脑袋也写不出。

  38. i坠落的魔说道:

    速度好不

  39. iamsujie说道:

    又看一遍,很high~~~

  40. weapon说道:

    求你了,快点儿吧……

  41. 若飞说道:

    天才……
    永恒的天才……
    也许是真是上帝的偏爱。

  42. i坠落的魔说道:

    大哥 美女们 你们能兑现诺言不?

  43. 雪线说道:

    那个……那个……苏椰大神……什么时候出下文啊?这边没有下文直接出书的时候吱一声也可以啊……

  44. 立夏说道:

    等下文等得好辛苦~~
    两个多月啦~~~

  45. 西风凋碧树说道:

    写的真给力啊 老湿

  46. 古神斋说道:

    下文啊~等了好久啦~

  47. smillpp说道:

    然后我就发现我后面的书架上就躺着一本 The Art of Computer Programming 哇。。。。。。

  48. avalon说道:

    实际生活中,IT工程师们,通常是在WC里放上一本TAOCP...
    感觉计算机领域做这种通用算法的人不多,真正牛逼的数学家来做就更少了...计算机不是科学,我觉得说得很对。

  49. cmonkey说道:

    相当不错的文章,希望能看到更多续集,了解前辈高人的史迹

  50. ZHX说道:

    认真读完之后,找到了两套好书!!!

  51. shishak说道:

    期待作者什么时候能继续写下去呀,等了半年了

  52. bitwjg说道:

    作者什么时候接着写啊

  53. DJ说道:

    这个系列是怎样...这么久都没气,想看啊~会出书吗?

  54. i坠落的魔说道:

    鄙视言而无信的

  55. yang_bigarm说道:

    Knuth一生带了28个研究生,是因为28是一个完全数(Perfect number),文中说是一个很好的数这个不够确切。完全数是指一个数的所有因子之和恰好等于它自己,这样的数在数学上是很少见的。

    Knuth的《Concrete Mathematics》,他似乎在前言还是什么地方说过的数名的来历,Concrete 是continue(连续的)和discrete(离散的)两个词各取一半拼起来的得到的,有一种数学方法能将连续和离散数学串联起来,叫做母函数(generating function,也有书上叫发生函数等等名字), Concrete 因此得名。《Concrete Mathematics》整本书都是以母函数为中心思想写的,1-6章介绍接触知识,7章提出母函数,8-9章利用母函数解决算法分析中的问题。

    由于母函数最早是瑞士数学家Euler发明的,所以书的第一页上写的是献给Euler,书中设计的字体也叫做Euler.

  56. 等填坑说道:

    神马时候能填完坑。。等死人啊。。现在去博客都域名在售了。twitter也找不到人。这是干熟么啊。。。这是干熟么啊。。还要不要人看啦。。

  57. 望尽天涯路说道:

    前面的部分什么时候能出来呀。

  58. 莫道君行早说道:

    后续 等待中

  59. wag说道:

    是第316页,来自于
    316 Bible Texts Illuminated

  60. calibre说道:

    作者说过年其实是今年过年吧

  61. z说道:

    都2012.4 了,之前的文章呢……~~

Leave a Reply