计算机科学与软件工程-哪个专业最适合您?

by YK Sugi

由YK Sugi

计算机科学与软件工程- 哪个专业最适合您? (Computer Science VS Software Engineering — Which Major Is Best For You?)

Hey everyone! My name is YK, and I’m currently running CS Dojo, a programming education YouTube channel with 200,000+ subscribers. I was also formerly a software developer at Google.

嘿大家! 我叫YK,目前正在运行CS Dojo ,这是一个拥有200,000多名订阅者的YouTube编程教育频道。 我以前也是Google的软件开发人员 。

Two of the most common questions my audience asks me are:

听众问我的两个最常见的问题是:

“What’s the difference between Computer Science and Software Engineering majors?”

“计算机科学与软件工程专业的学生有什么区别?”

And…

和…

“Should I choose Computer Science or Software Engineering if I want to become a software engineer?”

“如果我想成为软件工程师,应该选择计算机科学还是软件工程?”

In this article, I’ll answer this and give you my own quick analysis on these majors.

在本文中,我将回答这个问题,并为您提供有关这些专业的快速分析。

这两个专业的快速概述 (A quick overview of these two majors)

  • Computer Science is the study of how computers work, mostly from the theoretical and mathematical perspective.

    计算机科学主要是从理论和数学的角度研究计算机的工作方式。
  • You should choose Computer Science if you like math, logic, or if you want to get into a specialized field in CS such as artificial intelligence, machine learning, security, or graphics.

    如果您喜欢数学,逻辑,或者想要进入CS的专业领域(例如人工智能,机器学习,安全性或图形),则应该选择“计算机科学”。
  • Software Engineering is the study of how software systems are built, including topics such as project management, quality assurance, and software testing.

    软件工程是关于如何构建软件系统的研究,包括诸如项目管理,质量保证和软件测试之类的主题。
  • You should choose Software Engineering if you are more interested in the hands-on approach, and if you want to learn the overall life cycle of how software is built and maintained.

    如果您对动手方法更感兴趣,并且想了解软件构建和维护的整个生命周期,则应该选择软件工程。
  • Both Computer Science and Software Engineering teach fundamentals of programming and computer science, so you can choose either one to become a software developer.

    计算机科学和软件工程都教授编程和计算机科学的基础知识,因此您可以选择其中任何一个成为软件开发人员。

To understand the difference between Computer Science and Software Engineering majors, let’s take a look at their respective curriculum at University of Waterloo in Canada.

要了解计算机科学专业和软件工程专业之间的区别,让我们看一下加拿大滑铁卢大学各自的课程。

I chose University of Waterloo for this because it has one of the best computer science programs in North America.

我之所以选择滑铁卢大学,是因为它拥有北美最好的计算机科学程序之一。

工作前景 (Job prospects)

Let’s first compare the kinds of jobs and internships you can get through each program.

首先,我们比较一下每个程序可以得到的工作和实习的种类。

Thankfully, University of Waterloo’s website provides several examples.

值得庆幸的是,滑铁卢大学的网站提供了几个示例。

For each major, here are some of the titles alumni hold, and where they work:

对于每个专业,这里有一些校友的头衔以及他们的工作地点:

计算机科学 (Computer Science)
  • Web Developer/Architect, The Steele Group

    网站开发者/建筑师,斯蒂尔集团
  • Programmer, Harry Rosen Inc.

    程序员,Harry Rosen Inc.
  • Mobile/Cloud Developer, Clearbridge Associates Limited

    Clearbridge Associates Limited移动/云开发人员
  • Software Engineering, General Dynamics Canada

    加拿大通用动力公司软件工程
  • Software Development Engineering, Microsoft

    微软软件开发工程
  • Agile Engineer, Pivotal Labs

    关键实验室敏捷工程师
  • Business Analyst, Canadian Tire Corporation

    加拿大轮胎公司业务分析师
  • Developer Advocate, Google

    Google开发者倡导者
  • Product Manager, Dropbox

    Dropbox产品经理
软件工程 (Software Engineering)
  • Software Developer, Tagged Inc

    Tagged Inc软件开发人员
  • Software Developer, IBM Canada

    IBM加拿大软件开发人员
  • Software Manager, Arius Software Corporation

    Arius Software Corporation软件经理
  • Software Engineer, VistaPrint USA

    VistaPrint美国软件工程师
  • Software Engineer, Harris Corporation

    哈里斯公司软件工程师
  • Software Developer, Accenture Inc.

    埃森哲公司软件开发人员
  • Technical Product Manager — Software Design & Development, NexJ Systems Inc

    NexJ Systems Inc.技术产品经理—软件设计与开发
  • Consultant, PureFacts Financial Solutions

    PureFacts金融解决方案顾问
  • Implementation Consultant, Desire2Learn

    Desire2Learn实施顾问

As you can see, there isn’t a huge difference between the types of jobs you can get.

如您所见,您所能获得的工作类型之间并没有太大的区别。

The most common job graduates get after earning their Computer Science or Software Engineering degree is Software Developer or Software Engineer.

毕业生获得计算机科学或软件工程学位后获得的最常见工作是软件开发人员或软件工程师。

There are other related options as well, such as Product Manager, QA Analyst, and Technology Consultant. Your options will depend on your specific skill set.

还有其他相关选项,例如产品经理,质量检查分析师和技术顾问。 您的选择将取决于您的特定技能。

第一年课程: (First-year courses:)

Now, let’s take a look at each program’s required courses. Let’s first compare some of the courses you’d need to take in your first year.

现在,让我们看一下每个程序的必修课程。 我们首先比较一下第一年需要参加的一些课程。

计算机科学 (Computer Science)
  • CS 135 — Designing Functional Programs

    CS 135 —设计功能程序
  • CS 136 — Algorithm Design and Data Abstraction

    CS 136 —算法设计和数据抽象
  • MATH 135 — Algebra

    MATH 135 —代数
  • MATH 136 — Linear Algebra 1

    MATH 136 —线性代数1
  • MATH 137 — Calculus 1

    数学137 —微积分1
  • MATH 138 — Calculus 2

    数学138 —微积分2
  • Plus a few electives

    加上一些选修课
软件工程 (Software Engineering)
  • CS 137 — Programming Principles

    CS 137-编程原理
  • CS 138 — Data Abstraction and Implementation

    CS 138 —数据抽象和实现
  • MATH 115 — Linear Algebra for Engineering

    MATH 115 —工程线性代数
  • MATH 117 — Calculus 1 for Engineering

    MATH 117 —工程微积分1
  • MATH 119 — Calculus 2 for Engineering

    数学119 —工程微积分2
  • MATH 135 — Algebra for Honours Mathematics

    MATH 135-荣誉数学代数
  • ECE 105 — Physics of Electrical Engineering 1

    ECE 105-电机工程物理1
  • ECE 106 — Electricity and Magnetism

    ECE 106 —电磁学
  • ECE 124 — Digital Circuits and Systems

    ECE 124 —数字电路和系统
  • ECE 140 — Linear Circuits

    ECE 140 —线性电路
  • SE 101 — Methods of Software Engineering

    SE 101 —软件工程方法

As you can see, the first year courses are fairly similar as well. They both cover a few fundamental computer science courses, and a few math courses in linear algebra and calculus.

如您所见,第一年的课程也非常相似。 它们都涵盖了一些基础计算机科学课程,以及一些有关线性代数和微积分的数学课程。

The only major difference is that Software Engineering has additional physics and electrical engineering components, while Computer Science has a few more electives.

唯一的主要区别是软件工程具有附加的物理和电气工程组成部分,而计算机科学具有更多的选修课。

第一年后的课程: (Courses after the first year:)

How about the required and elective courses after the first year? Let’s take a look at several examples here:

第一年后的必修和选修课程怎么样? 让我们在这里看几个例子:

计算机科学: (Computer Science:)
  • MATH 239 Introduction to Combinatorics

    MATH 239组合学概论
  • STAT 230 Probability

    STAT 230机率
  • STAT 231 Statistics

    STAT 231统计
  • CS 240 Data Structures and Data Management

    CS 240数据结构和数据管理
  • CS 241 Foundations of Sequential Programs

    CS 241顺序程序基础
  • CS 245 Logic and Computation

    CS 245逻辑与计算
  • CS 246 Object-Oriented Software Development <- not required in for Software Engineering majors

    CS 246面向对象的软件开发 <-软件工程专业不需要

  • CS 251 Computer Organization and Design

    CS 251计算机组织与设计
  • CS 341 Algorithms

    CS 341算法
  • CS 350 Operating Systems

    CS 350操作系统
  • Plus, several Computer Science electives

    另外,一些计算机科学选修课
软件工程: (Software Engineering:)
  • CHE 102 Chemistry for Engineers

    CHE 102化学工程师
  • ECE 222 Digital Computers (includes assembly language)

    ECE 222数字计算机(包括汇编语言)
  • ECE 358 Computer Networks

    ECE 358计算机网络
  • MATH 213 Advanced Mathematics for Software Engineers

    适用于软件工程师的MATH 213高等数学
  • MATH 239 Introduction to Combinatorics

    MATH 239组合学概论
  • STAT 206 Statistics for Software Engineering

    STAT 206软件工程统计
  • MSCI 261 Engineering Economics: Financial Management for Engineers

    MSCI 261工程经济学:工程师的财务管理
  • CS 241 Foundations of Sequential Programs

    CS 241顺序程序基础
  • CS 240 Data Structures and Data Management

    CS 240数据结构和数据管理
  • CS 247 Software Engineering Principles <- not required for Computer Science majors

    CS 247软件工程原理 <-计算机科学专业不需要

  • CS 341 Algorithms

    CS 341算法
  • CS 349 User Interfaces <- not required for Computer Science majors

    CS 349用户界面 <-计算机科学专业不需要

  • CS 343 Concurrent and Parallel Programming <- not required for Computer Science majors

    CS 343并发和并行编程 <-计算机科学专业不需要

  • CS 348 Introduction to Database Management

    CS 348数据库管理简介
  • SE 212 Logic and Computation

    SE 212逻辑与计算
  • SE 350 Operating Systems

    SE 350操作系统
  • SE 465 Software Testing and Quality Assurance

    SE 465软件测试和质量保证
  • SE 464 Software Design and Architectures

    SE 464软件设计和架构
  • SE 463 Software Requirements Specification and Analysis

    SE 463软件需求规范和分析
  • SE 490 Design Project

    SE 490设计项目
  • Plus, a few computer science and electrical engineering electives

    另外,一些计算机科学和电气工程选修课
我给您提供了很多信息,可以在这里进行摘要。 但是,这是我的摘要: (I’ve given you a LOT of information to digest here. But here’s my summary:)

When it comes to the requirements in math and statistics, Computer Science and Software Engineering are almost identical. They cover combinatorics, probability and statistics.

当谈到数学和统计学方面的要求时,计算机科学和软件工程几乎是相同的。 它们涵盖组合,概率和统计。

The core computer science requirements are similar as well, ranging over algorithms, data structures, and operating systems.

核心计算机科学要求也相似,涉及算法,数据结构和操作系统。

The key difference are that:

关键区别在于:

  • Software Engineering has more requirements in electrical engineering and software engineering fundamentals, such as software testing, design, and software requirements specification.

    软件工程在电气工程和软件工程基础方面有更多要求,例如软件测试,设计和软件需求规范。

  • Computer Science allows more electives in higher-level computer science courses. You can choose from a wide range of topics such as security, software engineering fundamentals, computer vision, machine learning, and database management.

    计算机科学允许在更高级别的计算机科学课程中有更多的选修课。 您可以从广泛的主题中进行选择,例如安全性,软件工程基础知识,计算机视觉,机器学习和数据库管理。

那么,您应该选择哪个专业? (So, which major should you choose?)

I think it mostly depends on your preferences. In short:

我认为这主要取决于您的喜好。 简而言之:

  • You should choose Computer Science if you like math, logic, or if you want to get into a specialized field in CS such as artificial intelligence, machine learning, security or graphics.

    如果您喜欢数学,逻辑,或者想要进入CS的专业领域(例如人工智能,机器学习,安全性或图形),则应该选择“计算机科学”。
  • You should choose Software Engineering if you’re more interested in the hands-on approach, and if you want to learn the overall life cycle of how software is built and maintained.

    如果您对动手方法更感兴趣,并且想了解软件构建和维护的整个生命周期,则应该选择软件工程。

但是等等-那是什么? 如果您想成为软件工程师,哪个专业更好? (But wait — which is it then? Which major is better if you want to be a software engineer?)

Here is my opinion. At this particular university (University of Waterloo), with this particular set of program requirements, Computer Science is a better major if you want to be a software engineer.

这是我的意见。 在这所特殊的大学(滑铁卢大学)中,由于有这套特定的课程要求,如果您想成为一名软件工程师,计算机科学是更好的专业。

Just for simplicity, let’s suppose that you are hoping to get one the highest paying jobs (~$100,000 USD / year) as a software engineer in North America. These jobs are typically at large software companies (think Microsoft, Google, Amazon, etc.) or at medium-sized, high-growth companies (think Dropbox, Lyft, Snapchat, Pinterest, etc.).

为简单起见,让我们假设您希望成为北美一名软件工程师,薪水最高(约100,000美元/年)。 这些工作通常在大型软件公司(例如微软,谷歌,亚马逊等)或中型,高增长公司(例如Dropbox,Lyft,Snapchat,Pinterest等)进行。

Typically, what they look for in a software engineer candidate is the ability to write solid code and build interesting projects, as well as computer science fundamentals including data structures and algorithms.

通常,他们在软件工程师候选人中寻找的就是能够编写可靠的代码并构建有趣的项目的能力,以及包括数据结构和算法在内的计算机科学基础知识。

I think the best way to cultivate this skill set is by quickly learning computer science fundamentals, and spending your own time practicing solving problems and writing code.

我认为,培养这种技能的最佳方法是快速学习计算机科学基础知识,并花费自己的时间练习解决问题和编写代码。

Based on the curriculum for Software Engineering and based on how busy engineering students tend to be in general, I think it would be harder to do this with Software Engineering than with Computer Science.

基于软件工程课程,并根据一般工程专业学生的忙碌程度,我认为使用软件工程比使用计算机科学更难。

Another benefit of this particular Computer Science program is that it allows more computer science electives. This is great as well because depending on what’s in demand in the job market, you’ll be able to adjust your courses. For example, if mobile app development is in demand, you can learn that. And if parallel computing is in demand, you can focus on that instead.

这个特定的计算机科学计划的另一个好处是,它允许更多的计算机科学选修课。 这也很好,因为您可以根据就业市场的需求调整课程。 例如,如果需要开发移动应用程序,则可以了解到这一点。 而且,如果需要并行计算,您可以专注于此。

I’m sure there are some benefits to learning software engineering fundamentals (project management, design, testing, etc.). But I would personally rather take flexibility over a predefined set of skills. That’s why I think Computer Science is a better major to become a software engineer with this particular curriculum.

我确信学习软件工程基础知识(项目管理,设计,测试等)会有一些好处。 但是我个人宁愿在预定义的技能上采取灵活性。 这就是为什么我认为计算机科学是成为具有此特定课程的软件工程师的更好的专业。

Of course, that’s just my opinion, and this is just one particular university. I’d love to hear about your opinion and what your experience was like if you majored in either Computer Science or Software Engineering. Please let me know in a comment below.

当然,那只是我的看法,而这只是一所特殊的大学。 如果您是计算机科学或软件工程专业的学生,​​我很想听听您的意见以及您的经历。 请在下面的评论中让我知道。

一些注意事项 (A few notes)

Note 1: Different universities have different requirements for these two majors. This article should be a good starting point, but you should still take a look at the program requirements at the university you’re interested in attending.

注1:不同的大学对这两个专业有不同的要求。 本文应该是一个很好的起点,但是您仍然应该看看有兴趣参加的大学的课程要求。

Note 2: Some universities don’t even have a Software Engineering major. For example, the University of British Columbia in Vancouver has Computer Science and Computer Engineering degrees, but not Software Engineering. But they do have a software engineering concentration within their Computer Science program, as well as in Computer Engineering.

注意2:有些大学甚至没有软件工程专业。 例如,温哥华的不列颠哥伦比亚大学拥有计算机科学和计算机工程学位,但没有软件工程学位。 但是他们确实在计算机科学计划以及计算机工程中都集中了软件工程。

If the university you’re interested in going to doesn’t have a Software Engineering major, I would go with Computer Science if you want to become a software developer. Computer Engineering is more focused on hardware than Computer Science or Software Engineering, so it’s less directly related to a typical software developer’s job.

如果您感兴趣的大学没有软件工程专业,那么如果您想成为软件开发人员,我会选择计算机科学。 与计算机科学或软件工程相比,计算机工程更关注硬件,因此它与典型软件开发人员的工作没有直接关系。

这是我使用的主要资源: (And here are the main sources I used:)
  • Computer Science at Waterloo

    滑铁卢的计算机科学

  • Software Engineering at Waterloo

    滑铁卢的软件工程

Thanks for reading, and good luck choosing a university and your major! ?

感谢您的阅读,并祝您选择一所大学和您的专业好运! ?

翻译自: https://www.freecodecamp.org/news/computer-science-vs-software-engineering-which-one-is-a-better-major-88482c38446b/

你可能感兴趣的:(数据结构,软件测试,大数据,编程语言,python)