Another installment from Prof. Patrick Lam, the Associate Director of Software Engineering. A previous one compared Software Engineering to Computer Science. With these various posts, you should have a good overview of the differences and many similarities between the three programs. Note: for Waterloo you can only apply to one of Software or Computer Engineering. If you’re interested in Computer Science too, you need to submit a separate application for that program.
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; 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 1A term, 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. The Computer Engineering course ECE155, on the other hand, contains highlights from the three-course Software Engineering sequence (requirements, design, and testing), as well as content on embedded systems. ECE155 students complete a lab which involves programming Android apps and handling sensor values to navigate the user around obstacles in the real world.
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. 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.
(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.)