A couple of previous posts have looked at the differences in Software Engineering, Computer Engineering and Computer Science, from my simple perspective and from a new student viewpoint. Below are some (updated) comments from an academic expert viewpoint, as prepared by Prof. Patrick Lam in the Department Electrical and Computer Engineering (and the Associate Director of the Software Engineering program). If there are questions or comments, I’ll ask him to respond. Note that at Waterloo you can apply to both Software Engineering and Computer Science. They are treated independently for admissions, so you could get two separate offers.
Comparing the BSE in Software Engineering to the BCS in Computer Science
Our Bachelor of Software Engineering degree is an accredited computer science degree, and BSE students take many of the same CS core courses as BCS students. In addition, Software Engineering (BSE) students also take computer engineering (CE) courses and the engineering core, thus satisfying the requirements to be a CEAB-accredited Engineering programme. Like all engineering students, BSE students follow a rather regimented programme and learn about the physical world. BCS students enjoy more flexibility.
Employment outcomes from the BASc in Computer Engineering, the BSE, and the BCS are broadly similar. What you get out of a university education depends less on your specific courses and more on what you put into your courses, your interaction with peers, and your work experience. However, the programmes do differ. To help you choose which programme is the best fit for you, here are some of my personal observations about cohorts and courses.
Cohort: The more regimented programme comes with a cohort system and enables a capstone design project. Each year, Software Engineering aims to admit a new cohort of 125 students; cohorts take most of their core courses together and get to know each other well. In part because of the cohort system, Software Engineering students can work together to complete impressive design projects, including a commercialized TTC trip planner and a social networking site for bands.
Courses: In terms of computer science content, BSE students must take two upper-year three-course sequences that are optional for BCS students: the software engineering course sequence on requirements, design, and validation (which is also open to both BCS and CE students) and the capstone design project (for which there is no CS equivalent). BSE students are also required to take specific upper-year CS courses1, while the BCS has a smaller set of core courses, plus a set of distribution requirements for their upper-year CS courses.
In terms of computer engineering, BCS students take a single course on computer organization and design, whereas BSE students take three courses offered by ECE: two courses on circuits and then a course on computer organization (i.e. processor design). BSE students are thus exposed to much more content about computer hardware than BCS students.
BSE students also take courses common to all engineering programmes, including two physics courses, one chemistry course, and engineering economics. The BSE degree also trades a second statistics course for a course on differential equations. (The math content is otherwise quite similar between the BSE and the BCS.) Knowing differential equations enables BSE students to take a course in feedback control.
Summary: BSE students belong to a cohort, take the engineering core, complete a capstone design project, and satisfy an accredited computer science curriculum. BCS students cover the same range of CS topics, enjoy more flexibility, and are not required to complete the engineering core.
1. Specifically: SE students must take CS349, user interfaces; CS348, databases; and CS343, concurrent and parallel programming. This covers the CS systems and applications areas. BCS students, on the other hand, have a choice between systems, applications, and theory areas, and need to cover at least two of those areas with at least one course.