University of Waterloo

Waterloo Software Engineering

I am enrolled in Software Engineering at the University of Waterloo from 2021-2026.

Some good articles


Program-specific advice:

  • Do as many Technical Deep Dives as possible, while you still have the time. You won’t have this opportunity as much in the future, so it’s important you build as strong of a foundation as possible

Courses I have taken for my program






3B SE Requirement fulfillments:

Science electives:

  • PHYS234 Some very fundamental quantum learning

Linkage electives:

CS Courses sorted by usefulness

Must take courses

  • CS370: Numerical Computation (prereq for computer graphics)
  • CS488: Computer graphics

Courses that I want to take:

Courses that catch my eye:


  • Take SCI201 or Psych course, for the science electives

  • take AFM101 so I get my Accounting skills

  • CS 454: Distributed Systems

From Patrick Lam


All the requirements for your degree are here: This text mostly summarizes information from there.

Getting into courses

Best practice is to select courses during course selection, which occurs the term before. If you don’t course select your CS courses, you probably won’t get into your preferred course, due to capacity constraints. In all cases, you really have a much better chance of getting into courses if you add them during course selection.

Sometimes there are prerequisites that you don’t meet for a course that you would like to take. This should be rare for CS courses. Anyway, you email the instructor (look at unless it’s a CS course, in which case you email csadvisors. Instructors can provide an email OK and then you send it to se-advisor and Shaz adds you to the course. If you are on a CS waitlist, CS will provide a permission number and you use it to add the course on Quest.

It is also possible to get approvals to use courses that aren’t on the list. Contact SE Admin (Shaz, Paul, or Victoria).

About ATEs

Starting in third year, you can take Advanced Technical Electives.

  • 3A and 3B: normally take one elective across the two terms (can take 2 if you want)
  • 4A and 4B: take seven electives across the two terms

You have to take 3 ATEs. You also have 2 open electives, which can be anything that you can register in. Possibly ATEs. We are going to ignore the other electives.

There are three lists. You have to take 1 CS ATE, 1 ECE ATE, and 1 from the CS, ECE, or extended lists.

There are also grad courses which you can take with the permission of the instructor to enroll in and from SE Admin to count as an ATE.

ECE List

ECE ATEs are generally available spring and winter, but only once a year.

Some ECE courses have level 3A or 4A required, prereqs not a problem usually.

Note that there are some antireqs between CS ATEs and ECE ATEs, because people think there’s too much overlap. Examples: CS 454/ECE 454, ECE 457B/CS 486. ECE 409 is taken far less than its antireq CS 458.

I’m going to list popular courses, but I encourage you to look at all the courses and decide if there’s perhaps something that you might find more interesting.

The three most popular ECE ATEs among SE students are ECE 459 (Programming for Performance), ECE 454 (Distributed Computing), and ECE 458 (Computer Security). ECE 457A is somewhat popular, and other courses are taken sometime.

CS List

The requisite “CS students only” includes SE students. SE students are CS students.

CS 350/SE 350 is a common req that blocks some things until after 3A. After 3A you can take pretty much anything, except:

  • CS 370 Numerical Computation or CS 371 Intro to Computation Mathematics is prereq for CS 488 (Computer Graphics), also CS 479 (Neural Networks) and CS 484 (Computational Vision.

The “Big 3” are CS 444 (Compiler), CS 452 (Real-Time Programming aka trains), CS 488 (Computer Graphics). They are high-workload courses that involve a lot of programming.

Don’t take 2 of the Big 3 in the same term. Some students have taken more than 1 Big 3 course. CS 444 surprisingly popular (36 enrollments over my reference period), CS 488 about the same. CS 452 not.

CS 370 is quite popular. There are no runaway winners, but these courses are often taken: CS 370, CS 442, CS 444, CS 448, CS 449, CS 451, CS 458, CS 480. CS 486, CS 488.

Distributed computing:

  • CS454, ECE454, CS451? Check the differences

Not CS

CS 492 is a good List A impact course. It is not an ATE. You actually have to write text. It’s about an important topic: what the tech that you create is doing to society.

CO: CO 487 is popular, the other CO courses on the ATE list are taken by 1-2 students per term at most. STAT too. STAT is picky with requisites. A handful of students (up to 4) have taken the SYDE courses. No one has taken an MSCI ATE yet.