Comparing the BSE in Software Engineering to the BASc in Computer Engineering
Summary: Waterloo's Software Engineering (SE) and Computer Engineering (CE) programmes are both CEAB-accredited Engineering programmes. After the first year (which is quite similar), Software Engineering takes a deeper and more Computer Science-centric view of the material and focuses less on hardware, while Computer Engineering provides a broader overview of material and includes more hardware content. You must have experience with writing programs to be admitted to (and to succeed in) Software Engineering.
Employment outcomes from SE, CE, and Computer Science (CS) 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 culture and courses.
Culture: As an instructor and academic advisor, I've observed a subjective cultural difference between SE classes and CE classes. Perhaps I can summarize it like this: everyone in SE likes writing software. Many of the SE students will program in their free time and will just go ahead and do it for fun (although this is by no means mandatory for success); they participate in events like programming contests, mobile app development, and SE Hack Days.
Courses: Software Engineering is offered jointly by the Department of Electrical and Computer Engineering (ECE) and the Cheriton School of Computer Science (CS). SE students take many core ECE courses. Software Engineering and Computer Engineering start to diverge after first year: while there is substantial overlap in topics1, SE students are taught CS material in greater depth—instructors assume that SE students possess a CS background. On the other hand, Computer Engineering is broader. CE students learn about signals and communications; embedded systems (which interact with the real world through sensors and actuators); and substantially more about circuits and analog and digital hardware systems than SE students.
The most important difference between first year Software Engineering and Computer Engineering is in the introductory programming sequences.
In their first term (1A), SE students take an introductory computer science course, CS137. This course requires prior programming experience; the first two weeks quickly review programming concepts and describe how general concepts in imperative programming map to the C programming language. CS137 moves fast! Its pace allows the course to cover topics like recursion, pointers, and dynamic structures in depth. The Computer Engineering counterpart, ECE150, is more of an introductory programming course; it teaches the C++ programming language at a more beginner-friendly pace. While ECE150 contains many of the same topics as CS137, the treatment is not as deep.
In 1B, SE students take a second computer science course, CS138. This course continues to familiarize students with the key Computer Science concepts of modularity and Abstract Data Types. Computer Engineers generally see the material on Abstract Data Types in second year. CE students' first course on such material is in their third term (2A) in ECE 250 Algorithms and Data Structures.
In upper years, a key difference between SE and CE is that SE students get to take Advanced Technical Electives from both Computer Science and ECE. Both CS and ECE offer ATEs in Artificial Intelligence including CS 485 Statistical and Computational Foundations of Machine Learning, CS 486 Introduction to Artificial Intelligence, ECE 457A Cooperative and Adaptive Algorithms, and ECE 457B Fundamentals of Computational Intelligence. CS offers a number of well-known upper-year courses, including the Big 3: Compilers; Computer Graphics; and Real-time Programming (the "trains course").
To reiterate: SE students get the engineering core and learn about computer science in depth. CE students get some exposure to important computer science topics and learn more about how to build hardware.
— Patrick Lam, Director of Software Engineering
(Two subjects in Software Engineering that are not in Computer Engineering are User Interfaces and Concurrency. Most of the other topics in the SE programme also exist in some form in the CE programme.)