Patrick Lam

Associate Professor, Department of Electrical and Computer Engineering
Director, Software Engineering Programme
University of Waterloo
email: patrick.lam@uwaterloo.ca (no unsolicited commercial email)
phone: use email instead!

Picture of Patrick Lam

Is CS more theoretical than SE?

April 9, 2015

In response to a student question: I'd say that it's a common misconception that CS is more theoretical than SE. It is slightly true of the first two programming courses: CS has CS 135/136 while SE has CS 137/138, and CS 137/138 are indeed a bit more practical as they use C/C++ instead of Racket.

But beyond that point the courses converge again for the most part. The other differences are in 1) the Operating Systems course; I think the SE one is more practical, but taking CS 452 (Real-Time Programming, also known as the trains course) would give you even more experience than SE 350 (Operating Systems); and 2) the hands-on design project, for which there is no CS equivalent there is now a CS equivalent, CS 491/492 (Team Project) [edit June 2017].

Except for those differences, the CS and SE courses are pretty much the same. The key difference in the CS vs SE student experience is the cohort system, I'd say, rather than anything academic.

(OK, there is one more difference: SE students take CS 247, which moves a bit faster than CS 246, because CS 138 will have included more material that would otherwise be in CS 246, because we assume that students already know how to program when they take CS 137.)

CS plus coop gives a great education in software development and actual programming. One way to think of it is that you learn the theory in the CS courses and apply it on coop terms. There are a lot of things that are missing from a CS education, but they're also missing in an SE education. We do incorporate them into the curriculum to some extent in both cases, but you learn them more in industry. Examples include things like version control and agile techniques. Version control we make you use to some extent. Agile is hard to incorporate into a course.

One more thing I should say. Most of the basic programming skills you can acquire on-the-job. CS fundamentals, what we focus on in both CS and SE, are harder to acquire. Things like algorithm analysis and OS scheduling algorithms, for instance. That's where the value of a CS or SE degree is. They aren't immediately applicable, but they help sometimes.

As you noticed, there are also the SE 463/464/465 courses, also offered as CS 445/446/447. You can take them in CS, too. The most practical of those is CS 446 (design). The others (requirements, testing) are somewhat useful and are core to the academic study of Software Engineering, but they're not actually that practical. More theoretical than practical.

Link to this page.

Valid HTML 5!