书城科普日新月异的信息科学(科普知识大博览)
10075600000016

第16章 信息科学与计算机科学(1)

计算机科学的概念、发展过程和研究内容前面已经给出了信息科学技术的基本定义,为了讨论信息科学与计算机科学之间的关系,下面介绍什么是计算机科学以及计算机科学的基本问题。

.计算机科学的定义计算机科学是描述和处理信息的算法过程,包括其理论、分析、设计、效率分析、实现和应用的系统研究。全部计算科学的基本问题可以归结为:什么问题能够(有效地)自动进行,什么问题不能(有效地)自动进行。该学科来源于对数理逻辑、计算模型、算法理论、自动计算机器的研究,形成于20世纪30年代后期。现在,计算已成为继理论、实验之后的第三种科学形态。

.计算机科学的发展过程计算机科学的发展在时间上可以粗略地划分为如下几个阶段:

在计算机科学的发展的早期,大约在20世纪30年代至50年代末,对计算机科学研究的主流方向主要集中在计算模型、计算机设计、高级语言和科学计算方面。由于主要的应用是大量的科学计算,与数学关系密切,加之计算机的设计强烈依赖于逻辑和布尔代数,导致大量从事数学研究的人员转入计算科学领域。就当时的情况看,具有坚实的数学基础,懂得一些电子学、逻辑和布尔代数,就很容易掌握计算机原理和设计的方法。如果还能掌握一些程序设计的技术,那就完全可以进入学科前沿。在学科发展的早期,数学、电子学、高级语言和程序是支撑计算机科学发展的主要专业基础知识。

世纪60~70年代是计算机科学发展的时期,面对学科发展中遇到的许多重大问题,如怎样实现高级语言的编译系统,如何设计各种新语言,如何提高计算机运算速度和存储容量,如何设计操作系统,如何设计和实现数据库管理系统,如何保证软件的质量等问题,发展了一大批理论、方法和技术,如形式语言与自动机学,形式语义学,软件开发方法学,算法理论,高级语言理论,并发程序设计,大、中、小型计算机与微型计算机技术,程序理论,Petri网,CSP,CCS等。这一时期的发展有两个显著的特点:其一是学科研究和开发渗透到社会生活的各个方面,广泛的应用需求推动了学科持续高速发展;其二是经过大量的实践,人们开始认识到软件和硬件之间有一个相互依托,互为借鉴以推动计算机设计和软件发展的问题,与此同时,人们也开始认识到计算机理论和工程技术方法两者缺一不可,且常常是紧密地结合在一起的。许多复杂而困难的硬件与软件设计,离不开计算机理论的支持,而大系统的实现也应广泛采用工程方法。对大系统实现中困难性的认识促进了软件理论、开发环境和工具的研究。大约在20世纪60年代初到70年代末这20年里,计算机原理、编译技术、操作系统、高级语言与程序设计、数据库原理、数据结构与算法、设计,以及逻辑成为学科的主要专业基础知识。

从20世纪80年代起,针对集成电路芯片可预见的设计极限和一些深入研究中所遇到的困难,如软件工程、计算模型、计算语言、大规模复杂问题的计算与处理、大规模数据存储与检索、人工智能、计算可视化等方面出现的问题,人们开始认识到学科正在走向深化。除了寄希望于物理学中光电子技术研究取得的突破,成倍提高机器运算速度外,面对现实,基于当前的条件,人们更加重视理论联系实际和技术的研究。这方面的努力推动了计算机体系结构,并行与分布式算法,形式语义学,计算机基本应用技术,各种非经典逻辑及计算模型的发展,从而推出了并行计算机,计算机网络和各种工作站,并带动了软件开发水平和程序设计方法技术的提高。尤其值得一提的是,在图形学和图像处理这两个相对独立的方向上,科研和实际应用均取得了很大的进步。这两个方向的迅速发展不仅使计算机的各种应用变得更易于为社会接受,而且随着计算机硬件和数据库技术的进步,计算机应用触及到了一些以前被认为是较为困难的领域,并引发了计算几何、多媒体技术、虚拟现实等计算可视化方向的发展。

正当学科处于高速发展的时候,许多有识之士都对前景改变了看法,不如以前那么乐观了。基于并行软件开发方法学、计算语言学、人工智能、超大规模计算机网络的控制与信息安全,以及硬件芯片设计中遇到的困难和极限,人们开始对一些基本问题进行反思。如计算概念能突破图灵机计算模型定义的范围吗?什么是智能计算机的理论基础?逻辑能成为智能计算机的基础吗?软件开发方法学中遇到的程序语言的动态语义问题、计算语言学中的语义、语用问题本质上是相同的问题,它们都是关于语言的成分如何定值和解释的问题。由于定值的环境是变化的,因此,前人的工作已经表明,采用指称语义、操作语义等外延的方法不能解决这个问题。那么,采用内涵的方法能行吗?基于目前的芯片技术,如何设计高性能的计算机系统?如何将并行算法的研究与体系结构相分离?于是,基础理论联系实际研究重新引起人们更多的重视。围绕着学科遇到的问题,新一代计算机体系结构,高性能计算与通信系统模型,形式语义学,并行算法设计与分析,以及各种非经典逻辑系统成为专家关注的重点。然而,由于长期以来理论的研究滞后于技术的发展,技术和工程应用发展速度始终受到制约。在研究的方法上甚至还出现了广泛借鉴其他学科的现象,特别是在研究与人及其行为有关联的学科方向上,如从脑神经系统的生理结构和思维功能得到显示产生了神经与神经元计算,试图从别的学科进展来确定下一步工作的思路。

经过一段时间的探索之后,人们开始认识到:许多情况下确定一个取值的范围比直接确定一个值的方法更重要;发现一个不能自动进行计算的问题甚至比发现解决一个问题的方法更重要,这是因为证实各种不能自动进行的问题常常从不同的侧面、以不同的形式揭示了计算的极限,它有可能帮助人们更深刻地认识计算的本质,推动研究,特别是计算模型研究的发展。在软件的开发中,算法的设计应该与体系结构相分离,而程序的设计应该与具体机器无关。在软件开发各阶段的研究和不同用途、不同性质的软件开发需要各种计算模型的数学理论联系实际的支持,这正是近年来各种计算(如分布式代数系统、类型理论、区段演算等)出现的背景,人工智能并不遥远,但也不像原先想象的那么简单。问题是人们对智能的认识还十分肤浅,对什么是人工智能的理论联系实际基础仍处于探索之中。

在计算机科学的研究与发展中,具体地形成了一大批更为细小的方向,有些理论联系实际性较强,有些技术性较强,有些则与其它学科产生了密切的联系。

.计算机科学研究的主要内容计算机科学是研究计算机及其周围各种现象与规模的科学,主要包括理论计算机科学、计算机系统结构、软件、人工智能和算法等。

理论计算机学理论计算机学是研究计算机基本理论的学科。在几千年的数学发展中,人们研究了各式各样的计算,创立了许多算法。但是,以计算或算法本身的性质为研究对象的数学理论,却是在20世纪30年代才发展起来的。

当时,由几位数理逻辑学者建立的算法理论,即可计算性理论或称递归函数论,对20世纪40年代现代计算机设计思想的形成产生过影响。此后,关于现实计算机及其程序的数学模型性质的研究,以及计算复杂性的研究等不断发展。

理论计算机科学包括自动机论、形式语言理论、程序理论、算法分析以及计算复杂性理论等。自动机是现实自动计算机的数学模型,或者说是现实计算机程序的模型,自动机理论的任务就在于研究这种抽象机器的模型;程序设计语言是一种形式语言,形式语言理论根据语言表达能力的强弱分为0~3型语言,与图灵机等4类自动机逐一对应;程序理论是研究程序逻辑、程序复杂性、程序正确性证明、程序验证、程序综合、形式语言学以及程序设计方法的理论基础;算法分析研究各种特定算法的性质。计算复杂性理论研究算法复杂性的一般性质。

计算机系统结构计算机系统结构是程序设计者所见的计算机属性,着重于计算机的概念结构和功能特性,硬件、软件和固件子系统的功能分配及其界面的确定。使用高级语言的程序设计者所见到的计算机属性,主要是软件子系统和同件子系统的属性,包括程序语言以及操作系统、数据库管理系统、网络软件等的用户界面。使用机器语言的程序设计者所见到的计算机属性,则是硬件子系统的概念结构(硬件子系统结构)及其功能特性,包括指令系统(机器语言)以及寄存器定义、中断机构、输入输出方式、机器工作状态等。

硬件子系统的典型结构是冯·诺依曼结构,它由运算器控制器、存储器和输入输出设备组成,采用"指令驱动"方式。当初,它是为解非线性微分方程而设计的,并未预见到高级语言、操作系统等的出现,以及适应其他应用环境的特殊要求。在相当长的一段时间内,软件子系统都是以这种冯·诺依曼结构为基础而发展的。但是,其间不相适应的情况逐渐暴露出来,从而推动了计算机系统结构的变革。

计算机组织与实现是研究组成计算机的功能、部件间的相互连接和相互作用,以及有关计算机实现的技术,均属于计算机组织与实现的任务。

在计算机系统结构确定分配给硬件子系统的功能及其概念结构之后,计算机组织的任务就是研究各组成部分的内部构造和相互联系,以实现机器指令级的各种功能和特性。这种相互联系包括各功能部件的布置、相互连接和相互作用。