《伟大的计算原理》一第1章 Great Principles of Computing 作为科学的计算

简介:
   本节书摘来自华章出版社《伟大的计算原理》一书中的第1章,第1.1节,作者[美]彼得 J. 丹宁(Peter J. Denning)克雷格 H. 马特尔(Craig H. Martell),更多章节内容可以访问云栖社区“华章计算机”公众号查看。


第1章

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%的电能。

99cdfa43679a9967e556c24e007fbb062500c9a5

图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年,“计算”这个词已经成为引用这些领域的标准术语。

52846c18c3a4b9f3cd7122560f40c906bc5e0cef

图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)。

7c6eae9954d60420d1719e4488d21b657c043537

图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的主控制面板。在那个时候,计算机指的是人,而计算就是这些人的专职工作;电子机器则被称为自动或电子计算机。程序设计的主要活动是在不同的插座之间进行接线(来源:宾夕法尼亚大学)

计算的范型

1962年之后的30年中,传统自然科学的研究者经常对“计算机科学”这个名字进行质疑。在计算机科学这个新兴领域中,他们可以很轻易地看到工程范型(系统设计与实现)和数学范型(定理证明),但是却很难看到太多的科学范型。此外,与Simon的辩解相反,这些研究者认为科学是一种关于自然世界的方法,而计算机则更像是一种人工制品。

dc4f446824147a76c643b07683987ad6f17ea3d6

 1.4 两位先驱者John Backus19242007,左图)和Grace Hopper19021992,右图)设计出了高级程序设计语言:通过编译器,高级程序设计语言可以被自动转换为机器代码。1957年,Backus领导的团队开发出了FORTRAN语言:一种面向数值计算的高级程序设计语言。1959年,Hopper领导的团队开发出了COBOL语言:一种面向商业计算的高级程序设计语言。这两种语言至今仍然被使用。这些发明使得类似ENIAC的接线式程序设计彻底失去了生存空间,并且极大地降低了计算领域的入门门槛。自此以后,人们已经发明了数千种的程序设计语言(来源:Wikipedia Creative Commons

这个领域的创立来自这三种不同的范型(工程范型、数学范型和科学范型)1。一些人认为计算是应用数学的一个分支,另一些人则认为计算是电子工程的一个分支,其他人则认为计算是面向计算的科学的一个分支。在第一个40年中,这个领域主要关注于工程:如何构造可靠的计算机及其网络以及如何开发复杂的计算机软件,吸引了几乎每一个人的注意力。到20世纪80年代,这些工程问题基本上已经得到了有效的解决;同时,在计算机网络、超级计算机、个人计算机的帮助下,计算开始向各个领域快速渗透。在20世纪80年代,计算机的能力已经变得异常强大,而那些具有远见卓识的科学家开始意识到计算机可以用来解决科学和工程中的重大挑战问题,并由此产生了“计算科学”的研究运动。许多国家的科学家共同参与到这一运动中,并最终使得美国国会在1991年通过了名为“高性能计算和通信”(High-Performance Computing and Communications,HPCC)的行动计划,该计划旨在探索采用计算方法解决科学和工程中的重大挑战。

01d950bfdc71227034ba84c392598c22aa3d1a45

图1.5 Allen Newell(1927—1992,左图)、Alan Perlis(1922—1990,中图)、Herb Simon(1916—2001,右图)认为计算是一种关于计算机周边各种现象的科学。1967年,他们认为,计算机科学是研究计算相关事物的一种必备科学,涉及计算机器、软件、智能、信息、系统设计、图形、解决实际问题的算法等众多方面。Simon则进一步认为,人工科学(即研究人造制品周边现象的科学)如同传统科学一样,也是一种科学(来源:Wikipedia Creative Commons)

目前,人们看起来已经形成了这样一种共识:计算是一种典型的科学和工程;而且,无论是科学还是工程自身,都不能有效刻画计算。那么,如何刻画计算,计算的范型是

什么?

从一开始,这个领域的领导者就一直被范型问题所困扰。从发展历程来看,目前已经出现了试图统一各种不同视角的三次浪潮。第一次浪潮,由Newell、Perlis、Simon三人(1967)领导,认为计算不同于所有其他科学领域,原因在于计算的研究对象是信息处理过程。Simon将计算称为人工科学(1969),其背后所基于的一个共识性观念是,计算不是一种自然过程。这一波浪潮的流行语是:“计算研究计算机周边的各种现象。”

第二次浪潮关注于程序设计,即如何进行算法设计,从而产生有用的信息处理过程。在20世纪70年代早期,两位计算领域的先驱者Edsger Dijkstra和Donald Knuth就强烈主张将算法分析作为计算的统一范型。这一波浪潮的流行语是:“计算机科学就是程序设计。”这种观点近来已经逐渐落没,因为这个领域的发展已经远远超过程序设计的范畴,同时也因为公众对于“程序员”这一概念的理解变得过于狭隘(仅仅是一个编写程序源代码的人)。

5b275504bd3500c3277bd927760509b6469f1a3c

图1.6 Donald Knuth(1938—今,左图)和Edsger Dijkstra(1930—2002,右图)认为程序设计是计算的核心。1970年左右,他们认为算法的设计与分析过程应该是计算机科学的核心关注点。对他们而言,一个程序设计专家就是一个计算机科学家。不幸的是,这种重要的观点在20世纪90年代后期不复存在,因为程序设计人员被官方定义为低层次的源代码编写者(来源:Wikipedia Creative Commons)

23a958227e2138a26ce6941bd1ac6d46b66fe13f

图1.7 计算机系统领域的先驱Bruce Arden(1927—今,左图),在COSERS项目中形成了“计算不仅仅是程序设计”的观点。在20世纪70年代末,他领导的团队将计算领域定义为一个对“什么可以被自动化”进行研究的领域。在当时,这种观点非常迎合公众对于机器人(如右图中出现在电影《星球大战》中的两个机器人)的好感。但这种观点并没有生存太长时间,因为在短短几年之后人们对科学的理解发生了重大的变化(来源:Wikipedia Creative Commons)

第三次浪潮则源于由Bruce Arden(1983)所领导的项目:Computer Science and Engineering Research Study(COSERS)。这是一个由美国国家科学基金在20世纪70年代资助的项目。该项目将计算定义为:对工程、科学和各种业务领域中的信息处理过程的自动化。这一波浪潮的流行语是:“计算就是信息处理过程的自动化。”虽然该项目的结题报告对很多深奥难懂的研究问题进行了浅显易懂的解释,但其核心观点并没有在大众中得到广泛传播。

c8093eae7cb5c5e2df20080855e245c1a66ecd09

图1.8 Tim Berners-Lee(1955—今)展示了一种不同于普遍将计算理解为“由一组机器构成的网络”的视角。1989年,他发明了万维网(World Wide Web):在万维网上,存储于机器中的信息之间相互链接,并且可以随着鼠标的点击从信息链的一端移动到另一端。他认为这种由信息链接形成的网络中蕴含了大量的新型计算行为,使得人们能够为信息赋予更多的含义(来源:Wikipedia Creative Commons)

这三次浪潮所具有的一个共同特点是将计算机作为核心关注点。始于20世纪80年代的计算科学运动则不再具有这样的特点:其认为,计算不仅仅是科学研究的工具,而更是一种进行科学思考和科学发现的崭新方法。计算科学的拥护者将计算视为帮助他们理解信息处理过程和算法控制能力的得力伙伴。

这种新视角的一个重要结果是:科学家开始意识到在自然界中也存在信息处理过程,并且也可以采用由基于计算机的人工信息处理所发展出来的方法对其进行研究。生物学是其中的一个典型代表:作为对认知科学家Douglas Hofstadter(1985)观点的一种呼应,诺贝尔奖获得者David Baltimore(2001)认为,生物学已经变为一种信息科学。David Bacon(2010)认为物理学也正在发生类似的变化:作为量子计算的支撑理论,量子力学也是一种信息科学。Erol Gelenbe(2011)列举出了一长串的科学领域,其主要研究对象都涉及自然界的信息处理。计算机科学的方法同样适用于自然界的信息处理。这一结论进一步巩固和强化了Herb Simon(1969)“计算机科学的确是科学”的观点。

最近,Paul Rosenbloom(2012)注意到了另外两点原因,使得“所有的计算都是人工过程”的观点变得愈发陈旧。第一,许多科学家开始认同,人也是全球生态系统的一部分,因此,人工制品也如同河狸筑造的水坝或蚂蚁构造的巢穴一样自然。第二,人类能够在任意粒度层次上修改自然过程的能力,极大地模糊了自然和人工的边界,例如干细胞克隆器官、有机生长的纳米机器以及转基因农作物等。

05f85f6e6076387285ca77f842cea86d7269b2c3

图1.9 两位诺贝尔奖获得者,物理学家Ken Wilson(1936—2013,左图)和生物学家David Baltimore(1938—今,右图)站在了计算科学的前沿:他们认为计算是一种进行科学思考和科学发现的崭新方法。20世纪80年代中期,Wilson指出科学中的一些重大挑战问题可以通过计算得到解决,并认为应当使用具有高度并行性的超级计算机来进行这些计算。20世纪90年代,Baltimore指出,生物学已经变成对细胞和所有生命过程中所蕴涵的信息处理过程进行研究的一门学科。计算机科学家一开始并不愿意参与其中,但却对计算科学表达了坚定的拥护,从而导致了计算领域中的一场科学复兴运动(来源:Wikipedia Creative Commons)

计算的重要原理

对计算这一概念的理解的逐渐成熟,使得我们能不断从新的视角去确定计算领域的内涵。直到20世纪90年代,计算领域中绝大多数的科学家对该领域的理解都会落实到其所包含的一组核心技术上,例如算法、数据结构、数字化方法、编程语言、操作系统、网络、数据库、图形图像、人工智能、软件工程等。这是对计算领域的一种深刻的技术型解释。本书对计算的理解则更加关注这些技术的能力和局限背后所隐藏的基本原理。

本书所给出的计算基本原理划分为6类:通信(communication)、计算(computation)、协作(coordination)、记忆(存储)(recollection)、评估(evaluation)、设计(design)(Denning 2003,Denning and Martell 2004)2(见图1.10)。这6类基本原理都关注如何通过操纵物质和能量来实现所期望的计算。表1.1对这6类基本原理分别进行了简要描述,并给出了与之对应的篇章。

表1.1 计算的重要原理

类  别     关注点  示  例     核心章节

通信     信息在不同位置之间的可靠传输   最小长度代码,错误修复代码,文件压缩,加密/解密 3,11

计算     可计算性     问题计算复杂性的分类,不可计算问题的特点  4,5,6

记忆     信息的表示、存放与读取 所有的存储系统具有层级结构。没有任何一个存储系统能够实现对不同存储信息的等时访问。局部性原理:所有的计算都会密集访问所依赖数据集中的一个子集 7,11

协作     有效地利用多个自主的计算实体   使得所有参与者具有相同知识的协议,能够消除不确定性结果的协议,或同步协议。选择不确定性原理   2,8,9

评估     度量系统是否表现出预期的计算行为  采用排队网络模型预测系统的吞吐量和响应时间。设计实验来测试算法和系统  9,10

设计     通过特定结构的软件系统实现可靠性  复杂系统可以被分解为一组交互的模块和虚拟机。模块之间可以形成层级结构  10

 

计算的内涵不仅仅是一种基本原理或是在此基础上形成的一些核心技术。计算的内涵还和各种实践领域紧密相关(见图1.11)。除了计算基本原理的知识之外,计算领域的专业人员还需要具备4种核心的实践能力:程序设计、系统思维、建模以及计算思维。实践能力是通过长期的经验积累而形成一种技巧。实践者的技巧可以被分为如下几类:初学者(beginner)、进阶初学者(advanced beginner)、初级资质者(competent)、熟练工(prof?icient)、专家(expert)。例如,一个入门级的程序员可能会主要关注语法和编译问题以及bug的查找问题;一个专家级的程序员则能够构建大型的软件系统,解决复杂的系统问题,或对下级程序员进行指导。基本原理和实践相互交织在一起。人们通过体现出高超技巧的行动将基本原理应用于实践中,而新的基本原理又会从大量的实践中逐渐浮现出来。

3f63f78672c9fac4ba77573cb43521141926b4ba 

图1.10 每一类基本原理反映了对计算的一种视角,即观察计算领域知识空间的一扇窗口。(对这6类基本原理的排列顺序并不反映它们之间的相对重要性。)同时,这6类基本原理也不是完全不相交的。例如,互联网既可以从通信系统的角度理解,也可以从协作系统或记忆系统的角度理解。大多数计算技术都涉及对这6类基本原理的不同组合:每一类基本原理在这种组合中具有不同的权重,但每一类基本原理都确实存在。这些基本原理类别表现了人们对计算的某种认知视角。一些人认为计算仅仅就是计算,其他人则认为计算是数据、网络化的协作或者自动化系统。这种划分框架能够在某种程度上扩展人们对计算本质的认识

cd446333879ea19fb454f1a230dfb1e3f45f4ce2


图1.11 计算领域的发展建立在基本原理和实践两者的共同作用下。核心技术是被实践者在各种计算领域中广泛应用的工具。本书主要关注基本原理及其在若干关键领域的使用,而不涉及核心技术及其在实践中的应用。基本原理或者是一种机理——定律和重复出现的事物,或者是一种设计智慧——通过不断的积累形成的关于方法可行性的知识,从而使得构造可信、可靠、可用、安全的计算系统成为可能

计算的技术人员及其客户形成的社区称为计算领域。现实中存在数量众多的计算领域。ACM(the Association for Computing Machinery)给出了其成员所关注的至少42种专业领域(Denning 2001,2011),而更多的计算领域则被冠名以“计算应用”(computing applications)。下一章将简要介绍目前受到高度关注的4个计算领域:信息安全、人工智能、云计算以及大数据。

大多数计算领域与计算之外的其他领域相关。在一篇关于计算与物理学、生命科学、社会学三个科学领域相互关系的论文中,Paul Rosenbloom发现了两种类型的关系:实现(implementation)和影响(influence)(Rosenbloom 2004,Denning和Rosenbloom 2009,Rosenbloom 2012)。实现指一个领域中的事物被用于构造另一个领域中的事物。影响指一个领域中的事物影响了另一个领域中事物的行为。这两种关系可以是单向或双向的。Rosenbloom通过一张表(表1.2)来说明计算与物理学、生命科学、社会学以及自身之间可能存在的丰富关系。其中计算与其自身的关系是因为通过不同计算领域之间的交互,计算会不断地实现或影响自身。

表1.2 计算与不同领域之间的交互示例

      物理学  社会学  生命科学     计  算

计算被实现  机械、光、电子、量子、化学过程     机械机器人、人类的认知、具有输入和输出的游戏 基因、神经、免疫系统、DNA转录、演化计算  编译器、操作系统、模拟器、抽象、过程

计算实现     建模、模拟、数据库、数据系统、量子密码学、3D打印     人工智能、认知建模、自主系统   人工生命、仿生、系统生物学    体系结构、语言

计算被影响  传感器、扫描仪、计算机视觉、文本识别  学习、程序设计、用户建模、授权、语音理解  眼睛、手势、表达、运动追踪、生物传感器      网络、信息保护与安全、并行计算

计算影响     运动、制造、操纵、开环控制      屏幕、打印机、图像、语音生成、网络科学     生物效应、触觉、感觉沉浸  分布式系统、网格

双向影响     机器人、闭环控制    人机交互、游戏 脑-机接口   

 

计算在科学中的位置

由于计算对科学存在广泛的影响,且所有其他科学领域都不直接与信息相关,所以Rosenbloom得出的结论是计算可以被认为是一种全新的科学领域。

计算领域对于信息处理的独特性是什么?信息在传统上指的是那些一旦被传播就会产生知识增加的事实。信息是一个古老的概念,哲学、数学、商业、人文学科、科学已经对信息进行了几个世纪的研究。科学关注于发现事实,通过事实形成模型,使用模型做出预测,并将有效的预测模型转变为技术。科学家则将所有学习到的东西组织成“科学知识体系”。显然,信息在各种科学领域中都具有非常重要的角色。

与其他科学领域与信息的关系相比,计算领域与信息的关系体现出两个显著不同的特点。首先,计算领域强调对信息的变换,而不仅仅是对信息的发现、分类、存储或通信。算法不仅仅读取具有特定结构的信息,还会进一步修改信息的结构。进一步而言,人类也在不断地修改信息的结构(例如在互联网上),只不过我们还不知道人类对信息进行变换的计算模型是什么。纯粹的解析方法并不能帮助我们理解信息结构发生变化的动态机理。实验方法对于这一问题也缺乏有效的解决方案。

第二,计算不仅仅是描述性的,而更是生成式的。算法不仅仅描述了解决一个问题的方法,也会使得一台计算机去真正地解决这个问题。计算科学是唯一的对信息与活动之间的因果关系如此强调的一个领域。其他科学领域对信息则没有这样的视角。计算及其结果对各个科学领域产生了深远的影响。计算绝不仅仅是物理学、生命科学或社会学的一个子集。计算有资格成为一个独立的科学领域。

本书的关注点

计算已经得到了长足的发展,覆盖了非常丰富的研究内容,因此不可能在一本书中对计算进行一个完整的综述。有三本书可以被认为是“计算机科学百科全书”(Ralston 2003,Abrams 2011,Henderson 2008),这三本书的厚度分别是2030页、770页和580页,这些书通过一系列的文章来对计算进行综述。在本书中,我们不试图对计算的研究内容给出一个全面的覆盖;相反,我们只会给出一组具有代表性的关于计算的重要原理。

这些代表性的重要原理被划分为9章:信息、机器、程序设计、计算、存储、并行、排队、设计以及网络(第3~11章)。前文所提及的计算的6个领域,每一个领域至少对应一章(见表1.1)。我们期望本书的内容能够提供一种具有一定广度和深度的系统性视角,去理解计算所包含的不同内容。

第1章主要介绍计算的发展历史和基本结构,以及计算与其他领域的关系。第2章主要介绍计算的不同子领域如何从计算的基本原理中汲取知识,信息安全、人工智能、云计算以及大数据是典型代表。

第3章关注信息的本质,在信息之上计算机所能展现出的能力,以及计算机如何向其用户提供有意义的信息。第4章探讨计算机的构造技术,使得编写的程序能够控制电子线路去执行人类期望的计算。第5章关注程序设计,针对特定的问题设计相应的计算解决方案的技巧,以及如何将程序转换为等价的机器代码。

第6章关注计算自身:一些问题能被快速算法求解,一些问题能被速度较慢的算法求解,而还有一些问题根本无法被计算机求解。第7章关注存储,即如何实现有效地信息存储与读取。

第8章探讨并行:通过一组相互协作的计算机并行工作,提高问题求解的速度。第9章关注队列:在服务器集群为大规模并发请求提供服务时,一种预测系统吞吐量和响应时间的方法。

第10章关注设计:如何规划和组织可靠、可用、安全的计算系统。第11章以互联网为实例展示如何利用各种基本原理构造一个可靠的大规模数据通信网络。

本书的最后附上了参考文献目录,其中包含了一些给我们带来启发的代表性文献(不是对历史文献的完整性总结)。如果你在本书中发现了一个人名,那么你会在参考文献目录中至少发现一篇以此人为作者的文献。

总结

计算正在变得愈发成熟,展示出其在科学、工程和数学等方面的优良特性。计算的科学本质对于该领域的发展具有至关重要的作用:很多系统过于复杂以至于只能借助于试验方法对其进行研究。计算的覆盖范围相当广泛,包括各种自然或人工的信息处理过程。

本书揭示了所有计算过程所基于的一组基本原理。这些基本原理为众多计算领域以及物理学、生命科学以及社会学中的众多子领域提供了理论基础。

计算不是物理学、生命科学或社会学的一个子集。这些科学领域并不关注信息处理与变换的本质是什么。这种关注在所有其他科学领域中都不具有基础性地位。因此,计算有资格成为一个独立且重要的科学领域。

致谢

本章改编自“Great Principles of Computing”(Peter J. Denning,American Scientist 98(Sep–Oct 2010),369–372)。重新发表在《Best Writings on Mathematics 2010》(Mircea Pitici,Princeton University Press(2011))。本章内容的使用得到了《美国科学家》杂志的授权。

 

 

相关文章
|
8月前
HDLBits: 在线学习Verilog(Problem 120-126)
HDLBits: 在线学习Verilog(Problem 120-126)
57 0
|
11月前
|
机器学习/深度学习 数据可视化 数据挖掘
跟着Nature Communications学数据分析:R语言做随机森林模型并对变量重要性排序
跟着Nature Communications学数据分析:R语言做随机森林模型并对变量重要性排序
|
搜索推荐 算法
十六、推荐系统(Recommender systems)
十六、推荐系统(Recommender systems)
十六、推荐系统(Recommender systems)
|
算法 搜索推荐
周志华《Machine Learning》学习笔记(2)--性能度量
本篇主要是对第二章剩余知识的理解,包括:性能度量、比较检验和偏差与方差。
89 0
周志华《Machine Learning》学习笔记(2)--性能度量
|
机器学习/深度学习 算法 数据挖掘
周志华《Machine Learning》学习笔记(14)--计算学习理论
计算学习理论(computational learning theory)是通过“计算”来研究机器学习的理论
135 0
周志华《Machine Learning》学习笔记(14)--计算学习理论
practice3-基础算法3
快速学习practice3-基础算法3
practice2-基础算法2
快速学习practice2-基础算法2
practice2-基础算法2
|
算法 Java C语言
practice1-基础算法
快速学习practice1-基础算法
|
网络架构 Java Go
带你读《计算机体系结构:量化研究方法(英文版·原书第6版)》之一:Fundamentals of Quantitative Design and Analysis
本书堪称计算机系统结构学科的“圣经”,是计算机设计领域学生和实践者的必读经典。本书系统地介绍了计算机系统的设计基础、存储器层次结构设计、指令级并行及其开发、数据级并行、GPU体系结构、线程级并行和仓库级计算机等。本书内容丰富,既介绍了当今计算机体系结构的研究成果,也引述了许多计算机系统设计开发方面的实践经验。另外,各章结尾还附有大量的习题和参考文献。