计算机科学与技术和软件工程的区别在哪里?

387 2021-08-05 学理教育

从以下几个方面回答这个问题:

1、学科情况

2、教育情况

3、国内教育情况

4、给学生建议

5、简单讨论软件工程与编程的区别(尽可能简单化)


1、学科情况

计算机科学与技术这个一级学科是中国特有的,国际上通常只有计算机科学。大部分学校的计算机科学主要来源于数学学科,而软件工程学科是源于计算机科学的(可以类比材料科学源于物理学),一直是计算机科学的一个二级子学科。从国际学科发展看,2001年IEEE提出了“计算学科”的概念,来替代原有的计算机科学学科,计算学科包括了计算机科学、计算机工程、软件工程、信息系统、信息技术五个子学科。但就我的感觉,现在绝大部分国外大学基本还是以计算机科学为主。在中国,2011年开始,软件工程开始和计算机科学与技术并列为一级学科。

由于中国大学科研和学位授予和国家的学科划分以及教育政策紧密相关,所以各大学才会有计算机科学与技术以及软件工程的分别招生。

软件工程这个词是1968年才出现的,当前对其定义和内涵还有不小的争议。一般使用的软件工程定义是IEEE的一个标准“使用系统、规范、可度量的方法进行软件开发、运行和维护。”,但这个定义当前仍然有争议。


2、教育情况

计算机科学教育历史非常悠久,而单独的软件工程教育时间并不长。第一个软件工程独立教育项目应该是美国卡耐基梅隆大学软件工程研究所1989年的软件工程硕士项目,后来在2000年前后一些大学有了专门的软件工程本科教育,现在美国大学有专门软件工程本科的学校并不是太多,包括:加州大学尔湾分校,宾州州立大学公园分校,迈阿密大学等。

对于软件工程教育和计算机科学教育的区别,国际学术界和教育界进行了很多研究,取得了一些共识。大家可以看一下IEEE和ACM共同制定的2014年软件工程知识体(SWEBOK)列出的软件工程教育领域(计算基础包含了计算机科学的很多教育内容):

  • 软件需求

  • 软件设计

  • 软件构造

  • 软件测试

  • 软件维护

  • 软件配置管理

  • 软件工程管理

  • 软件工程过程

  • 软件工程模型与方法

  • 软件质量

  • 软件工程职业实践

  • 软件工程经济学

  • 计算基础

  • 数学基础

  • 工程基础

计算机科学知识体(2001年IEEE和ACM共同制定,可能有新的,但估计差别不大。软件工程是计算机科学的一个子领域。):

  • Discrete Structures (DS)

  • Programming Fundamentals (PF)

  • Algorithms and Complexity (AL)

  • Architecture and Organization (AR)

  • Operating Systems (OS)

  • Net-Centric Computing (NC)

  • Programming Languages (PL)

  • Human-Computer Interaction (HC)

  • Graphics and Visual Computing (GV)

  • Intelligent Systems (IS)

  • Information Management (IM)

  • Social and Professional Issues (SP)

  • Software Engineering (SE)

  • Computational Science and Numerical Methods (CN)


如果大学是按照国际规范设计教学体系的话,上面两个列表应该能够准确的说明软件工程和计算机科学教育内容上的不同

3、国内教育情况

问题就在于国内很多大学软件工程和计算机科学与技术的教育根本不是按照国际规范制定的。很多学校的软件工程教育没有覆盖SWEBOK要求的所有内容,仅仅是把传统计算机科学与技术课程体系简单加上几门实践课而已。

所以有人问国内软件工程和计算机科学与技术教育的区别,我觉得现在对这个问题进行严格讨论是没有意义的。

要说教学有实质性区别的地方,大部分软件学院是允许和鼓励学生去企业带薪实习的,而计算机学院一般不允许(当然要看具体学校)。

国内软件学院收费较高,是特定国家政策造成的,和教育本身关系不大。

4、给学生的建议

入学:同等学校计算机科学与技术学费低,难考一些;软件学院学费高,通常好考一些。

培养:计算机科学与技术的理论基础通常更扎实一些。软件学院不管教学内容体系如何,通常更加重视实践,学生实践能力更好一些。(各个学校差异性非常大,建议报考前认真咨询一下。)

就业:差距很小。

据我了解大部分软件学院的工程硕士都有8-10个月的实习期(有些学校本科也有实习),好的实习月工资可以达到3000-6000元,因此,从经济上看并不会有大的差距,甚至软件学院更好。另外,如果考虑到软件工程硕士通常只读2年,而一般计算机科学与技术硕士3年,晚1年毕业的机会成本其实对学生来说更重要。

5、软件工程与编程不同

软件工程是建立在计算机科学基础之上的一个工程性学科。它不是单纯的编程问题求解,在时间维度、人员(规模)维度、多因素权衡博弈维度上对工作人员提出了更高的要求。

第一个区别是软件存活的时间。存活时间不同软件开发方式不同。常见短存活周期软件有:

  • 新手学习编程时,练习编写的代码,存活时间只有几小时或几天,只写一次,几乎不需要重构,也不需要长期维护,在最初写完后(交给助教批改后)通常不会再执行;

  • 大学软件工程教学中的团队项目作业寿命可能超过一个月,可能需要少量重构或应对变更,但不会应对广泛的变化;

  • 行业中也有很多短期代码,比如很多移动应用程序的寿命只有6个月;创业型公司可能生存期不超过1年,其中工程师写代码时不会预计代码寿命超过一年。

但部分软件的生存周期可能会很长(无限预期):

  • Linux内核

  • Apache HTTP Server

  • 医疗器械软件

  • 银行核心交易系统

对于仅存在一个小时的程序(大学编程课程作业),不需要考虑其基础库(比如JDK版本),操作系统版本,硬件等的变更。这些短暂的系统实际上是“仅”一个编程问题,就像在一个维度上压缩立方体是一个正方形一样。 随着我们考虑软件存活的时间变长,改变变得越来越重要。在十年或更长时间的跨度中,大多数程序依赖的东西(无论是隐式还是显式,比如编译器、操作系统、硬件、网络等)都可能会改变。 这是我们区分软件工程和编程的根本

立方体不是正方形;软件工程不是编程。

第二个区别是参与软件开发的人数(规模)。编程通常是一个人,但软件工程任务团队合作完成。软件工程与编程的差异一个维度是时间,另一个维度就是人数。团队协作带来了很多问题,但它也能够提供比任何单个程序员更多的能力来生产有价值的系统。伴随着人员的增加,产生了众多困难的沟通、管理问题:

  • 人员沟通效率?

  • 人员工作积极性?

  • 同事关系与团队士气?

  • 工作流程效率?

第三个区别是需要作出决策的复杂性及其风险。Alistair Cockburn认为软件工程是“创造和沟通的合作博弈”。软件工程需要考虑软件开发的成本,而简单编程不需要:

  • 财务成本(例如:金钱)

  • 资源成本(例如:CPU时间)

  • 人员成本(例如:工程工作量)

  • 交易成本(例如:采取行动需要多少费用)

  • 机会成本(例如:“不”采取行动要损失多少钱)

  • 社会成本(例如:这种选择会对整个社会产生什么影响)

比如软件工程师需要考虑“如果我花两周的时间将此链接列表改为更高性能的结构,我将使用多出5G RAM,但要节省2000个CPU。我应该这么做吗?” 这个问题不仅取决与RAM和CPU的相对成本,还取决与人员成本(工程师两周工作时间)和机会成本(工程师在两周内还能生产什么)。


标签:暂无标签

来源:学理教育

相关文章

    暂无相关文章

服务热线

  • 联系电话

    13966668888

  • 电子邮箱

    xueli580@163.com

官方微信

官方抖音

返回顶部

学员注册/登录

勾选代表您已经阅读并同意 《学理教育用户协议》