第1章 计算学科概念辨识
1.1 计算机与计算学科
1.1.1 大众眼中的计算机
什么是计算机?提到计算机,可能很多人会想到个人计算机(Personal Computer,PC)、Windows、Office、Internet、WWW等名词,甚至云计算、物联网、虚拟现实(Virtual Reality,VR)、人工智能等概念也会由没有任何专业背景的人脱口而出。五彩缤纷的新技术是不少学生希望进入计算机专业学习的重要动力,而要更“专业”一些,人们能想到的恐怕也就只有“编程”了。确实,随着近些年来计算机产业的飞速发展,计算机变得越来越大众化,已成为一个人人都能学会、人人都可以使用的工具。但是,作为一门学科,公众头脑中对计算机专业的理解又有多大的准确性呢?许多人的看法是“计算机只不过是工具”,其后面隐含的意思就是“主要就是应用”。这本身没有什么不对,但用它作为计算机专业定位的出发点就会造成极大的误导。任何一个研究对象,都会涉及科学、技术、工程和应用等各个层面的问题,下面从这4个角度来重新认识计算机。
1979年版《辞海》关于科学做了如下定义。科学是关于自然界、社会和思维的知识体系,它是适应人们生产斗争和阶级斗争的需要而产生和发展的,它是人们实践经验的结晶。计算学科为计算机设计、计算机程序设计、信息处理、问题的算法解决方案和算法过程本身等主题建立科学的基础。它是一门研究信息转换过程中设计、分析、实现、效率及应用的学问,深深地植根于数学、工程学和逻辑学之中。
世界知识产权组织在1977年版的《供发展中国家使用的许可证贸易手册》中,对技术做了如下定义。技术是制造一种产品的系统知识,所采用的一种工艺或提供的一项服务,不论这种知识是否反映在一项发明、一项外形设计、一项实用新型或者一种植物新品种,或者反映在技术情报或技能中,或者反映在专家为设计、安装、开办或维修一个工厂或为管理一个工商业企业或其活动而提供的服务或协助等方面。计算机技术就是人们想用计算机实现什么,概括来讲,人们希望用计算机做三件事。首先是实现模拟,无论是求解数学问题,或是实现虚拟现实,都可以通过计算机模拟实现。其次是通信,从跨越空间常规意义上的通信到利用存储功能实现跨时间的通信。最后是控制,从最初控制飞机、火箭,到现在控制生活中的洗衣机、电冰箱等。
就狭义而言,工程是将某个(或某些)现有实体(自然的或人造的)转化为具有预期使用价值的人造产品的过程。就广义而言,工程则定义为由一群(个)人为达到某种目的,在一个较长时间周期内进行协作(单独)活动的过程。工程问题并不能单靠技术和工具来解决。计算机领域中的工程问题是指在计算机产品开发过程中,一定要用工程的思想控制开发过程,保证产品的质量,使开发人员成为真正的工程师。计算机教育家坦南鲍姆(Tannenbaum)有个形象的说法,上帝创造世界却忘记了写说明书,科学家的任务就是补写出这部说明书,而工程师的职责则是用一角钱做出傻瓜必须用一元钱才能做的事。
计算机的应用可能是在我国计算机教育界有最多误区的一个方面。南京大学陈道蓄教授的观点是,我们严重的问题是没有重视计算机应用技术和计算机技术的应用二者的区别。随着信息化和软件技术的不断进步,计算机技术的应用将不再是计算机领域的专业人员所独有的。
综上所述,大众眼中的计算机与我们要学习的内容有着太多的不同,科学、技术、工程和应用不仅需要不同的知识和技能背景,更重要的是它们具有不同的思维方式和工作模式。搞清楚这些差别,对我们今后的学习和工作将有积极的作用。
1.1.2 计算机如何计算
在介绍计算机的计算原理之前,需要先介绍计算机中使用的计数方式,这和我们日常生活中的计数方式有所区别。日常生活中的计数方式通常使用的是十进制计数法,使用0~9这10个符号就可以组合出各种各样的数字。每当计数达到9时,若再加1就需要将9变为0并向左进1,也就是常说的逢10进1,如图1.1所示。
图1.1 十进制逢10进1
然而在计算机内部并不能识别十进制的数字,它采用的是二进制计数法。什么是二进制计数法?二进制计数法只包含0、1这两种符号,使用的是逢2进1的计数方式。当什么也没有时,用符号0表示;当数量达到1时,用符号1表示,如图1.2所示。那么问题来了,如果有两个(十进制数)苹果,怎么用二进制表示呢?因为二进制遵循的是逢2进1的原则,那么当在1的基础上再加1时就需要先将1变为0,然后再向左进1,即用二进制符号10来表示十进制中数字2,变换过程如图1.3所示。按照这个计数原则,十进制中数字2、3的二进制表示方法如图1.4所示。如果想用二进制表示十进制中数字4,这就碰到了前面出现的进位问题,处理方法一样,过程如图1.5所示。其他数字的表示方法也是同理的,只要遵循逢2进1的原则,再多一点细心和耐心,再大的数也可以用二进制表示。
图1.2 二进制符号说明
图1.3 二进制逢2进1
图1.4 用二进制表示十进制数2、3
图1.5 二进制数3到4的变换过程
在了解计算机的计数方式之后,我们再通过一个小例子了解计算机的计算方式。首先让我们回忆十进制加法的运算法则,这个想必大家再熟悉不过了,我们从小学开始就掌握了计算十进制加法的技能。说到这里大家可能马上就联想到了十进制加法的计算方法,就是把被加数和加数右对齐,然后从最右边开始让每个相对的位的值进行加法运算,如果有进位就进到该位的左边一位。整个过程中需要注意的就是进位方法。
如何对二进制数进行加法运算?其实二进制加法和十进制加法非常类似,但比十进制要简单得多,因为二进制只有0和1两个符号,所以总结起来只有4条,0加0等于0,0加1等于1,1加0等于1,1加1等于0进1。这个可以理解为,如果你没有苹果,我也没有苹果,那么我们都没有苹果(0加0等于0);如果你有苹果,我没有苹果(0加1等于1),或者我有苹果,而你却没有苹果(1加0等于1),那么我们总共有1个苹果;如果你也有苹果,我也有苹果,但是外面没有地方放,我们把这两个苹果放到一个箱子里,那么虽然我们现在手头上什么也没有,但是我们有一个箱子(1加1等于0进1)。对于进位规则,二进制也跟十进制类似,被加数和加数都保持右对齐,相加时逢2进1。
下面通过一个小例子,来感受二进制加法运算的过程。假设我们要计算二进制数111与10的和。首先将被加数和加数保持右对齐。然后按位相加,最右位1加0等于1,接着中间位1加1等于0进1,向左进1,最左位上1加上进位1等于0再进1,所以最终的相加结果为1001,如图1.6所示。我们来验证正确性,二进制数111对应的十进制数是7,二进制数10对应的十进制数是2,二进制数1001对应的十进制数是9,7加2等于9,因此计算过程是正确的。
图1.6 二进制加法示意
现在从计算机的角度看一下7+2的整体计算过程。我们可以先简单地将计算机的计算过程看成输入、处理和输出这3个步骤,即从键盘输入要计算的数据,然后计算机按照操作人的意图进行计算,最后将计算结果输出到屏幕上。那么针对这个例子来说,首先从键盘上键入7,键盘检测到输入后将十进制数字7转换为二进制电信号并传递给计算机主机上的USB控制器;然后控制器将信号传递给CPU,CPU将传递来的按键内容的信号记录下来,通知图形库将输入的内容7显示在屏幕上;最后在键盘上依次输入加号和2,处理过程与前面相同。当从键盘上键入回车符时,计算机开始进行加法运算,它向CPU传递一条加法指令。CPU收到指令后开始对111和10进行加法运算,得到二进制计算结果1001。最后CPU通知图形库让其将二进制结果转换成十进制并显示到屏幕上,我们就从屏幕上看到了最终的输出结果9。
1.1.3 计算学科及其研究领域
随着计算机领域的快速发展,计算机受到越来越多的人的关注,很多学校开始开设计算机类的相关课程,但是对于计算学科这一名词却产生了分歧。有些科学家认为计算机主要用于数值计算,没必要单独设立这门学科。1985年,ACM和IEEE Computer Society开始合作研究计算作为一门学科的必要性,经过近4年的努力,该研究组提交了一份名为“计算作为一门学科”的报告,并刊登在1989年 1月的Communications of the ACM杂志上。
“计算作为一门学科”从定义一个学科的要求及其简短定义,以及支撑一个学科所需的抽象、理论和设计内容等方面,详细地阐述了计算作为一门学科的事实。该报告中对计算学科进行了如下描述:计算学科是对描述和转换信息算法过程的系统性研究,包括它们的理论、分析、设计、效率、实现和应用。计算学科主要可以分为两个方向,即计算学科和计算工程。
利用计算机进行科学计算正逐渐受到各个领域的青睐,这种计算方式具有快速、高效、高可靠等优点,在现代科技领域,计算正发挥着越来越大的作用。计算已经成为一种基础的科学方法,是继两种传统科学方法(理论和实验)之后的第三种科学方法。
计算学科的主要研究领域包括计算理论、算法与数据结构、编程方法与编程语言、计算机元素与架构,还有一些比较重要的领域,如软件工程、人工智能、计算机网络与通信、数据库系统、并行与分布式计算、人机交互、机器翻译、计算机图形学、操作系统、数值和符号计算、实时处理和工业控制。