BCS Term 2 review: CPSC 213, CPSC 221, ETEC 510, and MATH 221

The best lil study buddy.

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.

Millie’s got her fetch face on.

I’m a little under halfway done my spring break at this point, and trying to enjoy the sunshine with Mill while fretfully applying for my first co-op position. My only project for right now is to sample as much ice cream as possible, and maybe deploy our JavaScript game from the Vancouver Game Jam if I can get ahold of one of my teammates from the weekend.

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.


2 thoughts on “BCS Term 2 review: CPSC 213, CPSC 221, ETEC 510, and MATH 221

  1. An excellent and very informative post for future BCSer’s Caleigh!

    With machine learning and artificial intelligence being one of the most in-demand skill software engineers can (or should) acquire in 2017 onwards, will the AI course you intend to take have labs in it or will it be all theoretical? Do you know if the AI course will introduce things like neural nets? You also mentioned Matrix Algebra but does this tie into algorithm development?

    Also, reading your previous post, “nwHacks and the little Android app that could”, and you mentioned some issue using Git and Github. In those regards, I’d recommend that you checkout Lynda.com’s “Git Essential Training” with Kevin Skoglund. Using the site myself, I came away with a greater skill set when it comes to using version control and picked up some useful shortcuts and troubleshooting skills and you might find it useful too.

    1. Thanks, David! 🙂

      The AI course I’m in doesn’t have labs — in fact, because I’m taking it during the summer, it’s in a condensed format where I just have two 3-hour lectures per week (yikes). The only thing I know about the format is that we submit several smaller assignments rather than one large programming project, but I’m not sure if those will be theory or programming (probably a bit of both?). UBC offers a machine learning course that I also hope to take, but it’s much more math and stats heavy so I want to take it during a regular term rather than in the summer.

      So far, matrix algebra hasn’t tied into algorithm development for me — but my understanding is that if you were to go on into computer graphics, for example, matrix algebra becomes really important. Because the course I took was through the math department, we didn’t talk about CS at all. However, I believe UBC has a CS course called numerical analysis (maybe?) that does pull on matrix algebra as well as computer science skills.

      The “Git Essential Training” video sounds AMAZING — I’m not sure why I didn’t think of checking Lynda.com since I’ve had so much success with them in the past! Truly, git has been my team’s biggest hurdle in both the Game Jam and nwHacks. We tried to follow a git tutorial online before diving into the hackathon but it still wasn’t enough. Great idea!

Leave a Reply

Your email address will not be published. Required fields are marked *