I graduated from the University of Waterloo in 2021 with a Bachelor of Computer Science. If you’re an undergrad student reading this and are thinking about what courses to take, I hope this may help! Please note that I took these courses between 2016-2021, so I’d recommend checking out the UWFlow links to see what has changed.
Notable Coursework
CS444 - Compiler Construction
Implementing a substantial subset of the Java language in a group of 3. We were a group of 2 but my friend was a compiler nerd. The compiler can be written in any language of your choice and you can basically take any approach. We opted for C++ and we also implemented a recursive descent parser.
CS488 - Introduction to Computer Graphics
Assignments were done using OpenGL, so you get to learn to use that. In A4 you will implement a ray tracer. Most students seem to be excited to take this course for the final project component (A5) at the end which is to implement a difficult optimization / add on to your ray tracer. I took this course during the middle of COVID and the final project was marked optional, which I did not complete.
Below is a screenshot of a custom image rendered by my ray tracer :) I have colour vision deficiency.
CS454 - Distributed Systems
I think this was a great course to gain exposure to topics in distributed systems. The assignment is one project broken up into parts - implementing a basic distributed file system which had to be done in C.
CS343 - Concurrent and Parallel Programming
A course about concurrency strategies (mutexes, semaphores, etc). In my term we used a version of C++ with added concurrency features, made by the teaching staff. I'd highly recommend this course for utility for industry applications, or if you liked the traffic problem from operating systems (CS350).
CS349 - User Interfaces
Interesting lectures about UI/UX design principles. I was very surprised by the assignment load: the first few were hefty Java GUI applications but you get a sense of accomplishment when you complete them. In my term we did a Paint program, puppet manipulator and a text editor UI. Last couple of assignments were android projects.
Other
I also took the following courses in the computer science department. If you're having trouble deciding what courses to take, feel free to reach out to me and I can try and help you out!
- CS370 - Numerical Computation
- CS456 - Computer Networks
- CS458 - Security
- CS486 - Intro to Artificial Intelligence