高德纳《计算机程序设计艺术》:历时五十载,终成不朽之作

图灵奖得主高德纳《计算机程序设计艺术》卷4B中文版即将出版!历时五十载,程序设计领域的不朽之作。

原文标题:与高德纳同行:读懂这套书,就读懂了程序的灵魂!

原文作者:图灵编辑部

冷月清谈:

《计算机程序设计艺术》是由图灵奖得主高德纳所著的经典计算机科学论著,被誉为20世纪最重要的学术专著之一。该系列丛书始于1962年,至今已出版至卷4B,中文版也即将面世。作者高德纳是算法和程序设计领域的先驱,对计算机科学发展史有着深入的研究。丛书计划出版7卷,内容涵盖基本算法、半数值算法、排序与查找、组合算法、语法算法、语言理论和编译器等。卷4分为多个部分,已出版的卷4A涉及布尔函数、按位操作技巧、元组和排列等,卷4B则深入探讨回溯编程。高德纳为专心写作,甚至提前从斯坦福大学退休,他预计第5卷将于2025年准备就绪。这套书是广大学生、研究人员和业内人士学习程序设计理论和实践的宝贵资源。

怜星夜思:

1、高德纳的《计算机程序设计艺术》系列被称为“程序设计的圣经”,你认为对于现在的程序员来说,学习这些经典算法还有实际意义吗?或者说,在各种高级语言和框架层出不穷的今天,我们应该如何看待算法学习的重要性?
2、高德纳为了完成《计算机程序设计艺术》系列甚至提前退休,这种近乎“隐居”式的学术研究,在当今快节奏的社会中是否还适用? 这种模式对于技术创新是促进还是阻碍?
3、《计算机程序设计艺术》系列涵盖了大量的数学知识。对于想要学习算法的程序员来说,需要具备怎样的数学基础? 应该如何有效地学习和运用这些数学知识?

原文内容

2022 年 10 月,84 岁的图灵奖得主高德纳在个人主页宣布:《计算机程序设计艺术:卷 4B》终于出版了!


如今中文版也将付梓出版!

英文版封面/中文版封面

《计算机程序设计艺术》系列著作是公认的经典计算机科学权威论述,曾在 1999 年被《美国科学家》期刊评选为 20 世纪相当重要的 12 部学术专著之一。多年来,这套书一直是广大学生、研究人员和业内人士学习程序设计理论和实践的无价之宝。 



笔耕不辍五十年


高德纳是算法和程序设计领域的先驱者,对计算机科学发展史也有着深入的研究。


计算机科学既壮观又幽美,我尝试尽自己所能,以十分恰当的方式来解释我所了解的某些片段。很显然,我自己并没有任何超自然能力,但的确很喜欢讲述那些似乎静静地等待着人们去讲出来的故事。写书跟讲故事十分类似。”在之前的一次图灵访谈中,高德纳曾谈到自己对写作的热爱。


这是一项浩大的工程。


《计算机程序设计艺术》系列著作的写作始于 1962 年,当时高德纳还处于研究生学习阶段。1968 年,他出版了该书的第 1 卷,目前这一卷已经印了 27 版。而第 2 和 3 卷分别出版于 1969 和 1973 年,那时他已经是斯坦福大学的计算机科学教授。


1974 年,年仅 36 岁的高德纳成为了图灵奖史上最年轻的获奖者。


为了专心写作,1993 年,高德纳从斯坦福大学退休,将全部精力投入到《计算机程序设计艺术》系列书籍的编撰之中。他说:“我提前退休是因为意识到我需要至少 20 年的全职工作才能完成《计算机程序设计艺术》系列,我一直将其视为一生中最重要的项目。


TAOCP 系列丛书(1968-2015)。

在规划中,这套书将总共出版 7 卷。在已出版的书目中,卷 1 主要介绍基本算法,卷 2 主要介绍半数值算法,卷 3 主要介绍排序与查找,卷 4 主要介绍组合算法,卷 5、6、7 将分别介绍语法算法、语言理论和编译器。


在高德纳目前的计划中, 卷 4 将分为 4A、4B、4C 等,每本书的标题均为《组合算法:Part 1、2、3……》。


卷 4A 和卷 4B 均为组合算法相关内容,已出版的卷 4A 主要涉及布尔函数、按位操作技巧、元组和排列、组合和分区以及所有的树等,而卷 4B 的内容于 2022 年 10 月出版,如今中文版也即将出版!


当前正在编写的卷 4 其余内容概要如下:



与此同时,第 5 卷关于句法算法的内容也正在准备中,高德纳预计“将于 2025 年准备就绪



图片


计算机程序设计艺术 卷1:基本算法




高德纳|著

李伯民,范明,蒋爱军|译


卷 1 讲解基本算法,其中包含了其他各卷都需用到的基本内容。本卷从基本概念开始,然后讲述信息结构,并辅以大量的习题及答案。

图片


计算机程序设计艺术 卷2:半数值算法




高德纳|著

巫斌,范明|译


卷 2 全面讲解了半数值算法,分“随机数”和“算术”两章。书中总结了主要算法范例及这些算法的基本理论,广泛剖析了计算机程序设计与数值分析间的相互联系。

图片


计算机程序设计艺术 卷3:排序与查找




高德纳|著

贾洪峰|译

卷 3 扩展了卷1 中信息结构的内容,主要讲排序和查找。书中对排序和查找算法进行了详细的介绍并对各种算法的效率做了大量的分析。


图片


计算机程序设计艺术 卷4A:组合算法(一)




高德纳|著

李伯民 贾洪峰|译


4A卷(一)主要介绍了组合算法,内容涉及布尔函数、按位操作技巧、元组和排列、组合和分区以及所有的树等。


图片


计算机程序设计艺术:MMIX 增补





高德纳 马丁·鲁克特|著

江志强 黄志斌|译


本书由两本小册子合并而成,第一部分描述了 MMIX 的内存、寄存器、指令、加载与存储等基础概念,并介绍了关于 MMIX 的一些基本编程技术;第二部分使用该语言重新实现了 TAOCP 前 3 卷中的所有算法。

图片


计算机程序设计艺术 卷4B:组合算法(二)




 即将上市,敬请期待!


高德纳|著

杨熊鑫,胡光,李锡涵,柳飞|译

计算机科学领域的瑰宝,高德纳深入阐述程序设计的基本理论,对计算机领域的发展有着极为深远的影响。本书是该系列的卷 4B,以 7.2.2 节开篇,讨论回溯编程,内容包括舞蹈链、精确覆盖问题、算法谜题、可满足性问题等。

意义肯定是有的,但不能迷信。 现在高级语言和框架日新月异,我们更应该关注如何利用这些工具快速解决实际问题。 算法学习应该是有选择性的,比如针对自己工作的方向,深入学习一些常用的算法。没必要把所有算法都啃一遍,那样效率太低了。

我觉得还是很有意义的。虽然现在很多框架都封装好了算法,但理解算法的本质能帮助我们更好地理解框架的底层逻辑,遇到问题时也能更有效地debug。而且,很多算法的思想是通用的,可以应用到不同的场景中。

算法学习的重要性毋庸置疑。掌握扎实的算法基础,才能在面对复杂问题时游刃有余。现如今,高级语言和框架的出现,降低了开发的门槛,但也容易让人忽略底层原理。只有深入理解算法,才能写出高效、优雅的代码。而且,很多公司面试都会考察算法能力,可见其重要性。

数学基础对于理解算法至关重要。特别是离散数学,它为算法的设计和分析提供了理论基础。 建议在学习算法之前,先系统地学习一下相关的数学知识。 可以通过阅读数学教材、参加在线课程等方式来提高数学水平。

基础的离散数学、线性代数和概率论是必须的。 学习算法时,遇到相关的数学知识,可以有针对性地学习。 重要的是理解数学思想,而不是死记硬背公式。

我觉得不一定适用所有人。高德纳这种属于大师级的,他有足够的影响力和积累,可以心无旁骛地做研究。但对普通人来说,可能需要更多的实践和与外界的交流,才能保持技术的敏感性。

我觉得不需要太深奥的数学知识,高中数学水平就差不多够用了。 关键是要理解算法背后的数学原理,能够用数学语言描述算法。 在实际应用中,可以借助数学工具(比如 MATLAB、Mathematica)来解决问题。

高德纳的例子是个案,不能简单复制。在当今社会,技术发展日新月异,闭门造车很容易落后。技术创新需要开放的思维,需要与同行交流,需要了解市场的需求。所以,我认为对于大多数人来说,积极参与开源社区、参加技术会议等方式更有利于技术创新。

这种模式有利有弊吧。好处是可以深入研究,不受外界干扰,但缺点是可能会脱离实际应用。技术创新需要理论的深度,也需要实践的广度。最好是能将两者结合起来。