当前位置: 首页 > 编程日记 > 正文

算法鼻祖高德纳,82 岁仍在写《计算机程序设计的艺术》

作者 | 年素清

编辑 | 伍杏玲

出品 | CSDN(ID:CSDNnews)

高德纳(Donald Ervin Knuth)被誉为现代计算机科学的鼻祖,毕生致力于编译程序、属性文法和运算法则等领域的前沿研究,共出版专著17部,发表论文150余篇,写出TeX和METAFONT两个数字排版系统,撰写出IT界经典巨著《计算机程序设计的艺术》,提出计算机科学技术最基本的两个概念:“算法”(Algorithm)和“数据结构”(Data Structure)。

他还是个音乐天才,自己谱写乐曲,用信息论分析音乐复杂度。现年82岁的高德纳仍笔耕不断,忙着完成《计算机程序设计的艺术》第4卷的B部分。

维基百科:高德纳

写小说获 “科学天才”奖提名

高德纳于1938年1月10日在美国威斯康星州密尔沃基市出生。他从小表现出与众不同的才能:

高德纳在8岁的时候,为了帮自己所在的班在一个拼写单词活动夺得冠军,跟老师请假装病在家两周,利用一部大字典,得出了4500个单词,比裁判所准备的还要多出2000个,这使得小高德纳一下子成了学校的名人。

高中时,高德纳发明了一种算法,对任意画出的2条相交直线可通过这种算法立即给出相应的方程。

此外,中学时期的高德纳还写过一篇名为《普茨比度量衡体系》的科学幻想小说,并在美国著名的《疯狂》杂志上发表,大受欢迎,杂志被多次重印。这部小说不仅令他挣得平生第一笔稿费25美元,更令他获得了西屋“科学天才” 奖的提名。

自学编程为校篮球队赢得冠军

1956年,高德纳以打破学校记录的高分毕业,进入俄亥俄州克利夫兰的开思理工学院攻读物理。

大一暑假,高德纳留校打工。碰巧他工作室的隔壁是学校机房,一台新到的、体积庞大的IBM650引起了高德纳极大的好奇。他接连好几天彻夜不眠地呆在机房,熬夜读IBM 650的说明手册,甚至自学基本的程序设计。

那时高等计算机语言还没问世,编写程序只能用第二代或是汇编语言,编程是一件既耗时又费力的事。但操作过几次IBM 650后,高德纳声称自己能编写出比说明手册上介绍的更好程序。

高德纳很快便写出了把数字转化为素数、井字游戏等可执行数学函数的程序。他还为校篮球队开发出了一个应用程序,可根据球员在每场比赛中的得分、助攻、抢断、篮板球、盖帽等多项统计数字对球员进行综合评估,球队教练根据评估结果来挑选球员,这使得开思理工学院在1960年赢得了联赛冠军。

因为对计算机编程一发不可收拾的着迷,高德纳在大二时决定改学数学。

 最年轻的图灵奖获得者

1960年,高德纳从开思学院毕业,在全体教员参加的选举上,因表现出色被授予学士学位,还同时被破例授予硕士学位。随之他进入加州理工学院研究生院,1963年获得博士学位,留校工作。

高德纳在读研时,开始为不同的计算机编写编译器,当时很多软件公司花费高价寻求这样的程序,据说高德纳的一个编译器可卖出5000美元的高价。

在博士毕业的前一年,一著名出版社约小有名气的高德纳写一本编译器和程序设计方面的书。出版社在1962年约稿,可直到1966年高德纳还未收到任何反馈,编辑忍不住催促高德纳进展。高德纳说才刚刚完成3000多页,但仍然没有进入主题。编辑在震惊之余,决定出多卷本。这便是《计算机程序设计艺术》系列丛书的由来。

这一套书是编程界的名书,第一卷的《基本算法》于1968年正式发行,主要讲述编程时要用到的基本数学知识和处理不同问题要用到的算法。但真正能读完读懂的人为数并不多,据说比尔•盖茨费时几个月才能读完这一卷。

后来第二卷、第三卷相继出版,销量突破百万不止,风靡全球。美国ACM在1974年将图灵奖授予给他。彼时的高德纳不过36岁,是最年轻的图灵奖获得者,这个记录一直保持至今。

十年时间研究排版美学

尽管前三卷书取得了相当大的成功,可是高德纳随后却暂停了写作第四卷的计划,理由是现有的计算机排版软件效果太差,破坏了这套书的美。

接下来高德纳花费整整十年的时间专研排版问题。他发现当时的计算机虽能替代人工排出普通的报纸杂志样式,但对处理复杂的数理公式却无能为力。于是高德纳试图为计算机写一个小程序来解决这个问题,这个程序被命名为“TeX”。

Tex很快被采用,如今仍是全球学术排版的不二之选。除此之外,高德纳还字体设计系统METAFONT和文学化编程,前者对整个西文印刷行业带来了革命性变革,后者则充分展示程序设计的艺术性:清晰、美感、诗意。

拿奖杯装水果

高德纳一生所获得的荣誉不计其数,ACM除了授予他图灵奖外,还在1971年授予他以COBOL的发明人、女计算机科学家霍普(Grace Murray Hopper)命名的奖项,这个奖项是专门奖励30岁以下的优秀青年计算机科学家的。

因研发Tex和METAFONT等成就,当时的美国总统在1979年亲自为高德纳颁发了美国国家科学奖奖章。他还获得了美国数学和IEEE颁发的共五个奖项。

面对这么多荣誉,高德纳却始终保持一种十分超然的态度,据说当年的碗状图灵奖杯如今已被他当做了盛放水果的果盘。

“写作是演奏管风琴”

高德纳的父亲是一个多才多艺的人,星期天在教堂演奏风琴,受父亲影响,高德纳从小便爱上了音乐,这个爱好一直伴随他一生。他甚至一度打算报考音乐专业。

虽然高德纳主业是编程,但音乐是他的“主要副业”, 他在著作《娱乐和游戏论文集》一书里,用四个章节来阐述了他和音乐的关系。高德纳将写作喻为演奏管风琴,他的书房里的摆放有一台特制的84管管风琴,当他连续工作几天需要放松一下时,便会着手谱写管风琴乐曲。

高德纳称自己在上世纪60年代就拟订了作曲的计划,虽然别人来做这些事可以比他高明得多,但“内心却有一个声音在催我歌唱!”

细心的读者可能会发现“高德纳”并非其英文原名的音译,确实如此,这个名字是高德纳在1977年访华时,香港城大计算机科学系主任、华裔图灵奖得主姚期智夫人姚储枫教授所起。

以“高”为姓,是因为他体型高大,而且辅音G和K读音接近;“德纳”则与“Donald”相谐,在中文里含体面高贵之意。

姚储枫还给高德纳的爱人取了“高精兰”的中文名,为他们的孩子John和Jen分别起名“高小强”、“高小珍”。他们全家和中国孩子在公园玩了无需语言交流的游戏。

现年82岁的高德纳仍笔耕不断,忙着完成第4卷的B部分,他预计这本书将至少包含A到F部分。

参考:

计算机算法鼻祖——高德纳

唐纳德·克努特百科

计算机鼻祖-Donald Knuth(高德纳) 的传奇

推荐阅读
  • 利用 AssemblyAI 在 PyTorch 中建立端到端的语音识别模型

  • 京东姚霆:推理能力,正是多模态技术未来亟需突破的瓶颈

  • Python 还能实现哪些 AI 游戏?附上代码一起来一把!

  • 使用虚幻引擎4年,我想再谈谈他的网络架构

  • 真惨!连各大编程语言都摆起地摊了

  • 谁是合约届「技术之王」?

你点的每个“在看”,我都认真当成了AI

相关文章:

centos查看特定程序占用端口情况

ps axu |grep 程序名,找到特定程序的pidnetstat -nltp |grep pid即可。转载于:https://blog.51cto.com/zhukeqiang/1811735

关于页面刷新的问题

在做.net开发时,经常能碰到这样的情况,页面很长,而我们一般用的都是服务器端控件,用服务器端控件有这样一个缺点,就是控件每次都要和服务器交互,而产生页面的刷新,试想一下,如果页面…

技术直播:程序员副业的修炼指南!(限免报名)

面试造飞机,上班拧螺丝,每天想辞职,但无奈副业还“大器晚成”的样子!那可能是你还没有选对副业!滴滴 ~福利卡!!!CSDN学院邀请汤小洋老师开设技术直播课《程序员副业之路-三大终极秘籍…

Linux 双网卡绑定测试

Linux 双网卡绑定测试 先介绍一下情况,服务器A和服务器B都是CentOS 4.6的系统,现在要做HA Cluster,为了避免裂脑的发生,要提高心跳链路的可靠性,下图是现时的连接情况,服务器A的eth2、eth3分别和服务器B的e…

第六章练习题和知识面扩充

作业题:1. 自动获取IP地址的命令是什么?您知道在什么情况下,您的Linux才可以自动获取IP地址?2. 远程连接Linux服务器,需要Linux服务器开启sshd服务,那么sshd服务默认监听哪个端口?这个端口是否可…

一文详解面向多级多模态场景的召回引擎

作者| 阿里文娱开发专家 崇懿、阿里文娱开发专家慧善责编 | 屠敏头图 | CSDN 下载自视觉中国出品 | CSDN(ID:CSDNnews)优酷视频搜索在文本搜索系统的基础上,不断探索视频搜索的方案,在多模态输入、多级多模态索引、跨模…

对比.Net PetShop和Duwamish来探讨Ado.Net的数据库编程模式

作者:卢彦.NET PetShop和Duwamish简单介绍相信大家一定听说过有名的"宠物店大战",没错,本文的主角之一就是获胜方.NET PetShop,微软号称以27倍的速度和1/4的代码量遥遥领先于基于J2EE的PetStore宠物商店。虽然SUN也曾对此抱怨过不满…

如何直接将HTML代码加载到TWebBrowser

wbRecvContent//为 webbrowser控件 procedure TFrmMain.ShowHtmlCentent(slt: TStrings); var aMemory: TMemoryStream; pbuf: PAnsiChar; begin aMemory : TMemoryStream.Create(); try aMemory.Clear; slt.SaveToStream(aMemory); aMemory.Seek(0, soBeginning); wbRecvConte…

JavaScript基础(一) 数据类型

动态类型 JavaScript 是一种弱类型或者说动态语言。这意味着你不用提前声明变量的类型,在程序运行过程中,类型会被自动确定。 数据类型 最新的 ECMAScript 标准定义了 7 种数据类型: 6 种 原始类型: BooleanNullUndefinedNumberStringSymbol (ECMAScript…

DataGrid入门经典(C#)

作者:未知 请作者速与本人联系这篇文章主要介绍如何在DataGrid控件中实现编辑、删除、分类以及分页操作。为了实现我们的意图,我们使用SqlServer2000自带的NorthWind数据库。程序分为两部分: 1.包含HTML代码的.ASPX文件 2.包含所有逻辑及…

(札记)Altera Stratix IV系列FPGA TRUE LVDS RX input termination 在Quartus工程中的设置方法...

Altera Stratix IV系列FPGA Row bank的TRUE LVDS_RX支持oct(on chip termination),所以设计的时候不需要外接一个100ohm电阻。备注:我使用的是友晶科技(Terasic)的DE4。 所以当我们使用到Stratix iv系列FPGA的row bank的lvds的时候…

直播:AI时代,普通程序员该如何转人工智能(限免报名)

常常有小伙伴在后台反馈:想了解人工智能,但是该怎么学?自学难度大又没有效果,该怎么办?CSDN为了解决这个难题,联合唐宇迪老师为大家带来了一场精彩的直播【年薪百万AI工程师亲授:小白实战培养计…

沃通免费SSL证书申请指南

我们在做一些exchange或lync项目的时候很多时候都会用到公网证书,比如:我们做exchange2013和Office 365混合部署,或者通过SEM暂存迁移或CEM直接转换迁移的时候都需要用到公网证书,下面为大家介绍1个免费的SSL证书及申请的方法,希望…

使用VS.NET2003编写存储过程

作者:未知 请作者速与本人联系数据表定义了如何在数据库中存储数据,但没有说明如何存取数据。我们还需要了解读写记录以便从表中再次调用选定行和列的详细信息。开发人员通常会在其代码中编写一些特殊的查询语句,用于读写数据。这不仅会导致…

谈Linux的安全设置

如今系统的安全变的越来越重要了,这里我想把我平时比较常使用的一些linux下的基本的安全措施写出来和大家探讨一下,让我们的Linux系统变得可靠。 1、BIOS的安全设置 这是最基本的了,也是最简单的了。一定要给你的BIOS设置密码&#…

亮风台提出用完全可训练的图匹配方法,优于最新SOTA | CVPR 2020

出品 | AI科技大本营(ID:rgznai100) 6月14日-19日,CVPR 2020在线上举行,据了解,本届大会共收到6656篇投稿,接收论文1470篇,录用率约22%,低于ICCV 2019论文录用率(25%&…

数组与纠结的排序篇

数组之纠结的排序 1.数组是什么? 数组:所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,…

ASP.NET结合COM组件发送Email

在开发电子邮件发送程序的时候,我们经常需要使用到相应的组件,其实不需要第三方的组件(例如:Jmail)照常可以做到发送Email的功能。 在系统目录(如c:/winnt或c:/windows)的system32子目录中可以找…

卡巴循环30天不限次数循环试用工具

本文需评论之后方可查看! echo off title 卡巴循环30天不限次数循环试用工具 echo off echo 卡巴循环30天不限次数循环试用工具 echo. echo echo 卡巴斯基6/7/8试用过期时清除系统中使用痕迹,就象新系统重新安装卡巴一样 echo 1、在屏幕右下角红V卡巴图…

微软CEO纳德拉对话沈向洋:那些未来可期的计算机视觉研究与应用

编者按:6月16日,CVPR 2020 大会以全球连线的形式如期开幕。在大会的首场主题演讲中,微软公司 CEO 萨提亚纳德拉与微软公司前执行副总裁沈向洋进行了一场精彩的炉边对谈,分享了对计算机视觉、人工智能研究与应用前景的思考与展望。…

SoapUI进行REST请求,POST方法提交到数据库的数据乱码问题

一开始以为要把json字符串的key和value一个一个的加进去,结果总是报 300,参数错误,后来才发现(https://www.joecolantonio.com/2013/08/31/soapui-how-to-post-json-to-a-rest-service-2/)可以直接在下面粘贴就好了&am…

网站信息统计的简单实现过程

作者: pcskySQL语句如下: SELECT DD.SumHits, AA.CountArt, CC.WeekUpdate, BB.RegUserNumFROM(SELECT COUNT(newsid) AS CountArt FROM article) AA,(SELECT COUNT(id) AS RegUserNum FROM Admin) BB,(SELECT COUNT(newsid) AS WeekUpdate FROM(articl…

谈谈C#中类成员的执行顺序.

今天我们来谈谈C#中子类和父类中静态成员以及构造函数的执行顺序,这个地方向来是初学C#的人比较迷惑的地方,也是各大公司最喜欢拿来出面试题的地方。 下面我们分情况来分析。 1. 普通构造函数和静态构造函数的执行顺序。 对于单个的类,它的静…

AI 重塑 IT的 5 种方式

作者 | Stephanie Overby译者 | 火火酱,责编 | Carol封图 | CSDN 下载于视觉中国Gartner最新的人工智能(AI)hype cycle报告指出,AI在未来五年中CIO议程中的排名十分靠前,对潜在业务转型具有重要影响。然而,…

[原创]Gerrit中文乱码问题解决方案分享

应开发同事的要求,部署了GitlabGerritJenkins的持续集成环境. 但是发现了一个问题,Gerrit登陆后有中文乱码出现. 具体情况如下: (1)Git代码中的中文乱码处理: 为妥善解决中文编码的问题,对所有git repository做如下约定:所有文本文件都必须存储成utf8编码…

UVA 10700 Camel trading

UVA_10700我们可以猜到最大值一定是先算和后算积&#xff0c;最小值一定是先算积后算和,因为a*bc<a*(bc)。此外&#xff0c;这个题目数据有可能比较大&#xff0c;所以要采用long long int或者double来处理数据。 #include<stdio.h>#include<string.h>#include&…

在ASP.NET中操作文件的例子

利用SYSTEM.IO 名空间中的STREAMWRITER,STREAMREADER及FILE类,完成文件读、写、删除的操作。 -------------------------------------------------------------------------------- 1、写文件 writefile.aspx <% Import Namespace"System.IO" %> 引…

云原生如此重要,可惜80%的人都不知道

文 | Aholiab责编 | Carol封图 | CSDN 下载自视觉中国2020年&#xff0c;一场疫情给中国企业带来了一次「被动数字化升级」&#xff0c;很多企业第一次认识到了信息化的重要性。今天&#xff0c;数字经济已无处不在&#xff0c;根据中国信息化百人会的研究报告显示&#xff0c;…

CentOS 7 yum 安装 MySQL5.7

为什么80%的码农都做不了架构师&#xff1f;>>> 0、环境 本文操作系统: CentOS 7.2.1511 x86_64 MySQL 版本: 5.7.13 1、下载 MySQL 官方的 Yum Repository 从 MySQL 官网选取合适的 MySQL 版本&#xff0c;获取下载地址。 然后使用 wget 下载&#xff1a; [rootce…

万字长文带你入门 GCN

来源 | 阿泽的学习笔记&#xff08;ID: aze_learning&#xff09;Convolutional Neural NetworkCNN 在图像识别等任务中具有重要作用&#xff0c;主要是因为 CNN 利用了图片在其域中的平移不变性。由于图结构不存在平移不变性&#xff0c;所以 CNN 无法直接在图上进行卷积。1.1…