绪0论 绪论
计算机科学概论(第12版)
在开篇的这一章,我们探讨计算机科学所涉及的领域,介绍其历史背景,然后为我们的深入学习奠定基础。
本章内容
0.1 算法的作用
0.2 计算机器的由来
0.3 学习大纲
0.4 计算机科学的首要主题
计算机科学这门学科,是要为计算机设计、计算机程序设计、信息处理、问题的算法解决方案和算法过程本身等主题建立科学的基础。计算机科学既是当今计算机应用的支柱,又是今后计算基础设施的基础。
本书将详细介绍计算机科学,探索广阔的主题,包括构成大学计算机科学课程的大部分主题。我们要领略这个领域的博大精深和变化发展。因此,除了这些主题本身,我们还关注它们的历史发展、现今的研究动态以及今后的前景。我们的目标是让人们以学以致用的态度来对待计算机科学——既帮助那些要在此领域继续深入学习的人,也促成其他领域的人在技术不断进步的社会崭露头角。
0.1 算法的作用
首先让我们了解一下计算机科学最基础的概念——“算法”。一般来讲,算法(algorithm)是完成一项任务所遵循的一系列步骤。(在第5章,我们将给出比较精确的定义。)例如,有关于烹饪的算法(称为菜谱),有在陌生城市准确定位的算法(通常称为道路指南),有使用洗衣机的算法(通常标示在洗衣机盖子的内侧或者贴在自助洗衣店的墙上),有演奏音乐的算法(以乐谱的形式表示),还有魔术表演的算法(见图0-1)。
在一台机器(如计算机)执行一项任务之前,必须先找到完成这项任务的算法,并且用与该机器兼容的形式表示出来。某一个算法的表示称作一个程序(program)。为了人们读写方便,计算机程序通常打印在纸上或者显示在计算机屏幕上。为了便于机器识别,程序需要采取一种与该机器技术兼容的形式进行编码。开发程序、采取与机器兼容的形式进行编码并将其输入到机器中的过程,称作程序设计(programming)。程序及其所表示的算法总称为软件(software),而机器设备本身则称为硬件(hardware)。
算法的研究起源于数学学科。事实也的确如此,它是数学家的重要活动,远远早于当今计算机的出现。它的目标是找出一组指令,描述如何解决某一特定类型的所有问题。求解两个多位数商的长除算法(long division algorithm)是早期研究中一个最著名的例子。另一个例子是古希腊数学家欧几里得发现的欧几里得算法——求两个正整数的最大公约数(见图0-2)。
一旦我们找到了执行一个任务的算法,那么在执行该任务时,就不再需要了解该算法所依据的原理——任务的执行演变成了遵照指令操作的过程。(我们可以根据长除算法求商,或者根据欧几里得算法求得最大公约数,不需要了解算法的工作原理。)在某种意义上,解决这个问题的智能被编码到算法中。
通过算法来捕获和传达智能(至少是智能行为),我们能够设计出执行有用任务的机器。因此,机器的智能级别受限于算法所传达的智能。只有存在执行某一项任务的算法时,我们才可以制造出执行这一任务的机器。换言之,如果我们找不到解决某问题的算法,机器就解决不了这个问题。
20世纪30年代,库尔特·哥德尔(Kurt Gödel)发表了不完备性定理的论文,它使确定算法能力的局限性成为数学的一个研究课题。这个定理的主旨就是,在任何一个包括传统意义的算术系统的数学理论内,总有一些命题的真伪无法通过算法的手段来确定。简言之,对于我们算术系统的任何全面研究都超越了算法活动的能力。这一认识动摇了数学的基础,于是关于算法能力的研究随之而来,它开创了今天计算机科学这门学科。的确,正是算法的研究构成了计算机科学的核心。