作者:陈道蓄,南大计算机教授
小编:陈老师的这篇文章从软件的角度解释了计算机科学,技术,工程和应用的不同之处,虽然有很多人从事计算机方向的工作,但这几个“名词”背后意味着什么没有多少人真正清楚。往小处讲,这篇文章回答了为什么学计算机的不会修电脑这个让人无语的问题。往大处讲,这篇文章回答了计算机为什么会成为一个很大很专业的学科这个如此本质的问题。
声明:本文发表在《计算机教育》,知网 下载链接 。
导言
计算机无疑是 20 世纪对人类生活影响最大的科技成果之一 , 与同样影响深远的航天科技的伟大成果相比,计算机技术对于普通人日常生活的影响是直接而显著的 , 它在短短几十年中,渗透到人类生活的各个方面,同时也就产生了一大批人在职业上被称为是 “ 搞计算机的 ” 。
本文试图从计算机软件的角度来探讨计算机作为一个 “ 行当 ” 是否包含了太多的内容,以至于有必要区分其科学、技术、工程以及应用等不同的方面,并希望这会引起计算机从业者,特别是计算机教育工作者更深入的讨论,让我们的人才培养更有针对性,效果更显著。
计算机领域是个在大众高度关注下的领域,许多介绍计算机技术和应用的刊物出现在街头报刊亭中,这个行业中的许多头面人物几乎像文体明星一样具有公众显示度。但是,作为一个学科,公众头脑中的计算机专业有多大的准确性呢?
我们先看看大众视野中的计算机技术。 PC 、 Windows 、 office 、因特网、 WWW 以至于 Linux 、奔腾这些名词会随时从没有任何专业背景的人口中脱出,五彩缤纷的视频效果是不少中学毕业生希望进入这一专业的重要动力,而要更 “ 专业 ” 一些,恐怕想到的也就是 “ 编程 ” 了。
另一方面,如果我们选择近四十年来图灵奖的获奖成果作为在专家的视角下这一领域最有影响的进展的一个标志,那么远不止是一般公众,即使是 “ 搞计算机的 ” ,对其中大多数人和成果都不那么熟悉。从 1966 年开始到 2003 年共颁奖 38 届,有 47 位获奖人,其中有 15 人主要成果涉及形式系统与程序设计语言和方法,有 14 人主要成果涉及计算机算法及其复杂性理论。许多计算机专业的本科生在听到对其中有些成果的介绍时,甚至表示不知道这也算是 “ 搞计算机的 ” 。
许多人有一种看法: “ 计算机只不过是工具 ” ,其后面隐含的话就是 “ 主要就是应用 ” 。这本身没有什么不对,但用它来作为计算机专业定位的出发点就会产生极大的误导。即使是菜刀这样的工具,也会涉及科学、技术、工程和应用的各个层面,如图 1 所示。菜刀过于简单,其他学科的知识足够它的需要了,因此没有什么 “ 菜刀科学 ” 。计算机软件则不然,它涉及了科学、技术、工程和应用等众多复杂的内容,让我们从不同的角度来看看,在各个方面 “ 搞计算机的 ” 人究竟在做些什么。
按照传统的说法,从事科学的人是 “ 发现者 ” ,他们试图发现自然、社会等方面存在的规律;从事技术工作的人是 “ 创造者 ” ,他们利用已发现的规律试图创造新的物品、工具、方法来满足人类的需要,从事工程的人则是 “ 实现者 ” ,以合理的成本建造或生产稳定可靠的结构或产品满足大量人群的需要,如图 2 所示。
科学
首先来考虑计算机科学。计算机科学应该是试图发现一类非自然结构的内在规律的学科,这类结构中涉及的现象 ( 既非纯粹的自然现象,又非一般意义上的社会现象 ) 的解释不能在已有的学科中得到。其实 “ 什么是计算机科学 ” 这个问题并不容易回答。以色列学者哈雷尔在《算法学:计算的本质》一书中提出这样的问题:论技术的影响,电话也很大,为什么没有电话科学?论技术复杂性,人造卫星很复杂,为什么没有被广泛接受的人造卫星科学。他认为其实计算机是计算的工具,用计算机给这门科学命名,就像用 “ 手术刀科学 ” 给外科学命名一样地不合适。当计算机科学这门新学科出现时 ( 一般认为美国卡内基梅隆大学在首位图灵奖得主佩利的领导下建立了最早的计算机科学系 ) 主要内容就是 “ 算法 ” 和 “ 形式系统 ” ,是 “ 程序设计的科学 ”( 不是现在大众理解的 “ 编程 ”) 。
每个科学学科都有其所谓的 “ 终极 ” 问题。计算机科学的 “ 终极 ” 问题被认为是 “ 什么可以被自动地计算? ” 在计算机科学学科出现近五十年后,随着计算环境的发展,有很多还不清楚的问题需要我们去发现其答案。例如 Internet 已经发展成一个客观存在,但我们对其中数据与服务的分布、需求的模式、协同方式等等还了解很少,即使是传统的算法领域,很多问题还没有解答。软件本身日益复杂,如什么是合理的体系结构等等,这些方面的新知识将大大加深我们对计算机软件系统及其有效性的理解。 技术
说到技术,我们要创造什么?概括起来看,人类希望用计算机来做三件事:
* 模拟:从解方程到令人陶醉其中的虚拟现实,都是模拟 * 通信:从跨越空间的常规意义上的通信到用存储功能实现的跨时间的 * 控制:从巨大的火箭到洗衣机
技术发展在可预见的未来,将围绕这三方面的功能,往高度人性化方向发展。汪成为院士曾在他的报告中用图描述了计算机技术的发展趋势,如图 3 所示。
在试图实现上述技术进步的同时,软件本身的开发技术也在不断得到发展。从面向对象,到软件构件技术、中间件技术,新的工具和方法似乎天天在出现。
但有一个经常导致争论的问题是:近年来软件技术的进步是革命性的,还是只不过是改良?这个问题没有答案,但每个人都有自己的观点。我认为,自面向对象技术出现以来,软件技术的进步虽然令人印象深刻,但主要是建立在硬件环境的进步以及量的积累上的,所以还谈不上是革命性的。
面向对象的思想、理论和方法出现三十多年了,其科学上的先驱达尔、奈加特以及阿兰 · 凯对几十年来技术进步的巨大贡献通过 2001 年度和 2003 年度的图灵奖得到了肯定,尽管他们的 “ 有形 ” 成果 Simula 和 Smalltalk 从来没有广泛流行过。
软件技术的革命性进步还在等待计算机科学的成果来推动,如图 4 所示。
工程 软件产品的质量难以保证,开发过程常常不易控制,这是困扰软件产业界多年的问题,而这一问题并不能单靠技术和工具来解决。软件开发的工程化要求开发人员成为真正意义上的工程师。
工程师作为制造者、实现者与发现者、创造者有很大的不同。我们可以这样来看科学家与工程师思维方式的差别:前者要 “ 说人之未说,是非任人评判 ” ,要在一点上深入下去,可以暂时 “ 不及其余 ” ;而后者则要为用户负责,必须承担责任,他们必须面面俱到,即使不是关键技术上的不足也可能导致产品在市场上全面失败,他们的工作必须基于制度与规范约束下的合作。
计算机教育家坦能鲍姆有个形象的说法:上帝创造世界却忘记了写说明书,科学家的任务就是补写出这部说明书,而工程师的职责则是用一角钱做出傻瓜必须用一元钱才能做的事。其实二者各有各的难处。
美国进行的有关计算机教育的调查报告中提到,接受过正规的计算机科学与技术教育的人去从事工程工作时缺乏的相关技能知识包括沟通、人机交互、项目管理、软件成本、软件度量、可靠性与容错、需求,甚至于职业伦理。 应用
随着信息化进程加速,与计算机相关的人员增加最快的应该是应用人员。他们往往并不是指应用软件开发工程师,而是另外两方面的人员:一是各个不同的专业领域内用计算机去实现他们各自计算需求的专业人员,另一部分是从组织层次建立和维护信息系统的专业人员。前者不应该是 “ 搞计算机的 ” ,而后者在美国 ACM 指导性教学计划编制者那里则被列为 “ 计算学科 ” 下的一个新学科,与 “ 计算机科学 ” 、 “ 软件工程 ” 等并列,名称被定为 “ 信息技术 ”(IT) 似乎并不合适,照该分支学科教学计划编制者之一 Lunt 教授的说法: “ 实在想不出更合适的名称。 ”
应用可能是在我国计算机教育界有最多误区的一个方面。我想引用应用数学家林家翘在《科学时报》的一次访谈中说的话:现在我们严重问题是没有重视应用数学和实用数学 ( 数学的应用 ) 二者的区别。应用数学主动提出研究对象中的数学问题,通过问题的解加深对研究对象的认识,而实用数学的主要目的是满足社会需要,帮助服务对象解决他们提出的数学问题。我想我们可以说 “ 我们严重的问题是没有重视计算机应用技术和计算机技术的应用二者的区别 ” ,随着信息化和软件技术的不断进步,后者主要将不是 “ 搞计算机的 ” 。 结束语
“ 搞计算机的 ” 是一个迅速扩大的群体,如图 5 所示。其实这里面有着太多的不同。科学、技术、工程和应用不仅需要不同的知识和技能背景,更重要的是他们具有不同的思维方式和工作模式。搞清楚这里的差别,对计算机学科的发展以及计算机人才的培养会有积极的作用。
作者介绍:
陈道蓄,男, 南京大学 教授、博士生导师。1947年生,1982年毕业于 南京大学 。1985-86年和1995-96年先后在美国 普度大学 和 香港城市大学 作访问学者,曾任 南京大学软件学院 主任,现任 南京大学软件学院 学术委员会主任,教学委员会主任, 专业学位 教育指导委员会主任。目前的研究方向为分布式计算、并行处理。2012年CCF( 中国计算机学会 )杰出教育奖获得者。