从以下几个方面回答以下这个问题:
1、学科情况
2、教育情况
3、国内教育情况
4、给学生建议
1、学科情况
计算机科学与技术这个一级学科是中国特有的,国际上通常只有计算机科学。大部分学校的计算机科学主要来源于数学学科,而软件工程学科是源于计算机科学的(可以类比材料科学源于物理学),一直是计算机科学的一个二级子学科。从国际学科发展看,2001年IEEE提出了“计算学科”的概念,来替代原有的计算机科学学科,计算学科包括了计算机科学、计算机工程、软件工程、信息系统、信息技术五个子学科。但就我的感觉,现在绝大部分国外大学基本还是以计算机科学为主。在中国,2011年开始,软件工程开始和计算机科学与技术并列为一级学科。
由于中国大学科研和学位授予和国家的学科划分以及教育政策紧密相关,所以各大学才会有计算机科学与技术以及软件工程的分别招生。
软件工程这个词是1968年才出现的,当前对其定义和内涵还有不小的争议。一般使用的软件工程定义是IEEE 1984年的一个标准“使用系统、规范、可度量的方法进行软件开发、运行和维护。”,但这个定义当前仍然有争议。
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、给学生的建议
入学:同等学校计算机科学与技术学费低,难考一些;软件学院学费高,通常好考一些。
培养:计算机科学与技术的理论基础通常更扎实一些。软件学院不管教学内容体系如何,通常更加重视实践一些。(各个学校差异性非常大,建议报考前认真咨询一下。)
就业:差距很小。
网友评论