Algorithm 版 (精华区)

发信人: ssos (存在与虚无·守拙), 信区: Algorithm
标  题: 1972:图灵奖辞(5)
发信站: 哈工大紫丁香 (2003年02月22日10:17:25 星期六), 站内信件

现在是第三个条件:它在技术上可行吗?我认为是可能行的,我将给六个论点来支持这个

看法。

程序结构的研究表明,程序--即使是为同一任务而编写并使用同样数学内容的替代程序--

-它们的智力易管理性(intellectual manageability)可能千差万别。已经发现了一些规律

,违反它们将会重创或完全破坏智力易管理性。那些规律分两类:第一类能容易机械地应

用。即,恰当选择程序设计语言。例如,不用goto语句,不用超过一个输出参数的子程序

。第二种规律,我至少----但那可能是因为我这方面力的能力不够----没法看出能机械地

应用,因为它似乎需要某种自动定理证明机,对此我没有现成的证明。因此,在目前也许

是永远,第二种规律自身表现为对程序员的基本自律要求。我所记得的某些规律非常明了

,它们能被传授,不可能会产生某个给定程序违反了还是没有的疑问。比如,要求如果不

能证明中止循环能够终止,或者不声明那些不变量不可因重复语句执行而遭破坏,就不应

该写loop循环。

我现在建议限制在智力可管理的程序的设计和实现上。如果有人害怕这种限定太强以致于

我们日子没法过了,我可以向他保证:智力可管理程序的分类依然足够丰富,能含盖为任

何算法上可解的问题而编写的众多非常现实的程序。我们别忘了,写程序不是我们的职责

。我们的任务是设计多种计算种类(class),它们能表现出我们所需的行为。建议把我们限

定到智力可管理程序上,是我所提出的六个论点中前两个论点的基础。

论点一是,因为程序员只需考虑智力可管理的程序,在可替代中进行选择就会容易得多。


论点二是,一旦我们已经决定把我们自己限定到智力可管理程序的子集上,一劳永逸地,

我们大大简化了需要考虑的解答空间。这个论点和论点一不同。

论点三是基于对程序正确性问题采用的建设性方法。现在,常规技术是编完程序,然后测

试它。但是,程序测试虽然是很有效的发现错误的方法,但它在证明没有错误方面却无能

为力。大大提高对程序的信心水平之唯一有效的方法是给出它的正确性的可信证明。但是

人们不能先写出程序然后证明它的正确性,因为到那时要求提供证明将只能增加可怜的程

序员们的负担。恰恰相反,程序员们应该让正确性证明和编程齐头并进。论点三实际上是

基于以下观察。如果一个人问自己可信的证明的结构该是怎样的,找到之后,接下来构造

出一个满足这个证明要求的问题,那么,对正确性的思考就成了一个非常有效的启发式指

导。根据定义,这个方法仅仅适用于当我们限定在智力可管理的程序上时,但它提供给我

们从中找出满意答案的有效手段。

论点四是关于编程所需得脑力劳动量取决于程序的长度。有提议说,有某种自然法则告诉

我们,所需脑力劳动的量以程序长度的平方增长。但,谢天谢地,没人证出这个法则。这

是因为那不一定是对的。我们都知道,用非常有限的推理能囊括千百万实例的唯一智力工

具叫“抽象”。因此,一个合格程序员的最重要的活动应该是有效地开发抽象能力。在这

点上值得指出的是,抽象的目的不是为了含糊,而是为了创造一个新的语义水平,在其中

,它毫无疑问是精确的。当然,我尝试过寻找防碍我们的抽象机制达到足够有效的根本原

因。但是不管我多努力的尝试,我没有找到这个原因。因此,我倾向于这个假设----它直

到现在没被经验证伪---适度的应用我们的抽象能力,构思和理解一个程序所需用的脑力最

多和程序长度的增长成正比。这些调查的一个副产品可能具有  更大的实践重要性,而且

,实际上,是我第四个论点的基础。副产品确认了一些抽象的模式,它们在编程的整个过

程中扮演至关重要的角色。关于那些抽象模式,我们已经知道了很多,你们可以就每一个

做一个专题讲座。。。那些抽象模式熟悉和自觉的知识。。。   启迪了我,当我意识到,

如果15年前它们就已成为常识的话,举个例子,从BNF到语法导向编译器的那一步就只需要

几分钟而不是几年。因此,我把我们关于关键抽象模式的最新知识做为第四个论点。

现在是第五个论点。它牵扯到我们试图使用的这种工具对我们自身思维习惯的影响。我观

察到一种文化传统,最可能的植根于文艺复兴时期,那就是忽视这种影响,认为人类思维

是能够自治的,是其它人工物至高无上的主宰。但是,如果我开始分析自己及我人类同类

们的思维习惯,我得出,不管我喜欢还是不喜欢,一个完全不同的结论。即,我们想利用

的工具和我们用以表达或记录思想的语言或符号,是决定所我们能思考或表达的主要因素

!分析程序语言对用户思维习惯的影响,以及当今认识到脑力是我们迄今为止最紧缺的资

源,它们合在一起给我们比较不同程序语言优劣的新的标尺。一个称职的程序员完全明白

自己头脑的局限,因此,他极度谦卑地接手编程任务,并且对耍小聪明玩技巧避之如同瘟

疫。在以一个著名的颇具争议的程序语言为例,我被各方面告之,一旦编程界为之装备了

哪怕一台终端,一种奇特的现象就会发生,这种现象甚至有了一个众所周知的名字“一行

的程序” (one-liners)。它有一两种不同的形式:一个程序员把仅有一行的程序放在另一

个程序员的桌面上,要么他自豪的讲述它做些什么并且加上个问题:“你能用能少的符号

来编它吗?” 好象这多么有关似的!--- 要么他只是说,“猜猜看它能做什么!” 从这

个观察中,我们必须下结论说,这种作为工具的语言鼓励耍聪明的技巧。而正是这点也许

能解释一些为什么它受人,即,受那些喜欢显示他们多聪明的人的欢迎。很抱歉,但我必

须说,这恰恰是说起一门程序语言所最令人诅咒的事情之一。从不远的过去中我们所能学

到的另一个教训是,开发“更丰富” ,“更强大” 的程序语言是个错误,那些花里胡哨

的畸形,那些特性的堆砌,不论是在机械上还是在脑力上都难以管理。我认为那些非常系

统化,非常温和的设计语言的前景远大。当我说“温和” 时,我指的是,例如,不仅是A

LGOL 60的for语句,就连FORTRAN的 DO循环都会发现自己太花里胡哨而被摈弃。我曾经对

非常有经验的志愿者们进行了一个小小的程序测验,但是一些大大意想不到的事情发生了

。我的那些志愿者们没有一个能发现那个明显的最优美的解答方案。仔细分析,原来有共

同的原因:他们关于循环的观念是如此紧密的和一个与之相关需要步进的受控变量联系在

一起,以至于他们大脑被禁锢住了而看不到很显然的东西。他们的解答效率低,没必要的

难懂,并且用了很长的时间来寻求这些解答。对我来说,这是个有启迪的,但又是让人震

惊的试验。最后,一方面,人们希望明天的程序语言和我们现在的大大不同;为了在概念

上对付那些复杂的设计我们写下了种种抽象,在更大程度上,它们应该比现在更能引发我

们对抽象结构进行反思。我们更合适的未来工具就说到这里,这是第五个论点的基础。



插上一句,我想对一些人提出警告。他们通过现有的并不合适的工具的缺陷来确定程序设

计中的困难所在。因此他们可能会得出结论说,一旦我们的工具更合适了,编程就不再成

问题。编程仍将是非常困难,因为一旦我们从环境的羁绊中解放了自己,我们将会去解决

超过我们现在编程能力的难题。

你可以争论我的第六个论点,因为难以找到支持它的试验,但这个事实不能妨碍我相信它

是正确的。到现在为止,我还没有提到“层次级” 这个词,但我认为,可以公正的说,对

所有体现某种精心分解过的解答的系统来说,这是个关键的概念。我甚至可以进一步,从

中得出一种理念,即,我们所能圆满解决的问题都是那些最终能精细分解开的解答。乍一

看,这种关于人类局限的看法令人震惊,作为对我们尴尬的处境的一种悲观看法。但我不

是这么感觉的。相反,和我们的局限性相处的最好方法是了解它们。目前我们足够谦虚,

只想分解解答,因为其他努力是我们智力所不能及的。我们应该尽全力防止那些接口妨害

我们有效分解系统的能力。而且我情不自禁的期望,这将会一而再地带来发现,原来不了

解的问题能终于被分解开了。编译过程产生的大多数被称为“代码生成”的麻烦能追溯到

order code的一些可笑特性,所以见识这个过的人将知道我所想的一类问题中的一个小例

子。更广泛地应用精细分解这个解决方案,这是我第六个也是最后一个论点,来论证十年

内将发生的革命的技术可行性。


原则上,我让你自己决定你该在多大程度上相信我的思考,要知道我不能强迫任何人分担

我的信念。在每次严肃的革命中,它将会引起强烈的反对,你可以问自己,保守势力将在

何处抵抗这种发展。我不期望它们主要在大产业中,甚至也不在计算机业。我更期望它们

在为当代培养人才的教育机构中,在那一群保守的计算机用户中,他们认为他们的老程序

是这么重要,再重写和修改划不来。在这里很难过地看到,在很多大学,选择中心计算系

统往往取决于少数现有的昂贵的应用程序,而不管有几千名需要自己写程序的“小用户们

”将会为这样的选择吃尽苦头。例如,经常是,高能物理好像是在用它现存实验设备的价

格来勒索科学界。最容易的回答是,当然,是断然否认技术可行性,但我担心你为此需要

相当强的论据。说当今普通程序员的智力极限将会阻止革命发生,这个说法也不会让人信

服。在其它人编程如此高效的情况下,他很有可能迟早会被挤走的。

可能也会有政治阻力。即使我们知道如何培养明天的职业程序员,也不能确信我们现在生

活的社会将允许我们这样做。教授一个方法的效果---不是传播知识---而是使强者更强,

因此加大了智力上的差别。在一个教育系统作为建立同一文化的手段的社会,在一个枪打

出头鸟的社会,培养合格的程序员可能不合政治口味。

让我总结一下:自动计算机已经和我们一起渡过了四分之一个世纪。作为工具,它对我们

的社会产生了重大的影响。但计算机之作为工具,它的影响只不过在文化表层掀起了一波

微澜;对比起来, 计算机之作为一种智力挑战,所具有的文化影响要深远得多的多,这在

人类文化历史上是史无前例的。多层次的系统似乎具有这样的特性,某些东西在一个级别

上被认为是不可分的实体,而在低一个更细的级别上被看成复合体;因此,当我们把注意

力从一个级别转向下一个更底的级别时,可适用于各个级别的空间或时间的自然组成就会

减少一个数量级。我们靠砖来了解墙,靠晶体来了解砖,靠分子来了解晶体,等等。因此

,在层次体系中可以被有意义的划分的层次的数目和最大和最小构成之比的对数成正比,

因此,除非这个比值非常大,我们不期望能有很多层次。在计算机编程中,与我们基本的

构件相关联的是小于一个微秒的时间段,但我们的程序可能花费数小时的计算时间。我不

知道有其他任何技术能含盖1010或者更高的比值。计算机,凭借它惊人的速度,应该是第

一次给我们提供了这样的环境。在那里,高度层次化的人造物既是可能的,也是必要的。

这个挑战,即编程任务,是如此的特别,这种全新的体验能教给我们了解关于自身的很多

东西。它应当能加深我们对设计和创造过程的理解;它应当能让我们对自己思维组织进行

更好的控制;如果它没能这么做,按我的个人口味来说,我们根本就不配有计算机!

它已经给我们了若干教训,而我选出来要强调的一个是:我们将会更好的编程,倘若我们

能着手这任务时能完全地欣赏到它的艰巨性;倘若我们能坚持“温和” 而优雅的程序设计

语言,倘若我们能尊重人类头脑固有的局限性,并且在着手这项任务时,作个非常谦卑的

程序员。

(全文完) 
--

   
<<社会契约论>>是一本好书,应当多读几遍
风味的肘子味道不错,我还想再吃它      

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.230.220]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.122毫秒