天天看点

《伟大的计算原理》一第1章

本节书摘来华章计算机《伟大的计算原理》一书中的第1章 ,[美]彼得 j. 丹宁(peter j. denning)

克雷格 h. 马特尔(craig h. martell)著 罗英伟 高良才 张 伟 熊瑞勤 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

great principles of computing

计算机科学研究计算机周边的各种现象。

——newell,simon和perlis

计算机之于计算机科学,正如望远镜之于天文学。

——edsger w. dijkstra

计算与科学密不可分:计算不仅仅是一种数据分析的工具,更是一种用于思考和发现的方法。

这种观点的形成并得到广泛认同经历了曲折的过程。计算是一门相对年轻的学科,其作为一个学术研究领域确立于20世纪30年代,确立的主要标志是由kurt g?del(1934)、alonzo church(1936)、emil post(1936)、alan turing(1936)等人所发表的一组重要论文。这些研究者敏锐地意识到了自动计算的重要性,为“计算”这个概念奠定了必要的数学基础,并探讨了实现自动计算的不同模型。但人们很快就发现,这些看似不同的计算模型实际上是等价的,即由一种模型所描述的计算过程总能够被其他模型所描述。而更为值得关注的是,这些不同的计算模型都指向了一个共同的结论:某些具有现实意义的问题(例如一个算法是否能够终止)并不能通过计算的方式进行求解。

在这些研究者所处的时代,“计算”和“计算机”这两个术语已经得到了广泛的使用。那时,计算指的是求解数学函数的机械步骤,计算机则指的是执行计算的人。作为对这些研究者所开创的崭新领域的致敬,第一代数字计算机的设计者通常会将其所构造的系统命名为一个带有后缀字符串“ac”的名字,其含义为自动计算机(automatic computer)或类似的变体。这些名字的典型代表包括eniac、univac、edvac、edsac等。

在第二次世界大战的初期,美、英两国的军方开始对自动计算机产生兴趣,他们想使用自动计算机进行弹道计算和密码破译。为此,他们资助了若干项目进行电子计算机的设计与实现。在二战结束前,只有一个项目顺利完成。这是一个设在英国布莱切利公园的绝密项目。这个项目使用由阿兰·图灵设计的方法成功破译了德军使用的enigma密码系统。

在20世纪50年代初,很多参与这些项目的研究人员开始创办计算机公司。20世纪50年代末,大学也开始进行计算机领域的研究项目。从此以后,计算机领域的学术研究和工业实践开始持续地增长,直到我们目前所看到的一个现代化的庞然大物。这个庞然大物包含了海量的互联网连接和数不清的数据中心,据说消耗了全世界所生产的3%的电能。

《伟大的计算原理》一第1章

图1.1 查理斯·巴贝奇(charles babbage,1791—1871,左图)发明了差分机,一种机械式的算术运算机器。后来,他提出了分析机的设计方案:该方案如果能够实现,则有望成为一种通用计算机。ada lovelace(1815—1852,右图)帮助charles babbage完成了分析机的设计。lovelace的视野不仅仅局限在数字计算上,而是扩展到了谱曲、绘画,甚至逻辑推理等领域。在1843年,她编写了一段能够使用分析机计算伯努利数列的程序。她也因此被称为世界上“第一个计算机程序员”(来源:wikipedia creative commons)

在其青年时期,计算对于已有的科学和工程领域而言,是一种难以被理解的新兴事物。对于不同的观察者而言,第一眼看上去,计算像是一种对数学、电子工程或其他科学领域的技术应用(译者注:即,计算来源于这些领域,没有这些领域,计算就如同无源之水)。经过多年的发展以后,计算似乎又为人们提供了无数的深刻见解,打破了人们对计算的早期理解,即计算不可能成为一个独立的领域,而必将被其来源领域所重新吸纳。到1980年,计算领域对于算法、数据结构、数值方法、编程语言、操作系统、网络、数据库、图形图像、人工智能、软件工程等方面已经具备了相当成熟的理解。计算领域的伟大技术成就——芯片、个人计算机、互联网——将计算带入了更加丰富多彩的境界,并促成了更多新兴子领域的产生,包括网络科学、web科学、移动计算、企业计算、协同工作、网络安全、用户界面设计、信息可视化等。由此产生的大规模商业化应用为社交网络、演化计算、音乐、视频、数字化摄影、视觉、大规模多用户在线游戏、用户生成内容(user-generated content)以及其他领域带来了全新的研究挑战。

为了适应这种持续的变化,计算领域的名称在历史上已经发生了数次变化。在20世纪40年代,这个领域被称为自动计算。在20世纪50年代则被称为信息处理。在20世纪60年代,其进入了学术界,那时,美国人将其称为计算机科学,欧洲人则称其为信息学。到20世纪80年代,计算领域已经包含了一组具有复杂相关性的子领域,包括计算机科学、信息学、计算科学、计算机工程、软件工程、信息系统、信息技术等。到1990年,“计算”这个词已经成为引用这些领域的标准术语。

《伟大的计算原理》一第1章

图1.2 阿兰·图灵(alan turing,1912—1954)认为计算就是对数学函数的求解。1936年,他设计出一种后来被称为图灵机(turing machine)的抽象计算机器。这个机器由一条无限长的纸带和一个可沿该纸带左右移动的有限状态控制器构成。纸带上包含了无限个左右排列的方格,每个方格里可以存放来自特定符号集合的一个符号。控制器每次可以向左或向右移动一个方格。在每一次移动前,控制器读取当前方格内存储的符号,并有可能在当前方格中写入新的符号,然后向左或向右移动一个方格,从而进入一个新的控制状态。图灵展示了如何构造一个统一的计算机器对任何计算过程进行自动执行。图灵认为,任何具有可计算性的函数都可以被一个具体的图灵机自动计算。图灵也发现存在一些不可计算的函数,例如:确定一个具体的图灵机是否会停机或陷入无限循环(来源:wikipedia creative commons)

计算机科学作为一个正式的学术领域确立于1962年:这一年,美国的普渡和斯坦福两所大学成立了计算机科学系。在当时,这个领域的领导者不仅需要时刻向人们解释这个领域到底是做什么的,还需要不断抵御来自保守评论家的苛责。这些评论家认为,排除电子工程和数学的内容,计算机科学并无实质性的新东西。在1967年,allen newell、alan perlis、herbert simon对这种观点给出了如下回应:计算机科学是一门全方面研究“计算机周边现象”的科学。但是,许多传统的科学家则反对“这个领域是一门科学”的观点。他们认为,真正的科学关注于那些在自然(自然过程)中发生的现象,而计算机仅仅是一种人造物,不属于自然的范畴。诺贝尔经济学奖得主simon强烈反对这种对于科学的“自然解释”。为此,两年后,simon出版了一本名为《the sciences of the artif?icial》的书。在这本书中,simon指出:除了“以自然过程为研究对象”这条准则之外,经济学和计算机科学符合科学的其他所有既有准则,因此,称其为科学并无不妥。当然,为了区别于传统的自然科学(natural science),可以将这类科学称为人工或人造科学(artif?icial science)。

《伟大的计算原理》一第1章

图1.3 在babbage尝试构造一个可以实际运行的分析机的努力失败之后的80年内,没人再试图去设计通用的计算机器。在20世纪30年代末,美、英两国的军方开始尝试采用电子机器进行弹道计算和密码破译。1944年,美国军方资助的eniac计算机开始正式运转。这台计算机坐落在宾夕法尼亚大学。这个项目由john mauchly和j. presper eckert领导。eniac上的第一批程序员包括kay mcnulty、betty jennings、betty snyder、marlyn wescoff、fran bilas、ruth lichterman等人。这张图展示了jennings(左)和bilas(右)正在操控eniac的主控制面板。在那个时候,计算机指的是人,而计算就是这些人的专职工作;电子机器则被称为自动或电子计算机。程序设计的主要活动是在不同的插座之间进行接线(来源:宾夕法尼亚大学)

继续阅读