最伟大的计算机程序员是如何诞生的?——解读高德纳(Donald E.Knuth)

高德纳教授将计算机编程比喻为艺术创作,以其开创性的研究和著作,深刻地阐述了编程既是技术实践又是创意表达的过程。从编程的起源、发展到成为现代科学的基础,高德纳展示了计算机科学的独特魅力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算机编程是一种艺术形式,就如同人们谱写诗歌和音乐。  ——高德纳

enter image description here

高德纳(Donald Ervin Knuth1938110日-),出生于密尔沃基,美国著名计算机科学家,斯坦福大学计算机系荣誉退休教授。高德纳教授被誉为现代计算机科学的鼻祖[来源请求],在计算机科学及数学领域发表了多部具广泛影响的论文和著作。

高德纳最为人知的事迹是,他是《计算机程序设计艺术》(The Art of Computer Programming)的作者。此书是计算机科学界最受高度敬重的参考书籍之一。他创造了算法分析的领域,在数个理论计算机科学的分支做出基石一般的贡献,此外还是排版软件TEX和字体设计系统Metafont的发明人。

高德纳的英文名直译为唐纳德·欧文·克努斯(Knuth发音为/knuːθ/[1]),“高德纳”这个中文名字是1977年他访问中国之前所取的,命名者是储枫(姚期智的夫人,计算机科学家)。

高德纳真的只是一个人么?他一生发表了150余篇论文,提出了领域内最重要的三个算法。他的经典巨著(如今在写第四卷)《计算机程序设计艺术》对整个行业进行了综述,同时也提出了原创的研究见解。这本书的前几卷已经诞生了中文、日语、俄语和匈牙利语等多个版本。在三十多年的研究生涯中,他还找时间创造出功能强大的排版印刷软件系统,以便进行多样化的写作,主题 包括古巴比伦算法和《圣经》诗篇,甚至还有小说。在“业余时间”里,他喜欢弹奏自已设计的管风琴。

enter image description here高德纳和妻子在斯坦福大学家中,面前是他自己设计的管风琴,1975年(斯坦福大学新闻出版服务中心提供)

在其职业生涯中,高德纳受到了公众广泛的赞誉和褒奖,包括1974年获得计算机科学界的最高荣誉图灵奖,1979年获得吉米·卡特总统颁发的美国国家科学奖章。然而高德纳以一种超然的态度面对这些荣誉。当年的图灵奖杯如今已被他当做了盛放水果的果盘。

高德纳的音乐世界及他的第一篇出版物

高德纳于1938年出生于密尔沃基。他的父亲是克努斯家族的第一位大学生,最开始是小学教师,后来在一所路德教会高中教簿记学。每周日他还在教堂弹奏管风琴。高德纳继承了他父亲对音乐和教育的理解,尤其是语言风格。

我最感兴趣的东西恰恰是老师们擅长的。我们在语句分析图方面进行了扎实的训练。下课后总有一堆人凑在一起分析诗歌中的语句,其乐融融。

作为校报的编辑,高德纳发明了填字游戏 。他至今仍记得当年在词海中寻找合适题目的乐趣。从小时候起,高德纳就开始赢得荣誉。8年级时,一家糖果生产商赞助了一次比赛,要求选手用其品牌“Ziegler’s Giant Bar”(齐格勒巨型棒棒糖)中的字母组成新的单词,组成单词数量最多者获胜。小高德纳决定尝试一把。

我找出了大概4500个单词,还没有用撇号。如果用撇号我会找到更多。比赛裁判给出的“官方”单词表上只有2500个。

他赢得了自己的第一份奖励:一台电视机(在当时属于奢侈品)以及足够整个学校享用的齐格勒棒棒糖。上高中之后,高德纳又获得了西屋科学天才奖的提名,理由是他的“普茨比度量衡体系”。高德纳以他日后研究生涯中标志性的细心和准确,定义了一系列基本单位,例如长度单位普茨比 (第26期MAD杂志的厚度)、“麻烦程度”单位MAD(即48件事的麻烦程度)以及能量的基本单位whatmeworry 。1957年6月,MAD 漫画杂志花25美金买下了这篇作品,使之成为了高德纳等身著作中的第一篇出版物。不过,他在高中时期最关注的既不是写作也不是科普,而是音乐。

当时我认为上大学时应该会主修音乐专业。一开始我吹萨克斯,后来乐队的低音号手出了事故,我又开始吹低音号。我为乐队编了一首曲子,把当时热门电视剧的主题曲都加了进去——《法网恢恢》 、胡迪•都迪秀 还有百利发乳 的广告音乐。我那时可不懂什么版权保护法。

高德纳的计算机之路

1956年,高德纳有生以来第一次接触到了计算机,那是一台IBM 650,Fortran之前的机器。他通宵不眠地钻研使用手册,并且自学了基本编程。

我们从IBM得到的手册上面有一些编程的案例,而我发现自己的方法比上面介绍的好得多。所以我猜自己可能有些天赋。其实我不知道的是几乎所有人都能对那些程序加以改进——当时的相关书籍都很差劲。我开始学习计算机时,正是巴科斯忙于Fortran的时候。

高德纳的第一个程序是把数分解为素数的乘积,另一个程序则是教计算机玩井字棋 。不过这些都只是小打小闹而已。1958年他为凯斯校篮球队编写了一个程序,根据命中率、抢断、失误等数据为每位球员评分。球队教练非常欣赏这套程序,宣称球队在联赛夺冠也有它的一份功劳。《新闻周刊》专门为该程序写了一篇报道,IBM也在公司宣传册上刊登了高德纳与650机的合影。 高德纳被计算机的无所不能深深地吸引住了。事实证明计算机甚至也符合他对音乐的兴趣。 数学是一种模式的科学。音乐也是模式。计算机科学在进行抽象、建立模式等方面同样有很多作为。我认为,计算机科学与其他领域最大的区别就在于它不断的跃变——从微观角度上升到宏观视角。

有许多职业的产生是有明确的需要,人们要找到解决重要问题的方法,比如医学方面的职业。而像计算机科学这样的职业之所以存在,是我们从小形成的思维结构所决定的。

如果你碰巧属于某2%的人,那么你就会自然而然地被计算机吸引而产生共鸣。正是思维方式将我们与其他人区分开来。最终,我意识到自己是一位计算机科学家。

1960年,高德纳以最优异成绩从凯斯理工学院毕业,而且校方打破惯例,投票决定同时授予他数学硕士学位。随后他前往加州理工学院,3年后获得数学博士学位。他写了一篇关于组合几何学的论文“有限半视场及射影平面”。

1963年毕业后,高德纳以数学系助理教授的身份加入了加州理工学院教研组,仍然继续追随着对计算机的兴趣。自1960年起他就担任了布劳斯公司的顾问。布劳斯公司(后合并为优利系统)是当时计算机产业的领跑者,与艾兹赫尔•戴克斯彻等杰出人物保持着密切的联系。

高德纳在布劳斯的工作内容包括硬件和软件设计,尤其是对新发明的Algol 60编程语言提供支持。这份工作让他有机会与戴克斯彻当面认识,分享彼此对编译的共同爱好。戴克斯彻和J. A. 祖内维德 在1960年8月已经实现了第一个Algol 60编译器。

我们见了面,并一直保持书信来往。他最大的长处在于永不妥协的审美品味,我呢,总是意志不坚,摇摆不定。如果他对我说他喜欢我做的某件事,那么他就是真的喜欢;如果他说不喜欢,那么就是真的不喜欢。所以我视他为难得的诤友。

在那个时侯,数学和计算机科学之间存在着巨大的鸿沟。在写程序时,你必须来回调整,直到自己认为它能顺利运行。利用数学对程序进行证明——这在当时是一个非常激进的概念,所有人都认为不可能。戴克斯彻的确是计算机程序验证方面最伟大的先驱之一。

巨著《计算机程序设计艺术》的诞生

1962年1月,Addison-Wesley出版社 找到当时还是学生的高德纳,邀请他为编译器这一新生领域写一本书。同年夏他启动了这项计划,到1963年秋,他开始让自己在加州理工的学生试读初稿,以测试效果。

到了1966年,我已经手写了3000页的草稿,开始用打字机把它们打出来。我比较了手书和打印页面的文字大小,估计这个3000页会减少到700页。但是出版社说我错了,比率应该是1比1。经过疯狂的会议讨论,我们定下了一个计划:出一个七卷册的系列丛书。

在1966年,举一人之力就可以了解整个计算机科学领域。但是它一直在不断成长壮大。我已经尽全力跟上它的步伐。而现在我发现第4卷(关于组合算法)一卷马上就要超过2000页——第4A、4B和4C卷,估计能在2003年完成。

一个新科博士,挑战如此包罗万象的典籍,本就是一件惊人的事,但它得到的反应却更加惊人:《计算机程序设计艺术》的前三卷成了20世纪70年代初教科书的首选,至今仍频频被用于参考书。它们之所以一直受到追捧,正是因为高德纳对待课题一丝不苟的态度。对提及的每一个理论,书中都会巨细无遗地讨论所有细节。在解释某个算法后,高德纳还会再给出一个程序实例——目的是确保读者不会产生误解。书中严谨与机智并举,而且尽力展现每一条理念下蕴藏的美感。正如纽约大学的编译器设计师埃德•施恩伯格 所言:“戴克斯彻教我们分辨是非,高德纳教我们分辨好坏。”

由小故事探究最伟大的计算机程序员如何诞生的

民间故事中一直把高德纳视作为有史以来最伟大的计算机程序员。我们不妨参考以下艾伦•凯所讲的轶事。

当我在斯坦福大学从事AI项目时(20世纪60年代末),每个感恩节我们都会与在湾区 做研究项目的人们进行一次编程竞赛。奖品是一只火鸡。 麦卡锡为竞赛出题。高德纳参加的那一年,他一举拿下了两个奖项:程序调试所用的 时间最少、算法执行效率最高。而且他用的是所有参赛者中最烂的系统,叫做Wilbur系统,只能远程批处理。可以说他把所有人都打得屁滚尿流。然后他们问他:“你怎么这么牛?”他回答说:“我学编程的时候,一天能摸5分钟计算机就不错了。想让程序跑起来,就必须写得没有错误。所以编程就像在石头上雕刻一样,必须小心翼翼。我就是这样学编程的。”

本文摘自:《奇思妙想:15位计算机天才及其重大发现》

第1卷首先介绍编程的基本概念和技术,然后详细讲解信息结构方面的内容,包括信息在计算机内部的表示方法、数据元素之间的结构关系,以及有效的信息处理方法。此外,书中还描述了编程在模拟、数值方法、符号计算、软件与系统设计等方面的初级应用。此第3版增加了数十项简单但重要的算法和技术,并根据当前研究发展趋势在数学预备知识方面做了大量修改。 第2卷对半数值算法领域做了全面介绍,分“随机数”和“算术”两章。本卷总结了主要算法范例及这些算法的基本理论,广泛剖析了计算机程序设计与数值分析间的相互联系,其中特别值得注意的是作者对随机数生成程序的重新处理和对形式幂级数计算的讨论。 本书附有大量习题和答案,标明了难易程度及数学概念的使用。 本书内容精辟,语言流畅,引人入胜,可供从事计算机科学、计算数学、计算技术诸方面的工作人员参考、研究和借鉴,也是相关专业高等院校的理想教材和教学参考书。 《计算机程序设计艺术排序和查找(第3卷)(第2版)》内容简介:这是对第3卷的头一次修订,不仅是对经典计算机排序和查找技术的全面介绍,而且还对第1卷中的数据结构处理技术作了进一步的扩充,通盘考虑了将大小型数据库和内外存储器。它遴选了一些经过反复检验的计算机方法,并对其效率做了定量分析。第3卷的突出特点是对“优排序”一节作了修订,对排列论原理与通用散列法作了全新讨论。 ——《豆瓣读书》
资源来自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、付费专栏及课程。

余额充值