计算机计算的原则

计算机技术是科学不可分割的一部分,它不仅仅是数据分析的工具,更是一种思考和探索的方式。

但不久之前可不是这样。计算机技术相对来说是个新学科。19世纪30年代,库尔特·哥德尔、阿隆佐·丘奇、波斯特和阿兰·图灵发表了一系列标志性的文章,从学术领域开始研究计算机计算。这些文章建立了定义计算的数学基础,并讨论了实现方案。他们清楚自动计算的重要性,寻求其精确的数学基础;他们各自提出了不同的计算实现方案,很快发现这些方案本质上是等价的,在其中一个方案下的运算也能在另一个方案内进行。更值得注意的是,他们的模型都得到了同样的结论:某些现实领域的函数不能通过计算机运算解决,例如一个求值的计算机算法最终是否能完成计算,或陷入死循环中。

在这些文章所处的年代,“计算”和“计算机”这样的表述经常使用,但和今天的涵义略有不同。当时“计算”意味着机器遵循步骤计算数学函数,而“计算机”是做运算的家伙。为了纪念先驱者们引发的社会变革,第一代数字计算机项目的系统命名时都被设计者加上了后缀“-AC”,这两个字母是“自动计算机”的缩写,例如埃尼阿克(ENIAC),尤尼法克(UNIVAC)和EDSAC。

随着二战的开始,英美军方开始对应用计算机计算感兴趣了,将其用于弹道计算、航海图计算和破译密码,并委派了多个设计和建造电子数字计算机的项目。最终只有一个项目在战争结束前完成,这个项目是布莱切利公园(英国的密码破译中心)的最高机密,它利用图灵设计的方法破译了德军的英格玛密码。

随后的50年代,许多该计划的曾经参与者都创立了自己的计算机公司;50年代晚期,大学也开始提供相应的课程。自此之后,计算机研究领域和相关产业逐渐成长为现代巨兽。今天,那些网络数据中心据说消耗了世界1/3的电力。

计算机技术刚刚兴起时,那时的科学界和工程界认为它不过是个难解的题目,仅仅是附属于数学、电力工程或科学的一门应用技术而已。然而多年之后,携卷着无数新思想的计算机技术却反过来吸收了这些基础学科,打破了早期的各种预言。到1980年时,计算机技术已经发展到包括算法、数据结构、数值方法、程序语言、操作系统、网络、数据库、图论、人工智能和软件工程等等领域;芯片、个人电脑、因特网等伟大的技术成就走入了无数人的生活中;一系列的新行业被激发,包括网络科学、万维网科学、移动计算、企业计算、协同工作、虚拟空间保护、用户交互界面设计和信息可视化等。商业应用也带来了新的研究挑战,尤其是在社交网络、无限进化计算、音乐、视频、数字照片、视觉、大型多人在线游戏、用户生成内容等等方面。

“计算机技术”一开始并不叫这个名字,而是随潮流变化了好几次。40年代人们把它称作“自动运算”,50年代改叫“信息处理”;60年代进入学术界后,它在美国被称作“计算机科学”,在欧洲是“信息学”。80年代,已经分化出一系列学科:计算机科学、信息学、计算科学、计算机工程、软件工程、信息系统和信息技术。1990年,“计算机技术”成为这些核心学科的标准名称。

计算机计算范式

传统科学家们总是质疑计算机“科学”之名,他们认为,在计算机领域可以轻易看到工程范式和数学范式,但看不到什么科学范式;前二者描述系统的设计与实施以及对理论的论证,后者则是以实验证明假设的体系。除此之外,“科学”被认为是处理自然世界的学科,而计算机太“人工”了。

事实上,计算机科学是在这三种范式上建立起来的。有人认为计算机计算是应用数学的分支,部分又属于电力工程,或面向计算的科学。刚起步的四十年间,计算机技术聚焦于工程学部分的发展,例如建造可靠计算机、可靠的网络和可靠的复杂软件,吓人的挑战使人们全身心投入。到80年代,工程学问题大多被解决,计算机技术开始在网络、超级电脑和个人电脑的帮助下传播开来。80年代的科幻作家已经能预见到强大的计算机技术将帮助攻克科学界和工程界最难的问题了——那些人类史上的“大挑战”。世界各地的科学家都参与了计算科学运动,最高潮发生在1991年,美国国会通过了《高性能计算和通讯法案》(HPCC Act)以支持计算科学对许多重要问题的研究。

今天,通常的认识是计算机技术例证了科学和工程,但反过来科学和工程并未塑造计算机技术。到底是什么塑造了这门技术?什么是计算机计算范式?

从一开始先锋者们就在为这个计算范式问题头疼。历史上总共有三波较统一的观点。1967年,第一波浪潮由艾伦·纽厄尔、艾伦·佩利和赫伯特·西蒙领导。他们认为计算机技术和当时其它科学都不同,它有着独特的信息处理过程。其中诺贝尔经济学奖获得者西蒙走得更远,他称计算机技术为“一项人工科学”。当时流行的说法是:“计算机技术就是研究围绕计算机的现象。”

第二波浪潮聚焦于编程,一门设计信息处理进程的算法的技术。在70年代早期,计算机技术的先驱者艾兹赫尔·戴克斯特拉和高纳德强烈支持将算法分析作为统一主题。“计算机科学等于编程”成为这次运动的标语。当今年代,这个观点逐渐沉寂,因为计算机技术的发展早已超越了编程;公众眼中的编程者仅仅是敲代码的人。

第三次浪潮起源于70年代晚期布鲁斯·阿登领导的计算机科学与工程研究,宣称“计算机技术是信息处理的自动化”。此次研究的最终报告揭示了计算机计算的科学属性,向外行解释了许多艰深问题;但除此之外,其核心观点并未流行开来。

这三种定义最突出的特点在于,将计算机视为关注的中心对象。80年代的计算科学运动开始破陈出新:计算机不只是科学工具,也是思考和探索科学的新方法。90年代晚期,以诺贝尔获得者大卫·巴尔的摩和认知科学家侯世达为代表的生物学界将生物学称作信息科学,认为DNA转录是自然信息处理过程,这标志着计算机本身已基本脱离关注核心。大量计算机科学家与生物学家合作,研究DNA信息处理的本质、探寻何种算法控制了这一处理过程。

感受一下生物学对计算范式作出的区分。首先,有些信息处理过程是自然界产生的;其次,我们不知道所有的自然信息处理是否都依据算法进行。第二点挑战了传统认知中将算法和编程置于计算机计算的核心,意味着信息处理比算法更基础更重要。

其它领域的科学家也得到了同样结论,包括研究量子运算和加密的物理学家、材料化学家、研究经济系统的经济学家和研究交际网络的社会学家,都声称在他们学科的深层结构中发现了信息处理过程。物理学家兼Mathematica软件的创始人史蒂芬·沃尔弗拉姆走得更远,认为信息处理蕴藏于宇宙间所有自然过程中。

于是我们看到,时兴的说法变成了:“计算机技术是关于自然和人工信息处理的学科”。计算机是研究的工具,而不是研究的对象。如同戴克斯特拉曾说的那样,“计算机相较于计算机技术,和望远镜相较于天文学差不多。”

“计算思维”的说法日益流行,指伴随着计算机计算得出的设计或探索思维方式。这个说法最初叫“算法思维”,由纽厄尔、佩利和西蒙在1960年提出,在八十年代被广泛认为是计算科学基本原理的一部分。“用计算的方式思考”意味着用信息流程的方式解决问题、寻求算法解答;不少诺贝尔奖都由这个强大的范式得出。

计算机计算的基本原则

我们对于计算机计算的解读日益成熟,对于这个领域的内容也有了新的认识。直到九十年代,大部分计算科学家依然会说计算机技术有关算法、数据结构、数学方法、编程语言、操作系统、网络、数据库、图论、人工智能和软件工程。这是对该领域的技术解读,科学的解释则需要侧重于授权和约束技术的基础原则。

为了实现这个目标,我的同事和我提出了计算机计算基本原则的框架,分为七部分:计算、通信、协调、回溯、评估和设计。

每个分类都是计算机计算的一个方面,也是了解计算机计算知识的一个窗口。分类并不互斥,例如,因特网可同时被视为通信系统、协调系统或存储系统。我们发现大部分计算机技术会涵盖七个类别的所有原则,虽然每个分类所占比例不同,但同时存在。

除了这些相对静止的原则之外,我们还要考虑计算机技术和其他领域的动态交互。科学现象通过两种方式相互影响:实现和作用。现存事物的组合通过产生行为来“实现”现象。因此,数字硬件从物质上实现了计算,人工智能实现人类思想,编译器通过机械码实现高级编程语言,氢和氧实现了水,氨基酸的复杂组合实现了生命。

“作用”发生于两种科学现象互动时。原子从质子、中子和电子间的相互作用力中产生,星系通过引力波互动,人类通过说话、触摸和计算机互动。互动既存在于领域间,也存在于领域内。例如,计算作用于物理动作(电路控制)、生命进程(DNA转录)和社会进程(有产出的博弈)。第二张表展示了计算分别和物理、生命、社会科学、计算内部的相互作用。毫无疑问,计算渗透了科学的所有领域。

信息进程是什么?

信息本身似乎就没有清晰的定义,从信息的角度定义计算有潜在的危险。信息论之父香农在1948年将信息定义为“通过信道传输的、有限数量必须回答的二元问题”。他刻意回避了比特模式的定义问题,这对定义信息至关重要。2010年,保罗·罗基浏览了各种出版物的定义,归纳出信息的定义必须涉及到客观部分(标志及其指向,或符号及其象征)和主观部分(意义)。我们怎么能从如此主观的基础上得出信息的科学定义呢?

生物学家在定义“生命”时也遇到了同样的难题。生命科学家罗伯特·哈森提到,生物学家并没有给“生命”明确定义,但对于有生命的实体有七个准则。可观察到的生命感受足以奠基生物科学,例如化学变化、能量和繁殖等。同样,我们可以将信息科学建立在可观察到的感受(标志及指向)上。

“表征”意味着代表某物的符号模式。表征和事物之间的联系可以记录在二维表或数据库中,也可以储存在人类记忆中。表征有两个重要方面:句法规则和语义结构。句法规则是构建模式的规则,它允许我们区分某些模式是否代表某物。语义结构是表征所指称的可度量的物理状态,通常是存在于媒体或信号中。将这二者放在一起,我们可以建造机器,检测有效的表征模式是否存在。

代表“计算函数的方法”的表征是“算法”。代表“值”的表征是“数据”。通过机器实现时,算法控制着输入数据表征到输出数据表征的转化;算法表征控制着数据表征的转化。算法表征和数据表征之间的区别微乎其微:编译器产生的可执行代码对于编译器来说是数据,对于运行代码的人来说是算法。

即使是简单的表征概念也会有深刻的影响。例如,如同蔡汀展示的那样,并没有一种算法来寻找某物最简单的可能表征。

有些科学家对观察到的信息处理进程是否真的被算法控制持开放态度。DNA转录可以被称为信息处理进程;如果有人发现了控制这个过程的算法,那它也可以被称为计算。

有些数学家定义计算时将其从实现中分离出来。他们将计算视为抽象语言表示的连续的逻辑指令。然而,为了描述可观察计算的运行时间,他们引入了成本概念——存储、检索或转化表征所耗费的时间或能量。许多真实世界的问题需要指数时间运算作为可实现表征的结果。我的同事和我更倾向于处理可实现表征,因为他们是科学转向计算的基础。

这些关于表征的概念足够给出满足我们需求的计算的定义了。信息处理进程就是一系列表征;物质世界中,它是持续进化和变化的表征。计算是一种信息处理过程,它在表征的控制下,依次处理序列中的元素;在物质世界中,我们会说表征控制着每一无穷小的时间和空间步骤。

计算的地位


计算,如同工程学一样,例证了正面科学。科学对于计算机计算的发展功不可没,因为许多系统太过复杂,以至于实验法是唯一可以探寻和理解其极限的方法。计算现在被视为研究自然和人工信息处理进程的广阔领域。

这个定义非常宽泛,包括了三个困扰计算科学家多年的问题。持续信息进程,例如通信系统或模拟电脑里的信号;互动进程,例如执行中的网络服务;自然处理进程,例如DNA转录;它们都看起来像计算,但不符合传统的算法定义。

基本原则框架揭示了所有计算基于的一系列规则。这些原则与物理、生命、社会科学领域以及计算本身互动。

计算并不是其它科学的子集。尽管信息处理对这些科学领域来说至关重要,但并没哪个领域从基础上关注信息处理和转化的本质。2009年,南加州大学的计算科学家保罗·罗森布罗姆说,计算是科学的新领域。他说对了。

译者: fainche 原作者:Peter J. Denning

感谢支持199IT
我们致力为中国互联网研究和咨询及IT行业数据专业人员和决策者提供一个数据共享平台。

要继续访问我们的网站,只需关闭您的广告拦截器并刷新页面。
滚动到顶部