什么叫
“
我是搞计算机的
”
?
九阳豆浆机JYDZ-29
作者
陈道蓄
导言
计算机无疑是
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
年先后在美国普度大学和香港城市大学作访问学者,现任南京大学计算机系主任。目前的研究方向为分布式计算、并行处理。先后参加多项国家攻关和
“863”
研究项目,获国家教委科技进步一等奖、二等奖各
分享到:
相关推荐
如果搞清了什么是网关,默认网关也就好理解了。就好像一个房间可以有多扇门一样,一台主机可以有多个网关。默认网关的意思是一台主机如果找不到可用的网关,就把数据包发给默认指定的网关,由这个网关来处理数据包。...
- **主动寻求机会**:“希望可以有人叫我帮忙做点事情”,表达了实习生渴望参与更多工作内容的心情。在职场中,积极主动的态度往往能为自己赢得更多的学习和发展机会。 #### 挑战项目:网吧建设与维护 - **综合...
当然我不可能叫你编写这些代码,这不实现。事实上这个 3 者都能在网下载到相应的源代码,但是这个源代码不可能下载编译后就能在你的系统上运行,需要很多的修改,直到他能运行在你的板子上,这个修改的过程就叫移植...
那么,什么情况下使用 TCP,什么情况下使用 UDP 呢?最早的时候,DNS 的 UDP 报文上限大小是 512 字节,所以当某个 response 大小超过 512 (返回信息太多),DNS 服务就会使用 TCP 协议来传输。后来 DNS 协议扩展了...
我还是学计算机这么多年的的,各种找算是很会的人了,所以啊,我想很多初学者或许在搭开发平台这一关就被磨却了信心与兴趣了。 怪不得这么神秘! 现在把这两天的经验总结下,或许可供后来人借鉴: 要安装的东西都...
[比较简单]可以学习到你对指针不了解不清楚的东西如:指针是一个特殊的...要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。
13.什么叫应用程序域? 答:应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小。 14.CTS、CLS、CLR分别作何解释? 答:CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。 15.什么是...
是把人的姓名赋上“张三”,那么用这个类实例出几十个人,这几十个人都叫张三了,所以 没有必要, 我们在实例出对象后给成员属性初始值就可以了。 如: var $somevar; 方法(成员函数): 通过在类定义中声明函数,即...
2002年的时候,我当时在新加坡搞计算机通信,听说国内要搞3G就动了回国的念头。这之前我在华为做过GSM系统开发,那是97年左右的事情,当时GSM技术完全垄断在国外巨头手中,我们做技术开发,简直是一穷二白,关
来了什么元旦、春节,把计算机上把单位领导同事、亲朋好友、大头客户勾勾选选,计算机上一个群发,就把节日乱七八糟的祝福负担都解除了。那叫一个爽! 其实一点也不难,大头玩家那些小把戏一层纸就能捅破。MM们把手...
第二,对一些典型的例子,一定要搞懂,记住,不是叫你去死记,例如运算符重载中complex的例子,将概念与例子结合,就容易理解概念,同时当你自己编程时,你就会想这与那个例子类似,然后先模仿,慢慢你就能熟能生巧...
在计算机编程中,特别是对于像C和C++这样的底层语言而言,指针是一个极其重要的概念。理解指针的本质及其使用方式对于程序员来说至关重要。本文旨在深入解析指针的概念,并通过具体的例子帮助读者更好地掌握指针的四...
控制器是计算机的指挥中心,有必要搞清它的组成和原理。控制器包括指令部件、程序计数器、指令寄存器、指令译码器等。 程序计数器 PC 是指令的集合,计算机运行时,通常按顺序执行存放在存储器中的程序。指令寄存器...
书中涉及算法都会有golang版本实现(有能量再搞一版cpp的,毕竟老本行了) golang标准库原始码元自然涉及到各种算法以及最佳实践,子句之下,了无秘密,学习优秀的代码如何写,才能够持续进步,doc下后续
另一类是学软件、计算机专业出身的人,主要从事嵌入式操作系统和应用软件的开发。如果我们学软件的人对硬件原理和接口有较好的掌握,我们完全也可写BSP和硬件驱动程序。 嵌入式硬件设计完后,各种功能就全靠软件来...
我是一名武汉大学电子科技大3的学生,学了电子线路、数字逻辑、汇编和接口、C语言,但是总是感觉很迷茫,觉好象什么都不会。怎么办? 答:大学过程是一个理论过程,实践的机会比较少,往往会造成理论与实践相...
土木学院有一个叫启明星的公司开发出一个好象叫“工程 e”的掌上 PDA(南校区门口有广告),施工技术人员用该 PDA 可当场进行土木概预算和其它土木计算,据说销路特好。我认识的某大学老师,他开发的饭馆用的点菜 ...
这是大二的时候我帮一个朋友的朋友,一个非计算机系但学计算 机相关专业的学生,做的一个毕业设计作品。真有点奇怪,他们老师 怎么会要求编写一个屏幕保护程序作为毕业设计呢?朋友的事义不容 辞,即使是朋友的...
UE4是一家叫Epic Games的公司做的一个名叫unrealengline,中文名虚幻4的免费游戏引擎, EpicGames由来,1991年Tim Sweeney在马里兰州的罗克维尔创立了EpicMegaGames,依托于波托马克计算机系统。同年通过波托马克...