软件工程中的"工程"二字也大有来历,人们把下面的活动称之为工程:
创造性地运用科学原理,设计和实现建筑、机器、装置或生产过程;或者是在实践中使用一个或多个上述实体;或者是实现这些实体的过程。远古时期,人们互相协作建成了不少工程奇迹,其中有些现在还能看到(例如希腊雅典的帕特农神庙、古罗马帝国的罗马水道、中国的长城等),我们想象这些工程在设计和建造的过程中一定牵涉到了大量的计算、计划、各类角色的协作,以及成百上千的人,动物、机械的劳作。这些因素在后来出现的各种"工程"(如化学工
程、土木工程)中依然存在。中国大陆的高校中大致有下面三种讲计算机软件的机构:
计算机科学与技术系或学院
软件学院
软件工程系、软件工程学院
很多同学在报名时不知道它们的区别,进去之后发现除了收费高低不同,学的科目差不多,毕业后大部分同学都是写程序,似乎差别不大13?其实,它们的区别还是挺大的。和数理化相比,计算机科学是一内相当年轻的学科,虽然我们可以追溯到巴贝奇(Charles Babbage:1791-1871)、埃达(AdaLovelace,1815-1852)、图灵(AlanTuring,1912-1954)等计算机科学的先驱,但是"ComputerScience"这个学科的名字是1959年才正式提出,综合维基百科中"计算机科学"的词条和微软学术搜索(Microsoft Academic Search)[注释9]对于计算机科学子领域的划分,计算机科学(Computer Sci-ence)这一学术领域可以分为下面这些领域:
计算理论(Theoretical Computing
信息和编码理论(Information and Coding The-ory)算法和数据结构(Algorithm and Data Struc-ture,形式化方法(Formal Methods)
程序设计语言(Programming Language)偏实践的领域:计算机体系结构(Computer Architecture)
并行计算和分布式系统(Concurrent,Parallel and DistributedSystem)
实时系统和嵌入式系统(Real Time and Embed-ded System)
操作系统(Operating System)
计算机网络(Networking)
科学计算(Scientific Computing)
安全和密码学(Security and Cryptography)
人工智能(Artificial Intelligence)
这个领域酒盖了许多相关的领域,如模式识别(Pattern数据挖掘(DataRecognition)、机器学习(MachineLearning)Mining)、信息提取(Information Retrieval)等。
计算机图形学(Computer Graphics)、计算机视觉(ComputerVision)
多媒体(Multimedia)
数据库和大规模数据处理(Database and Large Scale DataProcessing)
·万维网(World wide Web)
自然语言处理和语音(Natural Language Pro-cessing and Speech)人机交互(Human Computer Interaction)
软件工程(Software ngineering
根据我们对软件特性及工程这一概念的了解,可以看到,计算机科学中的理论研究部分,大多可以从形式上证明,与数学、离散数学、数理逻辑密切相关;计算机科学中与实践相关的部分,都和数据以及其他学科发生关系;软件工程则和人的行为、现实社会的需求息息相关。软件工程的研究目标(软件的开发、运营和维护)都有"人"出现,这些"人"可以是项目需求的提供者,可以是软件的开发人员,还可以是软件的用户。这一特征与其他计算机科学的子领域明显不同。其实,在任何科学领域中,都有偏理论的子领域和偏应用的子领域(例如数学与应用数学),当偏应用的领域得到长足发展之后,就会更多地被大家所熟知,甚至成为一内独立的学科,这并不说明相对应的两方面有高低或优劣之分。