计算机科学的发展史

计算机科学的理论部分在第一台数字计算机出现之前就存在了。计算机科学植根于电子工程、数学和语言学,是科学、工程和艺术的结晶,在20世纪最后三十年作为一门独立学科崛起,并发展了自己的方法和术语。自20世纪60年代以来,大型程序已经出现。这些大型程序的可靠性很难保证。到了20世纪60年代末,西方国家出现了“软件危机”。这意味着有些程序过于庞大(包括几十万甚至上百万条指令),成本高,可靠性差。因此提出了软件工程的概念,旨在使软件开发遵守严格的规范,使用一套可靠的方法,从而保证质量。现代软件工程的方向是形式化和自动化,形式化的目的是自动化。这里所说的自动化,就是把编程中可以由机器完成的工作尽可能地留给机器。其中一个中心课题是程序工具和环境的研究。程序工具是指辅助人们编程的程序,如编译程序、编辑程序、调试程序等。程序环境是指一组组合使用的程序工具,用来辅助人们进行编程。人工智能是用计算机模拟人类智能,特别是模拟思维活动的技术及其相关理论。因为人的思维活动离不开语言,而人们在思考和探索解决问题的方法时,总是需要以关于某一类问题的基础知识(专业知识或常识)为出发点。因此,知识表示和机器对自然语言的理解构成了人工智能的两个重要领域。所谓知识表示,是指将原本用自然语言表达的知识,转化为用符号语言表达的知识,可以存储在机器中供机器使用。人工智能的研究角度包括探索的角度和算法的角度。通常,解题算法指的是总是有结果的机械方法,但这里所说的算法是广义的,包括那些机械的,使用时不一定有结果的算法。这种方法通常被称为半决定性方法。

人们在解决问题时,经常使用探索法。这种方法具有“试错法”的性质,也就是说,尝试几种方法,当一种方法失败时,再尝试另一种方法,直到解决问题。机器可以模拟人通过探索解决问题的思维活动。然而,由于可能的途径非常多,因此不可能详尽无遗地探索。一般来说,人们只会选择最有希望的方式去探索。这种能力就是创造性思维的能力。这是机器极难模拟的。从算法的角度来说,在使用特定的解题算法或半可决法时,你会遇到另一个难点。也就是当问题的复杂度很高时(比如指数级),即使问题有了结果,机器也无法在一个实用的时间内得到结果。在计算机的早期,人们曾寄希望于机器的高速度,认为在模拟人类思维时,机器可能会用它的高速度换取它所不具备的创造性思维。但通过“组合爆炸”问题(“组合爆炸”是指组合数学中的一些问题,当参数增加时,计算时间的增长速度往往是指数级的,甚至高于指数级),人们认识到单靠速度是无法绕过组合爆炸带来的障碍的。有没有办法克服这个困难,还有待进一步研究。与其他学科的关系计算机是由物理元件组成的,到目前为止主要由电子元件组成。因此,物理学和电子工程的一些分支构成了计算机科学的基础。同时,计算机科学在一定意义上是算法的科学,算法是一个数学概念。因此,数学的一些分支,如算法理论(可计算性理论,又称递归函数理论)也构成了计算机科学的基础。但是计算机科学已经发展成为一门独立的技术科学,它既不是电子学的分支,也不是数学的分支。这是就整个主题而言的。至于理论计算机科学,因为可以看作是计算机科学的数学基础,所以在一定意义上可以看作是数学的一个分支。另一个与计算机科学密切相关的学科是控制论。控制论作为一门应用数学方法研究机械系统和生命系统中控制和通讯现象的学科,在内容上与计算机科学有所重叠,但后者并不是其中的一部分。自从20世纪40年代制造出数字计算机以来,它的性能已经大大提高了。但系统结构变化不大。一些拥有先进计算技术的国家正在开发新一代计算机。这台计算机的系统结构将与过去40年的机器有很大不同,使用的编程语言也将是新的。计算机科学将研究由此产生的新问题,如并行计算。

对计算的数学性质的研究大多是关于串行计算的,而对并行计算性质的研究是从20世纪70年代才开始发展起来的,有望成为计算机科学的中心课题之一。另一个问题是编程的自动化。在编程中,明显的趋势是把机器能做的事情尽可能留给机器。程序环境的研究构成了软件工程的中心课题。形式化方法越来越受到重视,因为它是提高自动化程度的必要手段。

在早期,虽然英国的剑桥大学和其他大学已经开始教授计算机科学课程,但它只是被视为数学或工程学的一个分支,而不是一门独立的学科。剑桥大学号称是世界上第一个教授计算的大学。世界上第一个计算机科学系由美国普渡大学于1962年建立,第一个计算机学院由美国东北大学于1980年建立。大部分大学都把计算机科学作为一个独立的系,有的和工程系、应用数学系或者其他学科结合。