This class was tough.
While CSE 331 was a requisite course for the CompSci major, it's critically important in that it demonstrates the connection between software code and the underlying hardware of the computer. The coursework is incredibly dry and it often feels like the course content goes off really unrelated tangents (like the circuitry involved in rudimentary computers for otherwise a software course) but getting closer to processor-level code is a really valuable skill in that the abstract languages can't portray well. The only thing that really bothered me with the course is that it doesn't really explain too well the differences between processor architectures. It's communicated that there's key differences in power consumption and instruction sets for like, x86, ARM, and PowerPC architectures, but for such a critically important discussion point relevant to this class, it's not brought up often enough. In fact all of the processor-related discussion is centered around the SPARC architecture, which like, have you ever heard of SPARC architecture? Probably not.
For me, the highlights of CSE 331 is definitely first and foremost learning more about the C programming language. So much of modern programming is built on top of C++, which is itself is an object-oriented subset of instructions built on top of C. Personally, having McCullen teach the course meant that there was also a focus on Unix, and learning how to navigate and also competently use Unix commands is super important when so much of modern servers use Unix code.
Hours per week:
Advice for students:
I would definitely talk to your TA as often as possible. They live and breathe this incredibly technical aspect of programming, which can sometimes be really foreign to people used to programming in more abstracted and object-oriented languages. They have help hours I would take advantage of as well. I wish I went more often to those, actually.