by YK Sugi

Computer Science VS Software Engineering — Which Major Is Best For You?

WPv6FFhvZsxzM7YyS23P0DQqYqDgVgVPAl2c

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.

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.
  • 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.
  • Mobile/Cloud Developer, Clearbridge Associates Limited
  • Software Engineering, General Dynamics Canada
  • Software Development Engineering, Microsoft
  • Agile Engineer, Pivotal Labs
  • Business Analyst, Canadian Tire Corporation
  • Developer Advocate, Google
  • Product Manager, Dropbox

Software Engineering

  • Software Developer, Tagged Inc
  • Software Developer, IBM Canada
  • Software Manager, Arius Software Corporation
  • Software Engineer, VistaPrint USA
  • Software Engineer, Harris Corporation
  • Software Developer, Accenture Inc.
  • Technical Product Manager — Software Design & Development, NexJ Systems Inc
  • Consultant, PureFacts Financial Solutions
  • Implementation Consultant, 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 136 — Algorithm Design and Data Abstraction
  • MATH 135 — Algebra
  • MATH 136 — Linear Algebra 1
  • MATH 137 — Calculus 1
  • MATH 138 — Calculus 2
  • Plus a few electives

Software Engineering

  • CS 137 — Programming Principles
  • CS 138 — Data Abstraction and Implementation
  • MATH 115 — Linear Algebra for Engineering
  • MATH 117 — Calculus 1 for Engineering
  • MATH 119 — Calculus 2 for Engineering
  • MATH 135 — Algebra for Honours Mathematics
  • ECE 105 — Physics of Electrical Engineering 1
  • ECE 106 — Electricity and Magnetism
  • ECE 124 — Digital Circuits and Systems
  • ECE 140 — Linear Circuits
  • SE 101 — Methods of Software Engineering

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
  • STAT 230 Probability
  • STAT 231 Statistics
  • CS 240 Data Structures and Data Management
  • CS 241 Foundations of Sequential Programs
  • CS 245 Logic and Computation
  • CS 246 Object-Oriented Software Development <- not required in for Software Engineering majors
  • CS 251 Computer Organization and Design
  • CS 341 Algorithms
  • CS 350 Operating Systems
  • Plus, several Computer Science electives

Software Engineering:

  • CHE 102 Chemistry for Engineers
  • ECE 222 Digital Computers (includes assembly language)
  • ECE 358 Computer Networks
  • MATH 213 Advanced Mathematics for Software Engineers
  • MATH 239 Introduction to Combinatorics
  • STAT 206 Statistics for Software Engineering
  • MSCI 261 Engineering Economics: Financial Management for Engineers
  • CS 241 Foundations of Sequential Programs
  • CS 240 Data Structures and Data Management
  • CS 247 Software Engineering Principles <- not required for Computer Science majors
  • CS 341 Algorithms
  • CS 349 User Interfaces <- not required for Computer Science majors
  • CS 343 Concurrent and Parallel Programming <- not required for Computer Science majors
  • CS 348 Introduction to Database Management
  • SE 212 Logic and Computation
  • SE 350 Operating Systems
  • SE 465 Software Testing and Quality Assurance
  • SE 464 Software Design and Architectures
  • SE 463 Software Requirements Specification and Analysis
  • SE 490 Design Project
  • 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.
  • 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.).

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.

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.

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:

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