I may or may not know what I'm doing.
2022-09-20
Note: Course experiences
This is part of a 5-part series on the upper year experience at the University of Waterloo.
Today’s topic will be on 2B. I will talk about each individual 2B course experience.
This is the first term that CEs and EEs do not have the same courses. If you want to switch programs, do it before the start of this term.
Courses:
Difficulty: (Hard) ECE 203 > ECE 207 > ECE 208 > ECE 252 > ECE 224 (Easy)
Interest: (Cool) ECE 252 > ECE 224 > ECE 208 > ECE 207 > ECE 203 (Tedious)
Disclaimer: The above two scales are relative, not absolute.
Note: The ECE department swapped ECE 298 with the 3A elective. Therefore I took ECE 206 this term as my elective and ECE 298 in 3A.
Chance.
This is THE course of the term. I did not understand the content. I still do not understand the content. I thought this would be my lowest grade in my undergraduate career but the class got curved hard.
Convolutions.
There are so many convolutions. Everything is in the frequency domain. The tests and final were multiple choice, which is the absolute worst.
Z-transform is the discrete version of Laplace transform.
There’s also the D-operator (deez nuts) and proving stability of systems.
CS course 2.
This course was interesting although pretty theoretical. Goes into semantics of boolean logic, satisfiability, first-order logic, decidability, the halting problem, and language categories (e.g. regular expressions). You will learn why you can’t parse (X)HTML with regex. Also re-teaches state machines from ECE 124 but calls them discrete finite automata (DFA).
Devices connected to the CPU.
Extension of ECE 222 by seeing how devices communicate to the CPU and common buses are shared. Content was a bit dry.
Because it was online there was no lab for me but this course does have one in-person and is apparently in C (I interrupted a midterm exam to ask the professor about it and about an unrelated course).
Non-deterministic C programming.
Essentially a guide on how to use C to call the various useful Unix APIs to get a multithreaded and multiprocessed program to work. A pain to debug since the scheduler is non-deterministic, Valgrind and Helgrind are your friend. My grandmentor (mentor’s mentor) told me the easiest way to do mulththreading is to just not share data (won’t work for the labs and assignments though :) ).
You will be forced to learn how to compile C code in Unix systems if you don’t know already, since the testing is done on the ECE Linux servers.
I found professor Zarnett’s lecture notes and videos pretty comprehensive, although some students apparently don’t like his style.
The important information to take away is 2B courses.
Check out:
© 2023 Xierumeng. All rights reserved.