计算的重要原理
对计算这一概念的理解的逐渐成熟,使得我们能不断从新的视角去确定计算领域的内涵。直到20世纪90年代,计算领域中绝大多数的科学家对该领域的理解都会落实到其所包含的一组核心技术上,例如算法、数据结构、数字化方法、编程语言、操作系统、网络、数据库、图形图像、人工智能、软件工程等。这是对计算领域的一种深刻的技术型解释。本书对计算的理解则更加关注这些技术的能力和局限背后所隐藏的基本原理。
本书所给出的计算基本原理划分为6类:通信(communication)、计算(computation)、协作(coordination)、记忆(存储)(recollection)、评估(evaluation)、设计(design)(Denning 2003,Denning and Martell 2004)2(见图1.10)。这6类基本原理都关注如何通过操纵物质和能量来实现所期望的计算。表1.1对这6类基本原理分别进行了简要描述,并给出了与之对应的篇章。
计算的内涵不仅仅是一种基本原理或是在此基础上形成的一些核心技术。计算的内涵还和各种实践领域紧密相关(见图1.11)。除了计算基本原理的知识之外,计算领域的专业人员还需要具备4种核心的实践能力:程序设计、系统思维、建模以及计算思维。实践能力是通过长期的经验积累而形成一种技巧。实践者的技巧可以被分为如下几类:初学者(beginner)、进阶初学者(advanced beginner)、初级资质者(competent)、熟练工(prof?icient)、专家(expert)。例如,一个入门级的程序员可能会主要关注语法和编译问题以及bug的查找问题;一个专家级的程序员则能够构建大型的软件系统,解决复杂的系统问题,或对下级程序员进行指导。基本原理和实践相互交织在一起。人们通过体现出高超技巧的行动将基本原理应用于实践中,而新的基本原理又会从大量的实践中逐渐浮现出来。
图1.10 每一类基本原理反映了对计算的一种视角,即观察计算领域知识空间的一扇窗口。(对这6类基本原理的排列顺序并不反映它们之间的相对重要性。)同时,这6类基本原理也不是完全不相交的。例如,互联网既可以从通信系统的角度理解,也可以从协作系统或记忆系统的角度理解。大多数计算技术都涉及对这6类基本原理的不同组合:每一类基本原理在这种组合中具有不同的权重,但每一类基本原理都确实存在。这些基本原理类别表现了人们对计算的某种认知视角。一些人认为计算仅仅就是计算,其他人则认为计算是数据、网络化的协作或者自动化系统。这种划分框架能够在某种程度上扩展人们对计算本质的认识
图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)来说明计算与物理学、生命科学、社会学以及自身之间可能存在的丰富关系。其中计算与其自身的关系是因为通过不同计算领域之间的交互,计算会不断地实现或影响自身。