The Art of Computer Programming
《计算机程序设计艺术》即《The Art of Computer Programming》是计算机领域里颠峰级的里程碑,加上国外人士对它的推崇,所以提起它的大名简直就象法律书籍中的宪法一样神圣。
Donald.E.Knuth(唐 纳德.E.克努特,中文名高德纳)是算法和程序设计技术的先驱者,是计算机排版系统TEX和METAFONT的发明者,他因这些成就和大量创造性的影响深 远的著作(19部书和160篇论文)而誉满全球。作为斯坦福大学计算机程序设计艺术的荣誉退休教授,他当前正全神贯注于完成其关于计算机科学的史诗性的七 卷集。这一伟大工程在1962年他还是加利福尼亚理工学院的研究生时就开始了。
Knuth教授获得了许多奖项和荣誉,包括美国计算机协会图灵奖(ACM Turing Award),美国前总统卡特授予的科学金奖(Medal
of Science),美国数学学会斯蒂尔奖(AMS Steele
Prize),以及1996年11月由于发明先进技术荣获的极受尊重的京都奖(KyotoPrize)。现与其妻Jill生活于斯坦福校园内。
如果你认为你是一名真正优秀的程序员……读Knuth的《计算机程序设计艺术》,如果你能读懂整套书的话,请给我发一份你的简历。--Bill Gates
引那位出名的王垠对TAOCP的评论:
本来早就想想写一个对于Knuth的The Art of Computer Programming的看法。
关
于Knuth的
TAOCP,我想,大部分人声称看了他的书,或者买了他的书,不过是作为一种炫耀的资本或者摆设。我对门的同学几年前就买了一套三本,全新的精装本,花了
200多块钱。可是呢,他从来就没看。我把它借过来,看了几页就放在那里没有看了。我哪有时间看他用那些一个字节6位的机器语言实现简单的链表!有一天一
个师弟走进来,看到那套书在我书架上,显示出一种敬畏感:“挖!师兄!你好牛啊!居然看这么高深的书!”
我一愣。嗯,不错嘛,这套书放在书架上可以让人对我刮目相看。这恐怕就是它对很多人的实际作用。还有人可以帮助神化这套书,同时也神化自己,比如他可以这
么说:“谁要是看完了Don Knuth的 The Art of Computer Programming 我就雇用他!”
这样可以显得比一般看过书的人还要高一等。据说Bill Gates就是这么做的。我怀疑他自己看完过没有。
我讨厌这套书的一个原因就是
Knuth故意用一个叫 MIX 的处理器的机器语言来写这本书。虽然在新版的书里他设计了一种新的处理器
MMIX,但是换汤不换药。他以为一部“永恒”的计算机编程书不应该使用高级语言,因为它们很容易过时。但是他错了,机器语言恰恰是最容易过时的东西,看
看现在有多少牌子的更新换代的处理器就知道。而世界上确实存在非常高级的语言从60年代到现在都没有过时。我预言,MMIX会在不久的将来被淘汰。很好笑
的是MMIX是在MIX上加了一个“M”,代表Millennium(千禧年)。关于它的专著也起名为 MMIXware---A RISC
Computer for the Third
Millennium。一千年甚至短短一百年,几十年以后,计算机还是不是二进制的集成电路都说不清楚,况且这个处理器其实就是从别的处理器比如RISC
II,
Sparc之类的捡了一点东西,没有什么大的创新。他就把这个处理器的模拟程序印在纸上卖,曰:“一个优秀的程序要像一部好的小说一样容易读懂。一个优秀
的程序员会在将来拿到普利策奖。”
用机器语言写一点初级的计算机入门部分还可以,但是用来写整整一部书未免容易让读者只见树木不见森林了。看
TAOCP最容易出现的一种现象就是,“哇!原来这个程序可以这么写。”
但是你不知道为啥那么写。虽然可以知道一些底层的原因,但是最根本的原理,读者始终不会明白。就像看清楚了一张图片上的每一个像素,却认不出图片上其实是
一个熟人。看清楚了棋盘上每一个棋子能走的地方,却不能赢棋。Dijkstra 说计算科学不应该被叫做"computer
science",就像外科手术不应该叫做"knife science"。可是这关Knuth什么事呢,他的书名叫做 The Art of...
我
曾经说找到Knuth书里的错误,得到几张支票,受到很大鼓舞。我真的受到鼓舞了吗?我真的从他的书里得到什么新的想法吗?抛开潜意识里想显示一下自己的
念头,我得出的结论是:没有。每一个认为自己从这套书得到了什么的人都仔细想一下,到底你的知识,你的新想法是从哪里来的?
再说他的支票吧……
很多人拿了Knuth的支票就作为一种可以炫耀的东西。以前我就看到一个Cambridge的教授主页上挂着一个Knuth支票的照片。Knuth的支票
真的可以作为炫耀的资本吗?告诉你们,我找到的错误都是typo而已,没想到他也给我支票。谁叫他打字不小心,Millennium都能打成
Millenium?嘿!我凑足了一顿饭钱的支票时就想去中国银行兑现,准备换了钱大吃一顿。可是银行的职员告诉我,他们必须把支票寄回美国才能拿到现
金,办理这件事的费用大大高于支票本身的价值!所以Knuth相当于给我一些空头支票。Damn!早该想到的,他为什么不往大家的信用卡上面转账,而使用
支票这种过时的东西!他明显觉得有他签名的支票,肯定谁也不会拿去兑现,甚至装裱在相框里作为纪念。hmmm... 算你狠~
好了,啰里啰唆。还是看看这个别人写的书评。White elephant,这确实道出了我对这套书的感觉。 (但是评价者有些观点我不能苟同,比如“O(n)表示法足够了”。) 希望以后对 paper 也有这种公开的 comments!
http://www-cs-faculty.stanford.edu/~knuth/taocp.html;
The Art of Computer Programming
by Donald E. Knuth.
At the end of 1999, these books were named among the best twelve physical-science monographs of the century by American Scientist, along with: Dirac on quantum mechanics, Einstein on relativity, Mandelbrot on fractals, Pauling on the chemical bond, Russell and Whitehead on foundations of mathematics, von Neumann and Morgenstern on game theory, Wiener on cybernetics, Woodward and Hoffmann on orbital symmetry, Feynman on quantum electrodynamics, Smith on the search for structure, and Einstein's collected papers. Wow!
Fundamental Algorithms, Third Edition (Reading, Massachusetts: Addison-Wesley, 1997), xx+650pp. ISBN 0-201-89683-4
Volume 1 Fascicle 1, MMIX: A RISC Computer for the New Millennium (2005), v+134pp. ISBN 0-201-85392-2
Chapter 1, by Ken Hirose, Kihon Samp? / Kiso Gainen (Tokyo: Saiensu-Sha, 1978), 22+331pp.;
Chapter 2, by Nobuo Yoneda and Katsuhiko Kakehi, Kihon Sampo? / J?h? K?z? (Tokyo: Saiensu-Sha, 1978), 8+373pp.
Translations of previous editions:
Chinese translation by Guan JiWen and Su YunLin, Ji Suan Ji Cheng Xu She Ji Ji Qiao, 1. Juan: Ji Ben Suan Fa (Beijing: Defense Industry Publishing Co., 1980), 14+573pp.
Translations of the third edition:
Chinese translation by Su YunLin, Ji Suan Ji Cheng Xu She Ji Yi Shu, 1. Juan: Ji Ben Suan Fa (Beijing: National Defense Industry Press, 2002), xx+625pp.
Volume 2
Seminumerical Algorithms, Third Edition (Reading, Massachusetts: Addison-Wesley, 1997), xiv+762pp.
ISBN 0-201-89684-2
Chapter 3, by Masaaki Sibuya, Kihon Samp? / Rans? (Tokyo: Saiensu-Sha, 1982), ii+259pp.;
Chapter 4, by Keisuke Nakagawa, Kihon Samp? / Sanjutsu Enzan (Tokyo: Saiensu-Sha, 1986), xii+536pp.
Translations of previous editions:
Chinese translation by Guan JiWen and Su YunLin, Ji Suan Ji Cheng Xu She Ji Ji Qiao, 2. Juan: Ban Shu Zhi Suan Fa (Beijing: Defense Industry Publishing Co., 1992), 10+622pp.
Translations of the third edition:
Chinese translation by Su YunLin, Ji Suan Ji Cheng Xu She Ji Yi Shu, 2. Juan: Ban Shu Zhi Suan Fa (Beijing: National Defense Industry Press, 2002), xii+760pp.
Volume 3
Sorting and Searching, Second Edition (Reading, Massachusetts: Addison-Wesley, 1998), xiv+780pp.+foldout.
ISBN 0-201-89685-0
Translations of the first edition:
Chinese translation by Guan JiWen and Su YunLin, Ji Suan Ji Cheng Xu She Ji Ji Qiao, 3. Juan: Pai Xu He Cha Zhao (Beijing: Defense Industry Publishing Co., 1985), viii+645pp.
Translations of the second edition:
Chinese translation by Su YunLin, Ji Suan Ji Cheng Xu She Ji Yi Shu, 3. Juan: Pai Xu Yu Cha Zhao (Beijing: National Defense Industry Press, 2002), x+779pp.
Volume 4A
Combinatorial Algorithms, Part 1 (Upper Saddle River, New Jersey: Addison-Wesley, 2011), xvi+883pp.
ISBN 0-201-03804-8
(Preliminary drafts were previously published as paperback fascicles; see below.)
The Remainder of Volume 4
Present plans are for Volume 4A to be the first in a series of several subvolumes 4A, 4B, 4C, ... entitled Combinatorial Algorithms, Part 1, 2, 3, .... The remaining subvolumes, currently in preparation, will have the following general outline:
7.2.2. Basic backtrack
7.2.3. Efficient backtracking
7.3. Shortest paths
7.4. Graph algorithms
7.4.1. Components and traversal
7.4.2. Special classes of graphs
7.4.3. Expander graphs
7.4.4. Random graphs
7.5. Network algorithms
7.5.1. Distinct representatives
7.5.2. The assignment problem
7.5.3. Network flows
7.5.4. Optimum subtrees
7.5.5. Optimum matching
7.5.6. Optimum orderings
7.6. Independence theory
7.6.1. Independence structures
7.6.2. Efficient matroid algorithms
7.7. Discrete dynamic programming
7.8. Branch-and-bound techniques
7.9. Herculean tasks (aka NP-hard problems)
7.10. Near-optimization
8. Recursion
Paperback Fascicles
New material for Volume 4 will first appear in beta-test form as fascicles of approximately 128 pages each, issued approximately twice per year. These fascicles will represent my best attempt to write a comprehensive account; but computer science has grown to the point where I cannot hope to be an authority on all the material covered in these books. Therefore I'll need feedback from readers in order to prepare the official volumes later.
For example, the following fascicles appeared before the hardcover edition of Volume 4A was complete.
Volume 4 Fascicle 0, Introduction to Combinatorial Algorithms and Boolean Functions (2008), xii+216pp. ISBN 0-321-53496-4
Volume 4 Fascicle 1, Bitwise Tricks & Techniques; Binary Decision Diagrams (2009), xiii+261pp. ISBN 0-321-58050-8
Volume 4 Fascicle 2, Generating All Tuples and Permutations (2005), v+128pp. ISBN 0-201-85393-0
Volume 4 Fascicle 3, Generating All Combinations and Partitions (2005), vi+150pp. ISBN 0-201-85394-9
Volume 4 Fascicle 4, Generating All Trees; History of Combinatorial Generation (2006), vi+120pp. ISBN 0-321-33570-8
Volume 5
Syntactic Algorithms, in preparation. Estimated to be ready in 2020
9. Lexical scanning (includes also string search and data compression)
10. Parsing techniques