开始写“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页也提到过,但是译者一直没有找到原文。】
其它翻译版本 (1) 加载中 DK:
很对,只有抱着这种心态写测试用例才能检测出微秒的错误。举例来说,我知道我没有密码学专家或者计算机安全专家所具有的那种狡猾。
另一方面我为软件设计了相当成功的压力测试,这主要是通过
(1) 设想自己是系统的敌人,而不是朋友;
(2) 考虑那些合法但是离奇、不可能被使用的输入;
(3) 将难以置信的复杂的结构嵌入另一个了解更少的结构.
在我能说服自己程序运行正确之前,有时需要花费好几个小时来思考TeX和METAFONT的测试程序。但是在这个过程中我发现了程序漏洞,而且我很确定使用其它我听说的方法是无法发现这些漏洞的。
RM:
如果在今天让你从头开始设计 TeX 的话,计算机领域或您个人理解的进展会以戏剧性的方式改变它的设计,还是会把它制造成几乎一样的呢?
DK:
我不知道是否今天有人仍然可以写这样一个程序,而无需为专利想法的许可支付一笔钱。如果我们忽视这些问题,那么我会保持系统基本上是现在这个样子。
出于对 TeX 的尊重,唯一使我后悔的严重错误是我在内部使用二进制算术而在用户界面中使用十进制算术;我应该用十进制完成所有的计算。
DK:
我觉得当前的激励已经很好了,当然了,除了我希望更多的人会发现文学编程的好处这点。
RM:
传说中,有说Chuck Moore对你的算法理念有影响,也有说你对他有影响,哪个是真的?
DK:
据我所知,我们两人没有交集。
RM:
当你在进行试探式的编程并准备发表时,你需要什么样的处理
DK:
我平均每个星期大概写5个程序,接下来就是享受将它们润色的过程。在我知道这个东西是怎样运作的时候,我通常会撕掉开头的一两个草稿,因为算法往往是没法再加东西了的或者让人感到意外的。我经常深入的学习我在研究的这个方面的权威专家写的代码,但我也会试着从头开始构想问题的方方面面。我犯过不少错误,但这之后我会试着帮读者避免它们。
RM:
如何定义设计编程语言的概念?它是一种表达想法的工具,还是表达目标的工具?
DK:
我认为编程语言是一种将程序员的想法转换为机器可以执行的精确操作的工具。主要的思想是尽可能匹配用户的直觉。因为有很多种用户和很多种应用领域,所以我们需要很多种语言。
在我最近出版的《计算机语言论文选集》(Selected Papers on Computer Languages)的第11章中,我详细的讨论了语言设计。在20世纪60年代我就被请求撰写这个主题的文章,对于阐释好的设计准则,我能想出的最好的办法就是全部违反这些准则,提出BLI(Bad Language One)的设计。但是在公开BLI之前,我犹豫了四十多年,因为我担心有人可能会去实现它,并且开始使用它。最终,在准备那本书的时候,我决定冒险一试。
RM:
我知道这是个很大的东西,但一种语言的设计跟用这种语言写的软件的设计间有着什么样的关系呢?
DK:
对算法有独到想法的软件开发者需要一种能匹配他们这种想法的语言,使他们能有效的将这些想法转化成能工作的代码。
不同的思考过程导向不同的结构。
RM:
计算机行业当前最主要的问题有哪些?
DK:
呃,我只是个写编程的学者,我从来都不明白工业或经济是怎么运转的。
RM:
你喜欢自由或秩序吗?你更倾向一种方法做一样事,还是有一千种方法达成同一目的?
DK:
(a)自由和秩序我都喜欢。(b)我想也许我倾向于三种方法吧,各具不同的特点,当中任一种都具备将自己变成其他两种的知识。
2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务