Algorithm 版 (精华区)
发信人: ssos (存在与虚无·守拙), 信区: Algorithm
标 题: 1974:图灵奖辞(2)
发信站: 哈工大紫丁香 (2003年02月22日10:07:32 星期六), 站内信件
Computer Programming as an Art
(作为艺术的计算机程序设计)
Donald E. Knuth
Stanford University
早在1959年 “美国计算机学会通报”(Communications of the ACM) 创办之初,学会编委
会就其刊行学报的目的描述如下:“如果计算机编程要想成为计算机研究和发展中的重要一
环,必须实现其从一门艺术到一门严肃科学的转变”。这个目标一直是接下的若干年来被
不断重申的主题。例如,我们读到1970年的“编程从艺术变为科学的首要几步”[26]。同
时,我们确实已经成功地将我们的学科造就成一门科学,并且靠一种相当简单的方式:仅
靠决定称之为“计算机科学”。
隐藏在那些言论之中的是一种观念,认为在被称之为“艺术”的人类活动领域有某种东西
不对劲;在它真正有成就之前,得必须成为一门科学才行。另一方面,我12余年来一直致
力
于“计算机编程的艺术”(The Art of Computer Programming)丛书。人们经常为我为什
么选用了这么个书名;事实上,某些人显然并不相信我确实取了这么个书名,因为我看到
过至少有一个参考书目上列的是所谓的“计算机编程的行为”(The Act of Computer Pr
ogramming)。
在本次讲演中,我将试着去解释为什么我认为“艺术”是个合适的字眼。我将讨论某种东
西作为一门艺术,比其作为一门科学,将意味着什么;而且我将阐述,对该学科恰当的观
点将帮助我们所有人提高我们当前从事的工作的质量。
被问及书名的事最初是在1966年,在上次南加州举行的ACM全国大会期间。那时丛书还没出
版,我记得是和一个朋友在会议宾馆共进午餐。他知道我是多么自负,在那时候就已这样
了,所以他问我能不能给书起名叫“Don Knuth 导论”(An Introduction to Don Knuth
)。我回答到,恰恰相反,我将用他的名字给书命名。他的名字是: Art Evans.{编者注}
从这个故事中,我们可以得出结论,“艺术”这个字不仅仅只有一个意思。事实上,这个
词最妙的一个地方是,它能用在很多语境中,而每一个都能和计算机编程很恰当的联系起
来。在准备本次演讲的时候,我去了图书馆查找历年来人们对“艺术”这个词都说了些什
么;在书库里留连忘返了几日后,我得出结论:“艺术”(Art)一定是英语语言中最有趣
的词之一。
=====================
昔日的艺术
=====================
如果我们追查到拉丁词根,我们发现 ars, artis 是“技能”的意思。相应的希腊词为 ,
是“科技”和“技术”。
当今,当人们说到“art”,你可能最先想到的是“美术”,例如绘画和雕塑。但在12世纪
以前,这个词通常用做相当不同的涵义。由于“art”的这种原意在很多成语中仍然有生命
力,特别是当我们把艺术和科学作对比的时候。我想接下来用几分钟讲一讲艺术(art)的经
典涵义。
在中世纪,最初的一批大学建成,讲授所谓的七种“文科”(liberal arts),即语法,修
辞,逻辑,算术,几何,音乐和天文。注意这和今天的文科院校的课程设置大相径庭,最
初的七门文科中至少有三门是计算机科学的重要组成。在那个时期,一门“art”指人的智
力构想出来的东西,它与源自自然或本能的行为相对应。“liberal”art是解放的或自由
的,与manual art,例如耕种,相对应。(参见 [6])。在中世纪,“art”一词本身通常指
逻辑,后者通常指研究三段论(演绎)。
=====================
科学对艺术
=====================
看起来,“科学”(Science)被用做和“艺术” (art)同义也有相当的年份;例如,人们也
有七种liberal sciences的说法,这个七种liberal arts是完全相同的。(参见[12, p.3
4f])。随着文明和学习的发展,两个词的涵义越来越独立,“科学”被用来代表知识,而
“艺术”代表知识的应用。因此,天文科学是航海艺术的基础。这种情况和我们现在区分
“科学”和“工程”几乎是一模一样的。
在19世纪有很多人论述艺术和科学的关系,我人为最好讨论来自John Stuart Mill。他在
1843年,说了以下一段话:[28]
几门科学通常会成为一门艺术所必要的基础。这是由于人类活动的复杂性,若想做成一件
事,通常需要了解 很多事情的本质和特性……艺术一般包含科学的真理,它们以最利于实
践的方式组织起来,而不是以最利于思考的方式。科学概括和组织真理,以让我们尽可能
地以一种角度观察到宇宙的普遍秩序。艺术 … 把天壤之别的科学领域的不同部份融合起
来,真理涉及多个不同并且异构的条件的积。而这些条件是人类现实生活中的危机所需的
每一个结果所必需的。(不知如何翻译,参见原文:the truths relating to the produc
tion of different and heterogeneous conditions necessary to each effect which
the exigencies of practical life require)
当我考究“艺术”涵义的时候,我发现至少两个世纪中,作者们一直在倡导艺术向科学转
变。例如,在一本写于1784年的矿物学教科书的前言中,是这样写的:“在1780年之前,
矿物学虽然被很多人接受地理解为一门艺术,但若视之为科学却是惊世骇俗。”
依照大多数字典,“科学”指能合乎逻辑地安置并可系统化为普遍“定律”的知识。科学
的优点是把我们从不要通过单个的事例来思考事情中拯救出来;我们能把思维转向更高层
次的概念上。正如John Ruskin在1853年写道:“科学的工作是用事实取代表象,用实证取
代印象”。
在我看来,如果我研究过的那些作者们今天仍在写作的话,他们也许同意以下的特征:科
学是我们已经如此透彻理解了的知识,因此我们可以把它教授给一台计算机;如果是我们
不能完全理解的东西,那就让艺术来对付它。因为一个算法概念或者一段计算机程序提供
给我们一种极其有用的手段,来测试我们关于某个给定科目知识的深度,因此,从艺术走
向科学的过程便意味着我们学会如何实现自动化。
人工智能已经取得了重要的进展,然而,在可预见的将来,在计算机所能做的和普通人所
能做的之间还存在巨大的鸿沟。人们在听,说,创造,甚至在编程时所具有的神奇的洞察
力依然超越了科学之所能及;我们所做的几乎所有的事情依然是艺术。
从这个观点来看,让计算机编程成为一种科学当然是很人们所希望的,而且从我演讲开头
引用的观点发表算起,我们在15年里确实走过了很长的一段路。十五年前,计算机编程非
常不被人理解,人们甚至没有想过要证明程序的正确性;我们只是一味鼓捣程序直到我们
“知道”它能运行了。那时,我们甚至不知道如何用任何一种严格的方式来表达一段程序
是正确的这个概念。只是在近年来,我们才学会编写程序及理解程序的抽象过程;而且,
即便很少有程序实际上能被完全严格地证明是正确的,这个编程的新知识现在正在实践中
取得很大的成效,因为我们开始理解程序结构的原理。要点是当我们今天编程时,我们知
道原则上我们能构建它们正确性的正规证明,如果我们确实想这样做的话,如今我们理解
了这种证明是如何表述出来的。比起过去直觉是正确性的唯一基础,这个科学基础让程序
显著地更为可靠。
“自动编程” 是当今人工智能研究的主要领域之一。它的支持者也许喜欢能够做个题为“
计算机编程是一种人工” 的讲座(Computer Programming as an Artifact)( 意思是编程
已成为昔日黄花) ,因为他们的目标是创造出仅仅给出问题规格说明书就能编写程序的机
器,而且编写的比我们更好。我个人的观点,并不认为这种目标能完全实现,但我的确认
为他们的研究极其重要,因为我们从编程中学到的每一点都帮助我们提高自身的艺术修养
。在这种意义上,我们应该继续努力,把每一种艺术转变成科学;在这个过程中,我们把
艺术向前推进。
--
<<社会契约论>>是一本好书,应当多读几遍
风味的肘子味道不错,我还想再吃它
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.230.220]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:6.909毫秒