编者按:想成为软件工程师、拿到高薪工作,但不知道计算机科学与软件工程哪个专业更适合你?本文编译自medium上原标题为Computer Science VS Software Engineering — Which Major Is Best For You?的文章。
大家好! 我是YK,目前正在运营CS Dojo。这是一个拥有200,000以上用户的YouTube编程教育频道。 我以前也是Google的软件开发人员。
观众最常问我的两个问题是:
“计算机科学和软件工程专业有什么不同?”
以及…
“如果我想成为软件工程师,我应该选择计算机科学还是软件工程专业?”
在这篇文章中,我会回答这个问题,并分享一些我自己对这些专业的分析。
两个专业的概述
1.计算机科学主要从理论和数学的角度研究计算机如何工作。
2.如果你喜欢数学,逻辑学,或者你想进入CS的某个专业领域,例如人工智能,机器学习,计算机安全或图形,你应该选择计算机科学。
3.软件工程研究如何构建软件系统,包括诸如项目管理,质量保证和软件测试等。
4.如果您对实际操作方法更感兴趣,并且想要了解软件构建和维护的整个生命周期,应该选择软件工程。
5.计算机科学和软件工程都是学习编程和计算机科学的基础知识,因此您成为软件开发员,可以任选其一。
要了解计算机科学与软件工程专业之间的差异,我们来先来看看加拿大滑铁卢大学的课程。
我选择滑铁卢大学是因为它是北美计算机科学课程最好的大学之一。
工作前景
我们首先比较一下每个计划对应的工作类型和实习机会。
滑铁卢大学的网站提供了几个例子。
每个专业都有一些校友介绍了自己的工作,以及他们的工作地点:
计算机科学
●Web开发人员/架构师,Steele集团
●程序员,Harry Rosen Inc.
●移动/云开发商Clearbridge Associates Limited
●软件工程,通用动力加拿大
●软件开发工程,微软
●敏捷工程师,Pivotal实验室
●业务分析师,加拿大轮胎公司
●开发者倡导者,谷歌
●产品经理,Dropbox
●软件工程
●软件开发人员,Tagged公司
●软件开发人员,IBM加拿大
●软件经理,Arius软件公司
●软件工程师,VistaPrint USA
●软件工程师, 哈里斯公司
●软件开发人员,埃森哲公司
●技术产品经理 - 软件设计与开发,NexJ Systems Inc
●顾问, PureFacts金融解决方案
●实施顾问,Desire2Learn
如你所见,工作类型之间没有很大差别。
毕业生获得计算机科学或软件工程学位后最常干的工作是软件开发人员或软件工程师。
还有其他选项,例如产品经理,质量保证分析师和技术顾问。您的选择将取决于您的技能组合。
第一年课程:
现在,我们来看看每个专业的必修课程。首先比较一下第一年需要学习的课程。
计算机科学
●CS 135 - 设计功能程序
●CS 136 - 算法设计和数据抽象
●MATH 135 - 代数
●MATH 136 - 线性代数1
●MATH 137 - 微积分1
●MATH 138 - 微积分2
另外还有一些选修课
软件工程
●CS 137 - 编程原则
●CS 138 - 数据抽象和实施
●MATH 115 - 工程线性代数
●MATH 117 - 工程微积分1
●MATH 119 - 工程微积分2
●数学135 - 荣誉数学代数
●ECE 105 - 电气工程物理1
●ECE 106 - 电力和磁力
●ECE 124 - 数字电路和系统
●ECE 140 - 线性电路
●SE 101 - 软件工程方法
如你所见,第一年的课程也很相似,大都涵盖了一些基础的计算机科学课程,以及线性代数和微积分的一些数学课程。
唯一的主要区别是软件工程有额外的物理和电子工程组件课,而计算机科学有更多的选修课。
一年后的课程:
一年之后的必修和选修课程如何?我们来看几个例子:
计算机科学:
●MATH 239组合介绍
●STAT 230概率
●STAT 231统计
●CS 240数据结构和数据管理
●CS 241顺序程序基础
●CS 245逻辑和计算
●CS 246面向对象软件开发< - 对于软件工程专业学生是非必修课
●CS 251计算机组织与设计
●CS 341算法
●CS 350操作系统
此外,还有几门计算机科学选修课
软件工程:
●CHE 102工程师化学
●ECE 222数字计算机(包含汇编语言)
●ECE 358计算机网络
●MATH 213软件工程师高等数学
●MATH 239组合介绍
●STAT 206软件工程统计
●MSCI 261工程经济学:工程师财务管理
●CS 247软件工程原理< - 对计算机科学专业不是必修课
●CS 341算法
●CS 349用户界面< -对计算机科学专业不是必修课
●CS 343并行和并行编程< -对计算机科学专业不是必修课
●CS 348数据库管理简介
●SE 212逻辑和计算
●SE 350操作系统
●SE 465软件测试和质量保证
●SE 464软件设计和体系结构
●SE 463软件需求规格和分析
●SE 490设计项目
此外,还有一些计算机科学和电子工程选修课
上面有很多信息需要消化,下面是我的总结:
谈到数学和统计方面的要求,计算机科学和软件工程几乎完全相同,涵盖了组合,概率和统计。
核心计算机科学需求也相似,包括算法,数据结构和操作系统。
关键区别在于:
软件工程在电气工程和软件工程基础方面有更多的要求,例如软件测试,设计和软件需求规范。
计算机科学学生可以选择更高级别的计算机科学的选修课程。可选择的课程范围很广,例如计算机安全,软件工程基础知识,计算机视觉,机器学习和数据库管理。
那么,你应该选择哪个专业?
我认为这主要取决于你的喜好。简而言之:
1.如果你喜欢数学,逻辑学,或者你想进入CS的专业领域,例如人工智能,机器学习,安全或图形,你应该选择计算机科学。
2.如果您对动手方法更感兴趣,并且想要了解软件构建和维护的整个生命周期,则应该选择软件工程。
但是如果你想成为软件工程师,哪个专业更好?
下面是我的看法。在这个特殊的大学(滑铁卢大学),如果你想成为一名软件工程师,计算机科学是更好的选择。
为了简单起见,假设您希望在北美担任软件工程师,获得薪水最高的职位(约$ 100,000美元/年)。这些工作通常来自于大型软件公司(微软,谷歌,亚马逊等)或中型高增长公司(例如Dropbox,Lyft,Snapchat,Pinterest等)。
通常,这些公司在挑选软件工程师时,寻找的是能够编写可靠代码并构建有趣项目以及拥有计算机科学基础知识(包括数据结构和算法)人才。
我认为培养这套技能的最好方法是快速学习计算机科学基础知识,花时间练习解决问题和编写代码的能力。
基于软件工程课程和工程专业学生一般情况下的繁忙程度,我认为学习软件工程专业比计算机科学更难。
这个特殊的计算机科学课程的另一个好处是它有更多的计算机科学选修课。这也很好,因为根据就业市场的需求,你可以调整自己的课程。例如,如果移动应用程序开发的需求更高,您可以学习这项课程。如果并行计算需求高,您也可以选择这个课程。
我确信学习软件工程基础知识(项目管理,设计,测试等)有一些好处。但我个人宁愿多学一些技能。这就是为什么我认为如果你想成为软件工程师,计算机科学是一门更好的专业。
当然,那只是我的看法,而且只针对这所特定的大学。我很乐意听取您的意见,以及您在计算机科学或软件工程专业的学习经历。
几个笔记
注1:不同的大学对这两个专业有不同的要求。这篇文章应该是一个很好的起点,但你仍然应该看看你有兴趣的大学的课程要求。
注2:一些大学甚至没有软件工程专业。例如,温哥华的不列颠哥伦比亚大学拥有计算机科学和计算机工程学位,但没有软件工程。但是他们的计算机科学专业以及计算机工程专业都有软件工程专业。
如果你感兴趣的大学没有软件工程专业,但你想成为一名软件开发人员,我建议你选择计算机科学。计算机工程专注于硬件而不是计算机科学或软件工程,因此与典型软件开发人员的工作直接相关性较小。
感谢阅读,祝您选择大学和专业顺利!
原文作者:YK Sugishita
编译组出品。编辑:郝鹏程