[拼音]:jisuanji kexue
[外文]:computer science
研究计算机及其周围各种现象和规律的科学,亦即研究计算机系统结构、程序系统(即软件)、人工智能以及计算本身的性质和问题的学科。计算机是一种进行算术和逻辑运算的机器,而且对于由若干台计算机联成的系统而言还有通信问题,并且处理的对象都是信息,因而也可以说,计算机科学是研究信息处理的科学。
计算机科学分为理论计算机科学和实验计算机科学两个部分。后者时常称为“计算机科学”而不冠以“实验”二字。前者还有其他名称,如计算理论、计算机理论、计算机科学基础、计算机科学数学基础等。在数学文献中所说的计算机科学,一般是指理论计算机科学。实验计算机科学还包括有关开辟计算机新的应用领域的研究。
学科起源计算机科学中的理论部分在第一台数字计算机出现以前就已存在。20世纪30年代中期,英国数学家A.M.图灵和美国数学家E.L.波斯特几乎同时提出了理想计算机的概念(图灵提出的那种理想机在后来的文献中称为图灵机)。40年代数字计算机产生后,计算技术(即计算机设计技术与程序设计技术)和有关计算机的理论研究开始得到发展。这方面构成了现在所说的理论计算机科学。至于图灵机理论,则可以看作是这一学科形成前的阶段。至于“计算机科学”一词则到60年代初才出现,此后各国始在大学中设置计算机科学系。
学科内容计算机科学是一门年轻的科学,它究竟包括哪些内容,还没有一致公认的看法。一般认为,计算机科学主要包括理论计算机科学、计算机系统结构、软件工程的一部分和人工智能。
理论计算机科学理论计算机科学是在20世纪30年代发展起来的。40年代机电的与电子的计算机出现后,关于现实计算机及其程序的数学模型性质的研究以及计算复杂性(早期称作计算难度)的研究迅速发展起来,形成自动机论、形式语言理论、程序设计理论、算法设计与分析和计算复杂性理论几个领域。
计算机系统结构50年代以来,计算机的性能在计算速度和编址空间方面已提高了几个数量级。但大部分是通过元件更新而获得的。在系统结构方面基本上仍是属于40年代后期形成的存储程序型,即所谓诺伊曼型机器。这种结构的主要特点是它属于控制流型。在这种结构中,一项计算先做什么后做什么是事先确定了的,程序中指令的顺序是事先确定了的。为了在计算机的性能方面取得大的进展,需要突破这种旧的形式。计算机系统结构方面的重要课题之一,是探索非诺伊曼型机器的设计思想。
在非诺伊曼型机器中,有一种是70年代初提出的数据流机器(又名数据驱动机器)。美国、苏联和英国都已制成这种机器。这种机器的特点是,在一项计算中先做什么后做什么不是事先确定,所执行的指令是动态排序的。排序的原则是操作数已准备就绪的先做,因而称作数据驱动机器。这种类型的机器更便于实现并行计算。
软件工程程序设计在相当长的时间内是一种类似“手艺”而不是类似现代工程的技术。60年代以来出现了大程序。这些大程序的可靠性很难保证。到60年代后期,西方国家出现了“软件危机”。这是指有些程序过于庞大(包含几十万条以至几百万条指令),成本过高而可靠性则比较差。于是提出了软件工程的概念,目的在于使软件开发遵守严格的规范,使用一套可靠的方法,从而保证质量。
现代软件工程的方向是形式化和自动化,而形式化的目的在于自动化。这里所说的自动化就是将程序设计中可以由机器来完成的工作,尽量交给机器去做。中心课题之一是程序工具和环境的研究。程序工具是指辅助人编程序的程序,如编译程序、编辑程序、排错程序等;程序环境则是指一套结合起来使用的用来辅助人编程序的程序工具。
人工智能用计算机模拟人的智能,特别是模拟思维活动的技术及其有关理论。由于人的思维活动离不开语言,而且人对于某一类问题进行思索和探索解法时,总是需要以关于这一类问题的基本知识(专业知识或常识)作为出发点。于是,知识表示和机器对自然语言的理解就构成人工智能的两个重要领域。所谓知识表示,是指将原来用自然语言表示的知识转换成用符号语言表示的,从而可以储存在机器内供机器使用的知识。
人工智能的研究角度有探索法的角度和算法的角度。通常所说的解题算法是指机械的和总是有结果的方法,而这里所说的算法却是广义的,包括那些机械的而在使用时不一定有结果的算法。这种方法时常称作半可判定的方法。
人在解决问题时,时常采用探索法。这种方法具有“试错法”的性质,也就是说,试验若干条途径,一条路走不通时再试另一条,直到问题得到解决时为止。机器可以模拟人用探索法解题的思维活动。但由于可能途径的数目非常之大,不可能进行穷举式的探索。人一般是只选出一些最有希望得到结果的途径去进行探索。人的这种能力,就是进行创造性思维的能力。这是机器极难模拟的事情。
采用算法角度,使用特定的解题算法或半可判定的方法时,会遇到另一方面的困难。那就是当问题的复杂程度较高时(比如说是指数的),即使问题是有结果的,机器也无法在实际可行的时间内得到结果。在计算机出现的初期,人们曾寄希望于机器的高速度,以为在模拟人的思维时,机器可能用它的高速度来换取它所不具有的创造性思维。但通过“组合性爆炸”问题(“组合性爆炸”是指一些组合数学中的问题,在参数增大时,计算时间的增长率时常是指数的,甚至高于指数),人们认识到,单纯靠速度不能绕过组合性爆炸所产生的障碍。有无办法来克服这种困难,尚有待于进一步研究。
与其他学科的关系计算机是由物理元件构成的,迄今主要是由电子元件构成的。因此,物理学的一些分支和电子工程便构成计算机科学的基础。同时,计算机科学在一定意义上是算法的科学,而算法是一个数学概念。因此,数学的某些分支如算法理论(即可算性理论,又名递归函数论)也构成计算机科学的基础。
但计算机科学已发展成为一门独立的技术科学,既不是电子学的一个分支,也不是数学的一个分支。这是就这个学科的整体而言。至于理论计算机科学,由于它可以看作是计算机科学的数学基础,在一定意义上,可以看作是数学的一个分支。
另一个与计算机科学有密切关系的学科是控制论。控制论作为应用数学方法来研究机械系统和生命系统中的控制和通信现象的学科,同计算机科学有内容上的交叉,但后者不是它的一部分。
自从40年代制成数字计算机以来,计算机的性能有了很大的提高。但在系统结构方面变化不大。一些计算技术发达国家正在研制新一代的计算机。这种计算机的系统结构将与过去40年的机器很不相同,所用的程序设计语言也将是新型的。
计算机科学将研究由此出现的新问题,如有关并行计算的问题。对计算的数学性质的研究大都还是关于串行计算的,对并行计算性质的研究自70年代才发展起来,预计将成为计算机科学的中心课题之一。
另一个问题是程序设计的自动化问题。在程序设计方面,明显的趋势是将机器能做的尽量交给机器去做。程序环境的研究构成了软件工程的一个中心课题。形式化方法越来越受到重视,因为它是提高自动化程度所必需的。