On Friday, I’ll officially have lived in Vancouver for a whole year — wild! I begin my co-op next Tuesday (more on that in a couple days…) and, at this point, have just 12 months of work and then 8 months of school until I’ve completed this degree.
This summer I took 3 courses. In the summer term, courses are condensed; what would ordinarily be a 12-week course in the fall or winter turns into an accelerated 6-week course in the summer. Needless to say, this was pretty tough. I wasn’t able to enjoy Vancouver’s beautiful summer as much as I’d like, but I hope to make up for it in this last week or so of freedom before I join the working world. Here is my course review for what I took this summer.
CPSC 313: Computer Hardware and Operating Systems
This was a fun class! The first two weeks or so were simply an extension of what we learned in CPSC 213, just with a slight variation on the assembly language we used. But after that, the similarity ended. I learned a lot about memory and caching, file systems, and pipeline instructions. The assignments were tough, but we had fewer of them than in CPSC 213, so the workload didn’t feel as crazy. I wish I had taken this during the regular terms since I think we rushed through some content, but overall I found this course enjoyable and I especially liked learning about the caching and other factors that impact performance.
CPSC 322: Introduction to Artificial Intelligence
I was expecting a bit more philosophy in this course, but we spent most of the class learning a wide variety of search and constraint-solving algorithms. We practiced transforming situations into problems that our algorithms could resolve and talked a lot about the trade-offs between different approaches to a given problem. At the end, we got into some very basic Bayesian network and statistical stuff. This course felt a little light-weight; the assignments were pretty easy and I think we could have done more. The most fun part for me was when were were allowed to use any programming language we wanted to implement a constraint-solving algorithm for a given problem (naturally I chose Python).
Well, this course was mildly disastrous… which was too bad, because I actually found this content the most fun and interesting out of everything I took this summer! I didn’t gel especially well with the professor’s teaching or assessment style. My partner and I did very well on all of the assignments, but the midterm was a total bust. We also had a group component on the final exam, and I didn’t enjoy that aspect very much, either. I don’t feel like my grade in this course reflects my understanding at all — dynamic programming and NP-complete proofs are really fun to me! Again, I wish I’d been able to take this during the year with one of the tenured professors at UBC, but hopefully I can redeem myself when I take CPSC 420 in a year.
Overall, the summer flew by too fast! Summer courses definitely aren’t ideal — too fast and stressful, don’t actually cover everything that the fall/winter terms do — but at least we managed to blast through 9 credits in just 12 weeks. Not bad.
I plan on writing three more blogs this week about my co-op interview experiences, my teaching assistantship (?) this past term, and the directed study I’ve signed up to do this fall.
Two study terms down in BCS, three more to go (… at least. And not including my work/co-op terms, of course). In December, I wrote a Term 1 review; it’s high time I give you a Term 2 review! In term 2, I took CPSC 213 and 221 (the two core CPSC 2nd-year courses apart from CPSC 210, from which I was exempted upon admission to UBC), MATH 221 (matrix algebra), and ETEC 510 (a graduate-level course on educational technology design).
The good news is that I found term 2 easier than term 1. I think this is largely thanks to the fact that I had acclimated to my new living situation and figured out how to manage my stress and workload a lot better. Probably also helped that multivariable calculus was behind me, too! This isn’t to say that my courses were easier this term. CPSC 213 and 221 are both known as tricky, busy courses. But in term 2 I spent a lot less time worrying about Millie and my landlady’s cat, or coming up with a grocery shopping routine, or getting lost on campus.
Interestingly, one of my favourite learning strategies fell by the wayside this term, too. Previously I had taken messy notes in class and then rewritten and reorganized those notes on my own time. I also made notes on all my readings. This term, I was a little more cut-throat about prioritizing my time — and that meant not rewriting all of my notes from class and even not doing all the readings (or at least being selective about them). To my surprise, I got better grades this term than last despite not doing as much ‘busy work’. Instead of writing notes, I focused on identifying weaknesses and drilling problems. I saved a lot of time this way, but this new method also required me to be much more aware of exactly when I started feeling lost in any course material — because as soon as that happened, I’d go out of my way to talk to a TA or professor about the content. Talking about my mental models of the course material with an expert helped me understand the material better and helped me correct my misconceptions much more quickly than reading or writing notes.
Anyway, without further ado, here’s my brief course review of the term.
CPSC 213: Introduction to computer systems
I really enjoyed this class and I’ve applied to be a TA this summer! In 213, you’ll get to learn a lot more about how and why a computer works at the machine code level. You also get to use C! (Yay, pointers…) The course’s main downside? CPSC 213 is a LOT of work! I recommend starting the weekly assignments as soon as they come out, doing the assignments all by yourself (no partner), and attending an office hour or the labs when you get stuck (and you will get stuck). Don’t bash your head against the wall for hours when you just can’t spot a tiny typo. I rarely read the textbook in this class, but the course companion is a godsend — sometimes the professors haven’t taught you everything you need to do the weekly assignment, so reading the course companion can clear things up. My last main piece of advice is take the time to get very comfortable with assembly in the first half of the course; if you can read and write assembly quickly and accurately, you’ll free up a lot of your time for the harder questions on the midterm and final.
CPSC 221: Basic Algorithms and Data Structures
CPSC 221 felt pretty similar to CPSC 121; once again it’s a smorgasbord of lots of different things (proofs! big-O! C++! data structures! algorithms!). Sometimes it felt less like a cohesive course, where one unit built on another, and more like a “Hey look at this cool thing! Now look at this unrelated cool thing! and WOW did you notice this third cool thing over there?!” Discovery Channel show. Unlike CPSC 213, where the assignments got harder and harder as the term progressed, 221 did the reverse: I found the coursework very heavy at the beginning (the labs and the first programming project were tough), and as the term progressed the theory assignments and programming projects got simpler. I did the readings more often in this course and found them especially helpful before diving into the labs. I had my first pair programming experiences with 221 and found it extremely helpful; although having a partner for the programming projects didn’t seem to save us much time, I think I learned much more from the assignments and realized just how enjoyable pair programming can be! The theory assignments, however, I did on my own. I think if you found CPSC 121 bearable, you will be just fine in 221 — the proofs build off of 121 pretty nicely.
ETEC 510: Design of Technology-Supported Learning Environments
This course came out of left field. Because my bridging module is “technology and education,” I was just mindlessly googling around when I found UBC’s Masters in Educational Technology. Not feeling very hopeful, I asked for special permission to be enrolled in this graduate course, and to my surprise they let me in! I was expecting a lot of research on current educational software best practices, but instead this course was very theoretical. Instead of writing a research paper, I formed a team with 3 other classmates (brilliant elementary school teachers, all of them) and we created our own contribution to ed tech where we shared coding resources with K-8 teachers online. While I enjoyed learning from my peers, overall I didn’t get very much practical use from the course content. I imagine that the theory has impacted my thinking on ed tech in ways I haven’t even noticed, though, and someday if I work in the field it will affect my practice even if I’m not aware of it.
MATH 221: Matrix Algebra
Never-ending row operations … Despite doing well in this course, I never really felt like I had the hang of it until maybe five days before the final exam. I had the opposite experience in MATH 221 versus MATH 200: in 221, I felt like the math itself was straightforward (a bit of factoring, mostly basic arithmetic), but conceptually I had no idea what was going on (null spaces? column spaces? dimension vs rank? spans? basis?!). In 200, I felt like I had a good grasp of the concepts but tricky computation like integration or differentiation escaped me. Fortunately, there were some great YouTube videos called Essence of Linear Algebra on the concepts, and then I just drilled problems from class and old exams. I didn’t find the textbook too helpful — too dry, not conceptual enough for me — but everyone else I know essentially taught themselves the course from the textbook rather than attending lectures. Overall, despite some panicky moments over the course of the term, MATH 221 really wasn’t that bad.
Class resumes on May 14: CPSC 313, 322 and 320. That’s Hardware and Operating Systems, Intro to Artificial Intelligence (cooooool), and Intermediate Algorithms and Data Structures. Wish me luck!
Future BCSers, don’t hesitate to leave a comment with any questions you’ve got about the upcoming year.