开始写“The Art of Computer Programming”(即TAOCP)这本书后50年的今天,Don Knuth还在努力的写。他就快完成前面的五卷了。这可是被认为是“塑造了一个世纪的科学面貌的一百本书”之一。下面将由Richard Morris来问问他最近怎样,并对他其他众多成就挖掘一下。

开始写这书后将近50年的时间里,“The Art of Computer Programming”几乎定义了计算机编程的方方面面,一如它定义了作者的地位。Donald Knuth获得了Kyoto Prize (1996)、Turing Award (1974)和National Medal of Science (1979)。他是个与众不同的人。除了提出“文学编程”这一概念外,他还以设计和编写了一个史上最广泛使用的数字排版系统,系统当中的字体也是亲自设 计。他还率先使用“开源”软件。

Knuth是个很有魅力又热情的人,将自己对历史、音乐、艺术和数学的洞察融合到计算机编程艺术中。

Don Knuth一直将写The Art of Computer Programming视作他人生最重要的部分。

Knuth全天候的写作安排意味着他“很像个隐士。。。同一时间只专注一样东西,不希望被打扰,而不是让好几样东西在自己脑子里进进出出。我不会安排访客时间,不会去参加啥啥大会,不会接受演讲邀请,不会接任何类型的新任务。”

讽刺的是,计算科学界就快要失去这位大师了,因为大师对音乐无比热爱(他的房子是他设计的,两层,像个管风琴),他说写完预想中有七章的The Art of Computer Programming后,他倾向于回归音乐圈。

RM: 
     阿德, 上次我们谈到复杂性的问题,你说简约是解决复杂性唯一的答案。为什么寻找简单的解决方案是解决软件问题的关键。

DK:
    不要一找到解决方案就马上停止探索,寻找简单的解决方案是重要的。

我猜测人们总是过早停止探索的原因是大部分问题没有一个简单的解决方案;所以他们认为没有必要再浪费时间继续探索了。如果开始我们就假设存在一个简单的解决方案,那么我们更可能找到一个简单的解决方案。

RM:
    你写过一篇关于开发TeX的文章,在文中你谈论到激发纯粹的、破坏性的QA个性,全力以赴测试代码。你认为大部分开发人员在这方面做得还好么?

【译者注:关于这篇开发TeX的文章,在Coders at Work的306页也提到过,但是译者一直没有找到原文。】

DK:

很对,只有抱着这种心态写测试用例才能检测出微秒的错误。举例来说,我知道我没有密码学专家或者计算机安全专家所具有的那种狡猾。

另一方面我为软件设计了相当成功的压力测试,这主要是通过

(1) 设想自己是系统的敌人,而不是朋友;

(2) 考虑那些合法但是离奇、不可能被使用的输入;

(3) 将难以置信的复杂的结构嵌入另一个了解更少的结构.

在我能说服自己程序运行正确之前,有时需要花费好几个小时来思考TeX和METAFONT的测试程序。但是在这个过程中我发现了程序漏洞,而且我很确定使用其它我听说的方法是无法发现这些漏洞的。

几个不同的人独立做压力测试大概会获得更好的结果。可以想象,测试是一个令人满意的职业。

可能我倾向于以意想不到的方式使用系统,当发现缺陷时,我会很满足。举例来说,我记得当我拜访我的妹妹的时候,和我外甥玩“shoot-em-up”很有乐趣。

因为我是和平主义者,我尽可能将子弹射击到墙上,而不是试图射杀隐蔽的攻击者。通过使弹孔满足合适的模式,我能够将我的名字拼写在墙上。在游戏中跑来跑去之后,当我回到原来的位置,我的名字不见了!我认为这是软件的一个漏洞。

很久以前当我还是一位少年的时候,可能是1952年或者1953年,我看到了我的第一个“计算机游戏”,那是在芝加哥某个博物馆中的tic-tac-toe的示范,游客们接受挑战来打败机器。

这个展示品是由AT&T设计的,我认为它是由继电器而不是真正的通用计算机来控制的。

“嗯。这里没有愤怒的小鸟!” 
(高德纳和IBM650 1958年)

我很清楚如果做正常的回应我不可能赢;所以我故意做最愚蠢的走法。机器处于可以用两种方式完成三个一排来击败我的状态。我决定不去阻止任意一种可能性。做为回应,机器一次做了两个获胜的走法。。。这明显是违法规则的。所以我取得了道义上的胜利。

所以,鼓励“跳出思维局限”有助于设计测试用例,就像很多其他情况一样。

RM:
   如果在今天让你从头开始设计 TeX 的话,计算机领域或您个人理解的进展会以戏剧性的方式改变它的设计,还是会把它制造成几乎一样的呢?

DK:
    我不知道是否今天有人仍然可以写这样一个程序,而无需为专利想法的许可支付一笔钱。如果我们忽视这些问题,那么我会保持系统基本上是现在这个样子。

出于对 TeX 的尊重,唯一使我后悔的严重错误是我在内部使用二进制算术而在用户界面中使用十进制算术;我应该用十进制完成所有的计算。

RM: 
    你对那些想成为更好的软件设计师的人有什么建议?他们应该怎样决定是要赚钱还是搞学术?你觉得为了做到更好的软件我们需要更好的激励么?

DK:
     我觉得当前的激励已经很好了,当然了,除了我希望更多的人会发现文学编程的好处这点。

RM:
     传说中,有说Chuck Moore对你的算法理念有影响,也有说你对他有影响,哪个是真的?

DK:
    据我所知,我们两人没有交集。

RM:
     当你在进行试探式的编程并准备发表时,你需要什么样的处理

DK:
     我平均每个星期大概写5个程序,接下来就是享受将它们润色的过程。在我知道这个东西是怎样运作的时候,我通常会撕掉开头的一两个草稿,因为算法往往是没 法再加东西了的或者让人感到意外的。我经常深入的学习我在研究的这个方面的权威专家写的代码,但我也会试着从头开始构想问题的方方面面。我犯过不少错误, 但这之后我会试着帮读者避免它们。

RM:
    如何定义设计编程语言的概念?它是一种表达想法的工具,还是表达目标的工具?

DK:
    我认为编程语言是一种将程序员的想法转换为机器可以执行的精确操作的工具。主要的思想是尽可能匹配用户的直觉。因为有很多种用户和很多种应用领域,所以我们需要很多种语言。

在我最近出版的《计算机语言论文选集》(Selected Papers on Computer Languages)的第11章中,我详细的讨论了语言设计。在20世纪60年代我就被请求撰写这个主题的文章,对于阐释好的设计准则,我能想出的最好的 办法就是全部违反这些准则,提出BL\I(Bad Language One)的设计。但是在公开BL\I之前,我犹豫了四十多年,因为我担心有人可能会去实现它,并且开始使用它。最终,在准备那本书的时候,我决定冒险一 试。

RM:
     我知道这是个很大的东西,但一种语言的设计跟用这种语言写的软件的设计间有着什么样的关系呢?

DK:
     对算法有独到想法的软件开发者需要一种能匹配他们这种想法的语言,使他们能有效的将这些想法转化成能工作的代码。

不同的思考过程导向不同的结构。

RM:
     计算机行业当前最主要的问题有哪些?

DK:
    呃,我只是个写编程的学者,我从来都不明白工业或经济是怎么运转的。

RM:
     你喜欢自由或秩序吗?你更倾向一种方法做一样事,还是有一千种方法达成同一目的?

DK:
     (a)自由和秩序我都喜欢。(b)我想也许我倾向于三种方法吧,各具不同的特点,当中任一种都具备将自己变成其他两种的知识。

RM:
     你觉得作为一个技术专家你怎样影响了计算机行业?人们能从你的经验中学到些什么呢?

DK:
     我说不准有我能什么影响,但我可以总结一下我职业生涯中我试着完成的东西:我试着将与编程相关的许多好的理念收集起来,并且有效的加以解释,因为我相信计算机科学是一个知识的尤物。

我很高兴,这些知识已被证明是非常有用的,但我是真的想收集并解释它们,即使唯一的动机是对知识的好奇心和探索迷人模式的欲望。

原文链接:http://www.oschina.net/translate/don-knuth-and-the-art-of-computer-programming-the-interview

高德纳和计算机程序设计艺术:人物访谈(1)相关推荐

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

    2019独角兽企业重金招聘Python工程师标准>>> 高德纳谈计算机程序设计艺术(上) http://blog.jobbole.com/8397/ 在您看来,您在计算机科学领域最大 ...

  2. 高德纳谈计算机程序设计艺术(下)

    您曾经说过,您的工作从根本上是"关于如何辨别能够(在计算机科学领域)产生持续影响而非很快改变的东西".这里的具体含义是什么呢? 我每天大约都会收到一份期刊,没有ITNOW啦(笑), ...

  3. 最伟大的程序员高德纳: 谈计算机程序设计艺术

    所以说您对此充满激情吗? 那是,就像每天早上醒来我都会想着今天要好好写个程序. 您是受到缪斯女神的眷顾了吧? 乐观的情形就是因此每个人都将爱上了算法分析和设计美妙的程序--那不就是一个很好的将来吗?! ...

  4. 披阅十载,84岁图灵奖得主高德纳的《计算机程序设计艺术:卷4B》终于出版

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送 来自:机器之心 从博士期间的一个决定开始,高德纳已经坚持写了 50 年. 刚刚,84 岁 ...

  5. 计算机界最大“追书坑”,82岁大神高德纳仍在写《计算机程序设计艺术》4B卷...

    本文经AI新媒体量子位(ID:QbitAI)授权转载,转载请联系出处 晓查 编译整理 Donald Knuth,中文名高德纳,是他创造了"算法分析"这一新的计算机科学研究领域. 对 ...

  6. 计算机大师高德纳权威著作《计算机程序设计艺术》影印版精装版已经入库,即将上市!

    <计算机程序设计艺术>系列著作对计算机领域产生了深远的影响.这一系列堪称一项浩大的工程,自 1962年开始编写,计划出版 7卷,目前已经出版了 4卷.<美国科学家>杂志曾将这套 ...

  7. 82岁高龄的高德纳仍在写《计算机程序设计艺术》,那是他未完成的人生目标...

    本文转载自:程序员书库 编译:猿妹 链接: https://www.quantamagazine.org/computer-scientist-donald-knuth-cant-stop-telli ...

  8. 36 岁捧走图灵碗!80 岁算法大师高德纳要在 105 岁完结《计算机程序设计艺术》...

    编译:CSDN - 弯月(ID:CSDNnews):英文: Siobhan Roberts 号称计算机领域经典必读的著作你都读过哪些,例如<计算机程序设计艺术>系列?近日,这套书的作者高德 ...

  9. 《计算机程序设计艺术》作者高德纳

    原文作者:Siobhan Roberts 译者:UC 国际研发 Jothy 写在最前:欢迎你来到"UC国际技术"公众号,我们将为大家提供与客户端.服务端.算法.测试.数据.前端等相 ...

最新文章

  1. RecycleView中使用Glide加载图片防止加载错乱
  2. 码农在墨尔本首次求职有感
  3. 燃烧学往年精选真题解析 2018-01-01
  4. 【Web自动化测试——代码篇十二】自动化测试模型——数据驱动测试和关键字驱动测试...
  5. ORACLE 绑定变量用法总结
  6. C# 图像模板匹配并标注
  7. centos 远程安装java程序_centos7远程服务器中redis的安装与java连接
  8. C++友元函数、友元类与类模板
  9. VS实用的几个快捷键
  10. TCP、UDP绑定同一端口通信的解释-转
  11. Java学习之InputStream中read()与read(byte[] b)
  12. 990.00 php,一键自动采集 体育赛事 直播网站。仿直播吧源码、仿篮球直播源码、NBA直播源码 视频网站...
  13. 你还在纠结英语的发音问题吗,你还老记不住单词吗?
  14. 如何在计算机上增加一个磁盘分区,电脑怎么添加硬盘分区
  15. 形容等待时间长的句子_形容等待很久的句子
  16. PS证件照排版计算器
  17. 湖南省第十届蓝狐网络杯大学生计算机程序设计竞赛,2019年湖南省大学生计算机程序设计竞赛 (HNCPC2019) 简要题解...
  18. 2019HDU多校第七场 HDU6656 Kejin Player H 【期望递归】
  19. 梅西百货公司 - Macy‘s - Shop Fashion Clothing Accessories
  20. php分32位和64位吗,cpu32位和64位之间有什么区别?

热门文章

  1. 第一批用ChatGPT搞副业的程序员,已经富起来了
  2. LightGBM-调参
  3. 计算机网络搭建无线局域网,win7如何组建无线局域网?组建的详细步骤分享
  4. 【JavaScript】实现仿windows计算器(完整版)
  5. html 打印指定区域并去掉页眉、页脚,设置打印布局(纵向、横向)
  6. SpringzCloud之Feign原理
  7. 计算机技术英语网站,中国致力于成为计算机技术强国
  8. 程序员常访问的几个网站
  9. 基于mpi的奇偶排序_奇偶排序
  10. 大秀直播间打赏系统付费观看网站源码