软件工程这个词是1968年才出现的,当前对其定义和内涵还有不小的争议。一般使用的软件工程定义是IEEE的一个标准“使用系统、规范、可度量的方法进行软件开发、运行和维护。”,但这个定义当前仍然有争议。
作者:知乎用户
链接:https://www.zhihu.com/question/59910016/answer/257760640
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
计算机科学教育历史非常悠久,而单独的软件工程教育时间并不长。第一个软件工程独立教育项目应该是美国卡耐基梅隆大学软件工程研究所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)
如果大学是按照国际规范设计教学体系的话,上面两个列表应该能够准确的说明软件工程和计算机科学教育内容上的不同。
计算机科学与技术的理论基础通常更扎实一些。软件学院不管教学内容体系如何,通常更加重视实践,学生实践能力更好一些。软件工程更加偏向于培养实用性人才。某种程度上可以理解为新时代的技术员,与数年前的纺织、机械技术员无异,只不过我们的“厂子”是各个互联网公司,所要加工的是代码。
计算机科学与技术专业是一个大杂烩。比较重视基础和理论。计科是软硬件的知识都有涉猎,硬件和软件的配合和性能优化也是必学的东西。软工对于硬件电路类的东西就学的比较少。
软件工程专注软件的开发和维护,着重把最好的管理和最好的技术用到软件上来。
而计算机科学与技术面向所有与计算机相关的领域,着重于搭建一个扎实的专业基础,专业课同时涵盖理论、软、硬件领域。