编程就是一种艺术

来源:互联网 发布:大数据时代在线教育 编辑:程序博客网 时间:2024/04/27 23:35

唐纳德·克努特认为计算机既是一种科学,更是一种技术,他的一生几乎都花在了“艺术”上。

有评论认为《计算机程序设计的艺术》(The Art of Computer Programming)的作用与地位可与数学史上欧几里得的《几何学原理》相比。它的作者唐纳德·克努特 (Donald Ervin Knuth)因而荣获1974年度的图灵奖。

 

艺术与科学

如果回到拉丁的根源,可以找到ars、artis这些词,表示“技巧”。现在当人们谈起“艺术”时,大概首先会想到的是“美术艺术”,例如绘画和雕塑,但是在20世纪之前,一般来说,这个词是以十分不同的意义使用的。

中世纪时,成立了一些大学来讲授7门所谓的“文科”,即文法、修辞学、逻辑、算术、几何、音乐和天文学。这和今天的文学院的课程表十分不同,在7门课中至少有3门是计算机科学的重要组成。那时,一门“艺术”是指由人的智力设计出来的某种东西。它是相对于从自然或本性导出的活动的。在中世纪时,“艺术”本身通常指逻辑,它通常又指对三段论法研究。

在唐纳德·克努特看来,计算机程序设计现在既是一门科学,也是一门艺术,而这两方面彼此很好的相互补充。科学的方法一般是通过逻辑的、系统的、非个人的、冷静的、理性的这些词来表征的,而艺术的方法是通过艺术的、创新的、博爱的、渴望的、非理性的这些词来表征的。这两种看起来互相冲突的方法相对于计算机程序设计来说有很大价值。

唐纳德.克努特对《计算机程序设计的艺术》系列的写作,开始于他念博士期间,计划出七卷,第一卷《基本算法》于1968年出版,第二卷《半数字化算法》于1969年出版,第三卷《排序与搜索》于1973年出版,第四卷《组合算法》尚在写作之中。

当唐纳德·克努特谈及计算机程序设计作为一门艺术时,他主要认为它是一种艺术形式。作为教育家和作者,他的工作的主要目标是帮助人们编写漂亮的程序。“我的感觉是,当我编写一个程序时,它可能是像写诗或谱曲一样。”安德烈·埃夫曾说过,程序设计可以给我们智力和情感上的满足,因为它是掌握复杂性和建立一个一致的规则系统的实际成就。

有些程序是优雅的,有些是精巧的,有些是才华横溢的。他的断言是,有可能来写庄重的程序、高尚的程序、真正辉煌的程序。

当他同迈克尔·费希尔讨论这个问题时,他提议:如同艺术作品那样,计算机程序员应该开始出售自己的原始程序,给那些收藏家。

《计算机程序设计的艺术》系列以其内容的丰富和深刻而被喻为经典,有人甚至称之为“计算机的圣经”,它们被译为俄、日、西、萄、匈牙利、罗马尼亚等多种文字在世界各国广泛流传,其发行量创造了计算机类图书的最高记录,直至20世纪80年代中期,都一直保持着月销售量每卷达2000册的势头,成为Addison-Wesley 出版社成立以来销路最好的图书。

 

为了艺术改造排版技术

唐纳德·克努特对《计算机程序设计的艺术》系列的撰写可谓是前紧后松,为什么到了第四卷就有了长期停顿呢?原来,前三卷书出版以后,克努特觉得当时十分粗糙的排版水平已经影响到《计算机程序设计的艺术》的印刷质量。于是他决心对排版技术进行彻底改造,因此中止了《计算机程序设计的艺术》系列的编写。

他原本以为他只需要半年时间,在1978年下半年就能完成,但最终他用了8年时间,直到1985年TeX排版软件才最终停止修改。

TeX的第一版是用SAIL编程语言写成的,运行于PDP-10型计算机,操作系统是斯坦福大学的WAITS操作系统。在之后的TeX版本中,克努特发明了所谓的“文学编程”(literate programming),它是一种从同一源文件自动生成可编译的源代码和高质量的文档的编程方法。这种语言被称为WEB,它所生成的源代码是使用Pascal编程语言。

TeX的版本号码也十分有趣。从TeX第三版开始,之后的升级是在小数点后加入一个新数位,使之越来越接近圆周率/pi的值。TeX目前的版本是3.141592。这显示了TeX已经十分稳定,任何的升级都十分细微。克努特曾表示“‘(于我过世后的)绝对最后改变’为把版本数改为/pi,那时任何余下的漏洞都成程序的点缀了。”

TeX是非常稳定的程序,克努特悬赏奖励任何能够在TeX中发现程序漏洞(bug)的人。

每一个漏洞的奖励金额从1美分开始,并每年翻倍,直到目前的327.68美元封顶。然而克努特从未因此而损失大笔金钱,因为TeX中的漏洞少之又少,而真正发现漏洞的人在获得支票后,宁愿将其裱起来留作纪念也不愿拿去兑现。TeX的最后一个bug已经被克努特自己发现了。

在设计TeX的同时,克努特 还设计了一个字体生成程序MetaFont。MetaFont是独立于TeX之外的,但又与TeX有着非常密切的联系。MetaFont生成的只是位图字体,当对字体进行缩放时的效果不佳。

TEX排版软件和METAFONT字型设计软件花费了克努特整整9年的时间和精力。它们对整个西文印刷行业带来了革命性变革。但是这两个软件并没有为克努特和斯坦福大学赚过一分钱:克努特把它们作为自由软件无偿提供给用户。“我写这两个程序是出于对书籍的热爱,也想给这个领域以必要的推动。我已经有些名气了,我的书卖得也不错。所以我不需要为我出于热爱而做的事保留专卖权。此外,数学家通常是不为他们发现的定理获取报酬的”。

3卷本的《计算机程序设计的艺术》

唐纳德·克努特介绍

唐纳德·克努特是算法和程序设计技术的先驱者,是计算机排版系统TEX和METAFONT的发明者。他是斯坦福大学计算机程序设计艺术的荣誉退休教授。唐纳德.克努特获得了许多奖项和荣誉,包括美国计算机协会图灵奖(ACM Turing Award),美国前总统卡特授予的科学金奖(Medal of Science),美国数学学会斯蒂尔奖(AMS Steele Prize),以及1996年11月由于发明先进技术荣获的极受尊重的京都奖(KyotoPrize)。

克努特的著作很多,除了已由Addison-Wesley出版社出版的三卷The Art of Computer Programming(由管纪文、苏运霖等译成中文,国防工业出版社出版),介绍TEX和METAFONT的五卷《计算机与排版》(Computers and Typesetting)早已流传于世外,还有以下一些主要著作:

《超现实数》(Surreal Numbers,Addison-Wesley,1974);

《实用数学》(Concrete Mathematics,Addison-Wesley,1989);

《数学论著集》(Mathematical Writings, MAA,1989);

《用于算法分析的数学》(Mathematics for the Analysis of Algorithms,Birkhauser,1990,第三版);

《作文式程序设计》(Literate Programming,CSLI,1992);

《公理与外壳》(Axioms and Hulls,Springer,1992);

《斯坦福的GraphBase:组合计算用的平台》(The Stanford GraphBase: a Platform for Combinatorial Computing,ACM pr.,1993)。

其中,《超现实数》一书介绍了剑桥大学的康韦(J. H. Conway)所发明的一种新的数制,是克努特听了康韦向他作的介绍后,用了一周时间写成的小说体裁的作品。有评论家指出,这是历史上第一次一个重大的数学发现以小说的形式向公众进行介绍。由此可见,克努特的艺术才华同样是非凡的,要不是计算机深深吸引了他,克努特很可能会成为出色的小说家或音乐家。