One more semester closer to graduation. This spring I took only three courses–all of them upper-division computer science–but fortunately they were all different enough to feel like a balanced course load. I got in each of the three M’s: mathematics (Analysis of Programs), machines (Computer Systems Architectures), and models (Software Design).
- CS 336: Analysis of Algorithms (Myers)
- This class focuses on formal proofs of algorithm correctness, including topics such as weakest preconditions, developing invariants, induction, and probability. Even for a computer science course, it’s very math-intensive. One of my favorite things about this class, though, was having a support group available. There are some classes where you’re supposed to figure out everything on your own and not discuss the homeworks at all, while here we were encouraged to attend ACM’s weekly theory reviews or our own groups to meet up and work on the homeworks. For a class where the students have such varying backgrounds (everyone teaches 313k differently), it’s really necessary. I may not have been able to get a firm grip on recurrence relations without it.
- CS 352: Computer Systems Architectures (McKinley)
- This was McKinley’s first time teaching CS 352, and unfortunately it was at times very obvious. Reading the textbook was helpful, but the exercises often used terminology not in the rest of the book and were very confusing. The midterms were also insanely difficult. I’d go in thinking I had a good understanding of the material but then leave completely stunned. (Being able to keep the graded midterms would have been nice.) But for the final at least, I had almost a whole week to study. I read the book, worked out extra exercises, summarized the class notes, checked Wikipedia for clarifications, and everything came together. Sure, there were a couple of small things that I couldn’t remember ever going over, but in an hour and a half I was done and ended up with a 90.5–the highest grade on the final for any student. If you want to do well in this class, you need to have a lot of time to devote to it.
- CS 378: Software Design (Batory)
- This has been probably my favorite computer science course. We learned how to reason about programs using UML and studied refactorings, design patterns, and architectural patterns. For even common design patterns like hooks, I had never understood before exactly what they were. My favorite part, though, was learning about parallel architectures and having the opportunity to simulate everything from a basic join up to the parallelized Gamma join architecture. It’s a difficult class, but Batory’s generally an entertaining lecturer and I would recommend it to any computer science student.
Nice blog. I was wondering, how were you able to take 352 concurrently with 336? I thought 336 was a pre-req for 352. Did you have to get permission from the prof or the advisor?
Comment by Todd — January 3, 2011 @ 11:49 pm
Hi Todd, I had to get approval from both my advisor and the professor. Unfortunately, prerequisites don’t always seem to be waived consistently in some certain set of circumstances, even though 336 isn’t useful at all to be prepared for 352.
Comment by Deborah Hawkins — January 5, 2011 @ 9:38 am