|
“科学”通常是指对自然现象的探究,而“工程”则是指应用科学的知识改变人们生活于其中的环境,从而使得人们的生活更为方便。计算机科学与软件工程中“科学”与“工程”,也不例外。计算机科学主要是对计算如何进行的规则进行理解,研究内容包括算法、复杂计算、计算机结构、人工智能等。一个对编写成品软件完全茫然的人完全可以成为一位优秀的计算机科学家,或者说一位优秀的计算机科学家对编写成品软件茫然实属正常。
软件工程的一部分工作是学习如何把从计算机科学中学到的知识应用于软件产品的编制。也可以认为,软件工程是学习如何设计、维护和管理软件,如何管理软件的一个发行周期,以及掌握相关的工具链条。所有这些问题对软件产品的编制非常重要,但通常往往不会引起计算机科学家的兴趣。相反,计算机科学中的许多概念与软件工程师的日常工作并不直接相关,比如常数因子为很大数的高级算法。
对计算机科学与软件工程的混淆,通常是由于本科阶段有很多相同的必修课程,部分是因为它们历来就联系紧密,部分是因为学术研究的许多外在的压力使得计算机科学专业为了迎合市场需要而无形中向软件工程偏移。软件工程的研究方向包括:软件结构、软件工程管理、风险管理、软件安全、软件测试等等。计算机科学的研究方向包括:算法、计算理论、编译器、操作系统、人工智能等等。
计算机科学与软件工程的区别,正如它们的名称一样,是科学与工程的区别,即发现知识与应用知识的区别。计算机科学之于软件工程,正如物理学之于机械(电子、核等)工程。计算机科学是数学的一个特殊的分支,它的目标是一个被证实了的理论,而不是一个可以使用的软件。在计算机科学里,也需要编程,但所编写的程序仅是作为一种手段或者一种工具,如同物理学试验中所用的测试设备。无论程序多么复杂,都是为了证明想法是否正确,而不是为了创造经济价值。有时,计算机科学领域的工作人员所写的代码在工程实际中也能发挥作用,但这些代码往往需要进一步升级以适应工程实际的严格要求。
软件工程实质上就上生产有用的并且(或者)有经济价值的产品,软件工程的从业人员必须使用计算机科学的相关知识,正如机械工程师必须使用物理学的相关知识。但是,除此之外,软件工程的从业人员还需要具备相当的工程实践技能,比如,软件测试、软件版本发行、需求管理、用户经验、软件安全,以及一些涉及心理学和人机交互的知识。属于软件工程领域的科研项目,截至目前还是不多见的,它们中的一些其实更多涉及的是计算机科学,而非软件工程。
计算机科学的目的是尽可能的拓展我们对计算的认识,从而理解统治计算领域的自然法则,以及计算领域的边界。而软件工程是一门把知识应用到我们日常的生活当中的学科,通过应用知识来发明技术、改进技术,解决世界难题,从而提高人类的生活质量。
关于计算机科学和软件工程的关系,有一个比喻较为贴切。计算机科学之于软件工程就相当于天文学之于望远镜。天文学远远不止于设计一架望远镜,天文学是研究宇宙中天体的科学,但是为了更好的开展天文学研究,我们往往需要设计一架望远镜。望远镜是因天文研究而生,但望远镜的应用远不止于研究天文,软件工程也一样。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-23 02:52
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社