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

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

Knuth.jpg

原文链接

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个人在另外一个事件中丧生,那么人们通过对比就会觉得后面这个事件更为严重。

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

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

From:  http://www.ituring.com.cn/article/details/638
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1卷首先介绍编程的基本概念和技术,然后详细讲解信息结构方面的内容,包括信息在计算机内部的表示方法、数据元素之间的结构关系,以及有效的信息处理方法。此外,书中还描述了编程在模拟、数值方法、符号计算、软件与系统设计等方面的初级应用。此第3版增加了数十项简单但重要的算法和技术,并根据当前研究发展趋势在数学预备知识方面做了大量修改。 第2卷对半数值算法领域做了全面介绍,分“随机数”和“算术”两章。本卷总结了主要算法范例及这些算法的基本理论,广泛剖析了计算机程序设计与数值分析间的相互联系,其中特别值得注意的是作者对随机数生成程序的重新处理和对形式幂级数计算的讨论。 本书附有大量习题和答案,标明了难易程度及数学概念的使用。 本书内容精辟,语言流畅,引人入胜,可供从事计算机科学、计算数学、计算技术诸方面的工作人员参考、研究和借鉴,也是相关专业高等院校的理想教材和教学参考书。 《计算机程序设计艺术排序和查找(第3卷)(第2版)》内容简介:这是对第3卷的头一次修订,不仅是对经典计算机排序和查找技术的最全面介绍,而且还对第1卷中的数据结构处理技术作了进一步的扩充,通盘考虑了将大小型数据库和内外存储器。它遴选了一些经过反复检验的计算机方法,并对其效率做了定量分析。第3卷的突出特点是对“最优排序”一节作了修订,对排列论原理与通用散列法作了全新讨论。 ——《豆瓣读书》
资源来自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
### 回答1: 《计算机程序设计艺术》是一本经典的计算机科学教材,由美国计算机科学家Donald E. Knuth高德)所著。这本书分为三卷,涵盖了算法和数据结构的基本概念以及编程技巧。 作为计算机科学领域的权威之作,《计算机程序设计艺术》通过具体的例子和详细的解释,让读者深入了解了程序设计艺术背后的原理和技巧。它揭示了代码的优雅和高效,帮助开发者写出可维护和高性能的程序。 这本书的每一章都涉及一个特定的主题,包括基本的数据结构、排序算法、字符串处理、图算法等。高德在书中提出了各种具有创新性的解决方案,展示了他对算法优化的独特见解。这些解决方案不仅仅是一种教学工具,更是一个启发性的思考,使读者能够在实际编程中灵活应用。 与其他计算机科学教材相比,《计算机程序设计艺术》更强调理论与实践的结合。读者通过书中的示例和习题,能够学习如何将理论知识应用到实际的编程项目中,培养了解决实际问题的能力。 《计算机程序设计艺术》第一卷至今已经发行了多个版本,而第二卷和第三卷目前也在陆续出版中。这本书对于计算机科学从业者和学生来说是一本不可或缺的经典之作,帮助他们在程序设计的道路上不断成长和进步。同时,它也是计算机程序设计领域的里程碑,被广泛认可为计算机科学的圣经之一。 ### 回答2: 《计算机程序设计艺术》是由计算机科学家Donald E.Knuth在20世纪60年代至70年代编写的一系列专著,总共分为七卷。这套书以其深入浅出、严谨全面的风格,被广泛认为是计算机程序设计的经典之作。 这套书以多样的程序设计问题为切入点,涵盖了计算机科学领域的众多知识点,包括算法、数据结构、编程语言等等。不仅如此,Knuth还以独到的思维深入探讨了程序设计的本质和艺术,并从理论和实践两个方面给出了许多宝贵的指导和建议。 《计算机程序设计艺术》以其独特的风格和深度引领和影响了几代计算机科学家。这本书不仅是一本指导学习计算机程序设计的工具书,更是一本关于创造性解决问题的权威之作。它的内容既包括了数学和计算机科学独立的部分,也包括了二者交叉的部分,这使得它成为了一个全面学习程序设计算法的杰出教材。 这套书的PDF版本可以通过网络免费获取,授权方式为GNU自由文档许可证。这使得它成为了广大计算机科学爱好者、学生和专业人士的宝贵资源。通过阅读这本书,读者可以从Knuth那里获得宝贵的经验和智慧,学习到如何设计高效的算法和优雅的程序。 总之,《计算机程序设计艺术》PDF是一本非常重要和有影响力的计算机科学书籍,对于想要深入学习计算机程序设计的人来说是一本不可多得的好书。无论是初学者还是专业从业者,都可以从中获得启发和指导,提高自己的技能和思维水平。 ### 回答3: 《计算机程序设计艺术》是一本由计算机科学家 Donald E. Knuth 编写的经典著作,它共有七卷之多,被广泛认为是计算机科学领域的圣经。 该系列书籍主要探讨了计算机程序设计的各个方面,从基础的数据结构和算法到高级的代码优化和程序设计方法。它不仅涵盖了编程语言知识,还探讨了程序设计的哲学和艺术层面。 《计算机程序设计艺术》的内容丰富且深入,以清晰而严谨的方式介绍了各种算法和数据结构的实现细节。每一卷都以数学符号和伪代码为基础,展示了如何设计和实现高效的程序。此外,该书还包含了丰富的示例和练习,帮助读者巩固所学知识。 这本书的特点之一是关注程序的性能和效率。作者不仅提供了算法的设计和实现方法,而且详细解释了每个算法的时间复杂度和空间复杂度。这使读者能够更好地理解算法和数据结构的选择,并为他们的程序提供最佳性能。 除了算法和数据结构,该书还探讨了程序的可读性和可维护性。作者提供了许多有关代码编写和组织的建议,帮助读者编写清晰、易于理解和易于维护的代码。 《计算机程序设计艺术》是一本经典之作,它对计算机科学的发展产生了深远的影响。它不仅是一本技术指南,还是一本启发人思考的艺术品。无论是初学者还是有经验的程序员,都可以从中获得宝贵的知识和启示。这本书的PDF版本使得更多人能够方便地获取和阅读这个重要的计算机科学经典。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值