CS 452 is a course on “Real-time programming”. You can check out the website link. It is notorious for being the hardest course at Uwaterloo, coupling groupwork and coding at the kernel level. I had previously read Robert Elder’s blog where he talked about CS 452 and I too wanted to take it from an early point in undergrad. Due to unforseen circumstances I didn’t end up taking it.

Intended to give students experience with tools and techniques of real-time programming, this course includes not only issues of microcomputer architecture and a real-time programming language and operating system, but also hands-on experience programming a microcomputer for applications such as process control, data acquisition and communication.

  • CS 452 course description

Trains (is/was?) held in a specific computer lab in MC (Mathematics and Computing Building for non-Uwaterloo people). It had a train set and a few windows where you could look into the lab to see people stressing about their project and if the model train set would collide. Plastered to the window were memes of the trains drifting, people stressing in the course, and the overall plight of taking CS452.

When this photo was taken the lab was being cleaned and I think they took down most of the memes on the window. You can still see one near the top of the photo.

I planned on taking it in Winter 2019 (the last school term I was in Waterloo).[1] In CS course selection I was surprised to see it wasn’t being offered in Winter 2019. It was normally a course held in winter (alonside fall as well I think?) so I was surprised to see why it wasn’t being offered.

I emailed the OG prof Bill Cowan to ask why the course wasn’t held that term. He had told me that he had retired. He told me that he actually planned to retire a little earlier but he continued because he loved to teach. He did say he was retiring this time and the course was not being held that term. I wished him congratulations and all the best for retiring. Although I didn’t have him as a professor there were lots of reviews of him and his courses on various Waterloo sites that indicated his knowledge and expertise.

After I completed Winter 2019 I contemplated going back to Waterloo for courses to try and take a later offering of the course, but I decided against it. I didn’t want to halt my graduation just for one course and even if I took it, it would be a different experience than what I probably expected. It just didn’t work with my timeline since I was going on co-op in Spring 2020 (and I had one more co-op term after as well).

CS 452 is now held by a different professor. I think the actual content is similar but I have no idea to know.

For years I would meme and joke I would take CS 452. I did eventually take other low-level courses like CS 454 (distributed systems), CS4 88 (graphics), and audit CS 444 (compilers). I always said I would take CS 452 but sometimes things just don’t work out. I was of the mentality that I spent ~4 years to reach the upper year CS electives finally doing CS 350 and CS 341 (the prerequisites for most of the courses). I wanted to challenge myself and try the most interesting courses Waterloo had to offer. After all, that was why I was in university, to challenge myself and further my education.

That being said, in this scenario the timing just didn’t align. I was off to Vancouver (and would never actually return to Waterloo campus for an academic term, unbeknownst to me at the time) It worked out differently than how I had expected, but looking back, that’s fine.



Winter 2019 was the last school term I was in Waterloo. Winter 2020 was my last school term…but I was in Seattle at the time.