高德纳(Knuth)谈计算机程序设计艺术(上)

高德纳(D. E. Knuth)教授是备受尊崇的系列巨著《计算机程序设计艺术》(The Art of Computer Programming)和数十篇受到高度赞誉的计算机科学论文的作者。2011年6月,结束了在英国的书籍研讨和系列演讲的高德纳教授,跟BCS编辑Justin Richards畅谈了自己的人生和工作。

原文链接

Elliot 何逸勤 译

您最广为人知的成就应该是《计算机程序设计艺术》系列著作了。1999年,这个系列被美国科学家(American Scientist)期刊评选为20世纪最重要的12部理学专著之一。这个系列最初是如何创作出来的?您是如何看待美国科学家期刊的这一评价呢?

这系列书籍大约从1960年代开始创作。那时候,因为没有合适的资源,所以大家都在重新发明一些已有的东西。我一直都很喜欢写作,在学校参与报纸和杂志的工作,认为自己是一个作家。我意识到,需要有人记录下所有已经发表而我们正在遗忘的优秀思想。

这又要回溯到最初的年代,当时真正研究计算技术的人很可能还不到一千个。我没有把这看作将要影响世界的事情,但仍然觉得这些很酷的资料是值得认真整理的。

那时候,我就考虑还有什么人合适写作这样的书籍。我能想到的每个人,他们都很可能只会关注自己所研究的那个领域。在我所知道的人当中,只有我自己是没有发明创造过什么东西的,因此我设想自己能够以中立的立场来担任他们的代言人。坦白说,那就是初始动机,我认为存在那样的需求。

我写作这样的书,还有一个很自然的理由。那就是,我要尝试将很多人的不同想法结合起来。我会看到,A君以某种方式来分析他的方法A,而B君会以另一种方式来分析与之竞争的方法B。因此,我就要用B君的方式来分析方法A,用A君的方式来分析方法B。

因此,我最终就是以单纯分析以上内容的形式来创作书的雏形。很快,我认识到,有些被我捆绑使用的科学方法,在我所受的教育中其实是不允许同时出现的。然而,一次又一次地,我真的看到只有这样的思维方式才可以正确地阐述问题。

长话短说,很快我也有了自己的不同意见,并且开始发现新东西,这样就难以继续中立地写作了。不过,我仍然尝试在最大限度内以公允、合理的态度去总结每个人的有价值思想。

至于这本书入选世纪最佳书籍,我还觉得不太好意思。他们把我推到爱因斯坦和费曼的伟大队列中,而我实际上并不属于那样的级别。这可能仅仅是因为他们必须从计算机科学领域选出一个人,而我又没有太多的竞争者罢了。虽然我也觉得自己在研究领域的努力工作是值得提及的,但这样把我挑选出来代表计算机科学,总有点关公战秦琼的意味了。

是什么促使您投身计算机科学这个领域的呢?

我天生就是一个计算机科学家——我的头脑里有一种组织东西的思维方式,注定让我成为一个好的程序设计员。我觉得任何人都可以学习使用计算机,但是五十个人里面大概只有一个人会成为像我这样的极客。这意味着我们这些人将在这个领域中的不断创新,并与计算机产生共鸣。我们的思维方式会帮助我们更容易地学习如何制造机器。

您为什么会认为计算机科学是如此重要呢?

计算机科学之所以重要,是因为它改变了沟通的方式。它还影响了金融业,这是我不太情愿提及的。可惜的是,世人是以我和我的同行们对华尔街产生的影响来衡量我们的工作的。在这个意义上,我是很嫉妒天文学家的,因为世人认为天文学家由自己的兴趣去研究天文学是值得尊重的。其实,我研究计算机科学也是同样出于兴趣啊。

我对IT这个说法并没有太大的共鸣,真正打动我的是科学。对我而言,IT是不错的东西,但并非我所擅长的领域。我的太太就能比我更快地掌握某个图标的含义、找到要点击什么地方。但要让机器完成复杂、细致的工作,在科学上是有许多难题需要攻克的。我曾经觉得很多问题是无法找到答案的,但事实上我们已经一步步地知道要如何解决它们。对我来说,即便没有任何金钱上的回报,我也会做这些工作。

所以说您对此充满激情吗?

那是,就像每天早上醒来我都会想着今天要好好写个程序。

您是受到缪斯女神的眷顾了吧?

是啊,有些日子她给予我的灵感要比平常的多。甚至有某个阶段,我几乎认为有个缪斯女神一直在给我口授内容呢。

在您看来,您在计算机科学领域最大的成就是什么?

我想我的第一个成果是研究编译器的理论。我曾经研究过代数语言的理论,而在我写这本书(第10章)的时候,我正试图描述人们在这个领域的种种发现和成果,然后我突然意识到,可以有一种方法把这些发现和成果都关联起来。由于这个发现过于新奇,我不知道该怎样在书里面阐释它,于是就把它发表成一篇学术论文。后来,其他的人读懂了我的意思并开始应用,最终让这个发现成为了今天所有代数编译器的分析原理。

不过我觉得我最大的成就是发明了比较算法优劣的数学方法。为了了解一个程序到底好不好,我创造了一种量化的比较方法,例如你可以说一个程序优于另外一个程序2.3倍。这个数学方法叫做算法分析,是我最引以为豪的学术成就,也是成功应用计算机的关键。

当我发明这套数学方法的时候,我跟我的出版商说,不如把这本书改名作“算法分析”吧。但是他们说不行,这样的话这书就永远卖不出去了!但实际上那就是此书的核心内容,它除了综合总结计算机学者发明的算法,还帮助我们从量化的角度去评价每个算法的优劣。

在您的网站上有关于“你为何不用Email”的回覆。“对于那些生活在事务的顶端的人们而言,Email是个美妙的东西。但那不是给我用的,我的角色是在事件的底层。”您是否可以再解释一下自己对Email的立场,以及“在事件的底层”的含义?

某些人是不能整天聒噪不休的,他们要考虑的事情,需要长时间的专注、对材料进行组织并营造坚实的基础,而不是仅仅对前沿问题的惊鸿一瞥。将某些内容以精确的形式表达出来,是需要很长时间的。要正确地做好事情,我就必须专注地耗费大量的时间。当我被大家当作权威的时候,世上数不清的人们要来问这问那。因此,用了15年Email之后,我觉得真的足够了。

之前的一位图灵演讲者Grady Booch非常主张编程的简洁性,而您在赢取西班牙“知识边界奖”的导言中也有相同的论调。您可否解释一下您为何希望程序保持简单、紧凑、易懂?

我想我们要先温习爱因斯坦的名言“要让它尽可能的简洁,而又不至于过分简洁”。事实上并非样样事情都存在捷径,都是简单易懂的。然而我发现,如果我们有再三思考的机会,几乎没有一件事情是不能被简化的。正因为如此,人们时不时会说:“好吧,基于我们现有的知识,让我们把旧的东西推到重来吧!”

几年前在斯坦福有一个名为“清白历史”的项目,口号是“让我们找个更好的方法来实现因特网”。当东西被不断添加进来并且累积一段时间后,你就会发现已经存在太多的垃圾,而这些垃圾现在看来没有任何理由存在了。

那就像人的阑尾,也许曾经某个时候它是有存在的意义的,但是现在已经不再需要了。我觉得这个项目有潜力,尽管实现的可能性微乎其微,因为整个世界已经离不开现存的因特网了。要一个人跳出来说“让我们重新设计整个因特网,从把程序导入计算机开始”,那是非常困难的。这有点像当时Linux的出现,其目的就是尝试去简化操作系统。

您跟Grady Booch还拥有另外一个共同点,就是你们都讲过你们可以欣赏到代码和编程中所体现的美,您这样讲的真正含义什么呢?

我是从几层不同的含义来看待“艺术”这个词的。通常,艺术意味着人类创造的某种东西,并非自然的。还有一层含义,那就是赋予美学价值的精致艺术品。

很多情况下,所谓美感不过是“情人眼里出西施”。但是,人们会因某个事物本身的优雅和谐调而去创造它,那与评论和欣赏其他人的作品是类似的,我们会觉得自己感受到美。当这个作品达到某种标准的时候,我们会因之而满足。

对于所谓的“某种标准”,可能Grady跟我的意见是不一样的,那就如没有任何两个人能对哪种音乐是最好的问题达成完全一致的意见。但是,音乐家无疑是清楚自己喜欢和不喜欢什么音乐的,也很清楚自己什么时候创造出好音乐。这就很类似我看待程序的方式了。

我想最终都是个人喜好的问题?

的确如此。没有一个算法你会在输入以后问自己:这到底够不够漂亮呢?尽管的确有人尝试去这样做——美国最伟大的数学家之一George [David] Birkhoff曾经在三十年代写过一本书,名为“美学衡量”。这本书充斥了形形色色的数学公式,还有一页满满的印着各式各样的希腊骨灰瓮,并在每一个旁边都给了一个美的评分。

他还给很多不同的设计系统评分。其中比较有趣的是,在他的一百强名单里面,排行第二还是第三的是万十字章——他本身是同情纳粹的。我想这个图标的旋转方向要是反过来,对印度教来说可能有更大的宗教意义。我不认为可以衡量这些东西的美丑,但是他的确这样做了,而且也有其他人作了同样的尝试。

那么说,还没有人编出能评判程序的美丑程度的程序啰?

实际上还没有。有些软件工程师因评测的需要而尝试做这样的事情,我也不是很清楚。大家都知道,像你这样的记者或作家都有很多题材,你们需要量化数字来充实文字内容。例如,有人在开罗的冲突中丧生,你们就需要弄清楚是300人还是315人,这是新闻报道的必备部分。量化资料可以提升质量。我也在尝试寻找数字化的方法。不过,实际上软件工程师试图衡量的是某个程序员的优秀程度。其实他们去问老板就行了!

我觉得数字的使用是让人们在心里面能做个比较,例如20个人在这个事件中丧生,50个人在另外一个事件中丧生,那么人们通过对比就会觉得后面这个事件更为严重。

但这很可能其实是在用苹果和橙子比较。因为一旦涉及到数字,人们就可能篡改某些数据来扭曲事实。你也可以想象教育学生,总想着学生怎么样才能通过考试,然后你就可能会编写一本关于应试的书,而不是一本关于学习科学的书。

这样一来一切都是为了在学科考试中获取高分。然而问题是这些数字评分并不是总能很好的反映事物的本质。当你把一些事情量化了,假如你想的话你总是可以找到作弊的方法,因而也最终忘记了学习的初衷。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源来自http://b-ok.org/,本人对相关版权等问题不了解,可联系删除 The Art of Computer Programming, Volume 2: Seminumerical Algorithms (3rd Edition) Donald E. Knuth Volume 2 of Donald Knuth's classic series The Art of Computer Programming covers seminumerical algorithms, with topics ranging from random number generators to floating point operations and other optimized arithmetic algorithms. Truly comprehensive and meticulously written, this book (and series) is that rarest of all creatures--a work of authoritative scholarship in classical computer science, but one that can be read and used profitably by virtually all working programmers. The book begins with fundamental questions regarding random numbers and how to use algorithms to generate them. Subsequent chapters demonstrate efficient computation of single-precision and double-precision arithmetic calculations and modular arithmetic. The text then presents prime factorization (which can be used in cryptography, for instance) and algorithms for calculating fractions. This volume ends with algorithms for polynomial arithmetic and manipulation of power-series topics, which will benefit those with some knowledge of calculus. Throughout this beautifully presented edition, Knuth incorporates hundreds of useful exercises for trying out the algorithms. These range from simple problems to larger research project topics. (The book provides answers, where appropriate, at the end of the book.) The result is a text that's suitable for college or graduate-level computer science courses or individual study by programmers. Volume 2 is an indispensable part of any working programmer's library.
资源来自http://b-ok.org/,本人对相关版权等问题不了解,可联系删除 The Art of Computer Programming, Volume 1: Fundamental Algorithms (3rd Edition) Donald E. Knuth This magnificent tour de force presents a comprehensive overview of a wide variety of algorithms and the analysis of them. Now in its third edition, The Art of Computer Programming, Volume I: Fundamental Algorithms contains substantial revisions by the author and includes numerous new exercises. Although this book was conceived several decades ago, it is still a timeless classic. One of the book's greatest strengths is the wonderful collection of problems that accompany each chapter. The author has chosen problems carefully and indexed them according to difficulty. Solving a substantial number of these problems will help you gain a solid understanding of the issues surrounding the given topic. Furthermore, the exercises feature a variety of classic problems. Fundamental Algorithms begins with mathematical preliminaries. The first section offers a good grounding in a variety of useful mathematical tools: proof techniques, combinatorics, and elementary number theory. Knuth then details the MIX processor, a virtual machine architecture that serves as the programming target for subsequent discussions. This wonderful section comprehensively covers the principles of simple machine architecture, beginning with a register-level discussion of the instruction set. A later discussion of a simulator for this machine includes an excellent description of the principles underlying the implementation of subroutines and co-routines. Implementing such a simulator is an excellent introduction to computer design. In the second section, Knuth covers data structures--stacks, queues, lists, arrays, and trees--and presents implementations (in MIX assembly) along with techniques for manipulating these structures. Knuth follows many of the algorithms with careful time and space analysis. In the section on tree structures, the discussion includes a series
资源来自http://b-ok.org/,本人对相关版权等问题不了解,可联系删除 The Art of Computer Programming, Volume 4A: Combinatorial Algorithms, Part 1 Donald E. Knuth The Art of Computer Programming, Volume 4A: Combinatorial Algorithms, Part 1 Knuth’s multivolume analysis of algorithms is widely recognized as the definitive description of classical computer science. The first three volumes of this work have long comprised a unique and invaluable resource in programming theory and practice. Scientists have marveled at the beauty and elegance of Knuth’s analysis, while practicing programmers have successfully applied his “cookbook” solutions to their day-to-day problems. The level of these first three volumes has remained so high,… —Data Processing Digest Knuth, Volume n has been published, where n = 4A. In this long-awaited new volume, the old master turns his attention to some of his favorite topics in broadword computation and combinatorial generation (exhaustively listing fundamental combinatorial objects, such as permutations, partitions, and trees), as well as his more recent interests, such as binary decision diagrams. The hallmark qualities that distinguish his previous volumes are manifest here anew: detailed coverage of the basics, illustrated with well-chosen examples; occasional forays into more esoteric topics and problems at the frontiers of research; impeccable writing peppered with occasional bits of humor; extensive collections of exercises, all with solutions or helpful hints; a careful attention to history; implementations of many of the algorithms in his classic step-by-step form. There is an amazing amount of information on each page. Knuth has obviously thought long and hard about which topics and results are most central and important, and then, what are the most intuitive and succinct ways of presenting that material. Since the areas that he covers in this volume have exploded since he first envisioned writing about them, it is wonderful how he has ma

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值