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.


A summer update at long last, plus my experience with edX’s Systematic Programming Design

The last time I posted here, I had just accepted my offer to the University of British Columbia and was preparing to move to my parents’ house in the GTA for the summer. Well, here we are, almost two months later – and I’m getting ready to fly to Vancouver in just over a month!

I don’t have a great excuse for not posting regularly, except that I’m the kind of person who gets the most done when I already have a lot on my plate to schedule. When the days drift by without much structure, I procrastinate…a lot. And boy oh boy, do the days ever drift at my parents’ house. Half the time the internet doesn’t work here.

I have been keeping busy, though. Just yesterday I finally completed edX’s Systematic Program Design Parts 1-3 (SPD). Let me tell you, it was a real shock compared to everything I’ve learned at Queen’s University (where I have completed the first 3 computer science courses – 1.5 years’ worth of school).

SPD – normally just a 12-week course at UBC – covered more ground than all 3 Queen’s courses combined. It was wild. I’m a little nervous about what to expect at UBC now, and I am really glad to only be taking 4 courses per term next year (as recommended by the program advisors). I hope that not all UBC courses are this intense.

To be fair, I didn’t try my hardest at really learning the material. By Part 3 I was feeling burnt-out by the fast pace, since I did about a week’s worth of coursework per day. This meant I often skipped practice questions and relied on watching the videos and doing the quizzes. I feel like if someone put the final exam in front of me right now, I would probably fail it – or at least barely pass. But I feel like I understand the concepts; I’m just not comfortable with reading or programming in Racket quickly. (That may not actually be true – maybe I really just don’t understand the concepts too well – because Racket isn’t the trickiest language to learn. It just looks really weird. A lot of parentheses.)

I do, however, really recommend this course as an introduction to programming. I wish Queen’s had taught their courses in the same way. SPD was very well-structured, clearly taught, with a lot of bonus practice questions to try if things didn’t click the first time. It’s mind-boggling to me that in 12 weeks we reached tail recursion, accumulators and graphs. The only downside is that, being an online course, SPD did not provide very much additional support if the videos and examples weren’t enough.

My plan for the rest of August is to review Differential and Integral Calculus on Khan Academy to prepare for my Multivariable Calculus course in the fall. Speaking of courses, here is what I’m taking:

  • STAT 200: Elementary Statistics for Applications (3 credits)
  • CPSC 121: Models of Computation (4 credits)
  • MATH 200: Calculus III (3 credits)
  • COGS 200: Introduction to Cognitive Science (3 credits)

Yikes! Typically UBC students take 15 credits, or 5 classes, per term, but the Department of Computer Science recommends its students sign up for just 4. CPSC 121 has a lab component so it is worth 4 credits instead of the usual 3, so I’m only 2 credits short of a full courseload. In the winter term, I am taking two computer science courses with lab components, so I’m only 1 credit short of a full courseload then. Hopefully I’ll have settled into a routine by then so it won’t be too tough…

For those of you reading this who are interested in attending the BCS program someday, you might notice that I am not taking the typical BCS first-year courseload (which typically includes MATH 180, CPSC 110, ENGL 1** and something else). This is because the BCS program advisor exempted me from both communication requirements, the first two computer science courses, and the Calculus I requirement (and I actually took Calc I/II at Queen’s so I get to leapfrog into Calc III at UBC).

On the one hand, all these exemptions allow me to take the math and stats courses I need as prerequisites for some interesting upper-year computer science courses in my last year of the degree.

On the other hand, it also means that I may not be in any classes with fellow BCS students, at least not in my first year. I’ll have to make an extra effort to meet people in my program.

I won’t lie – I’m pretty nervous! Especially because I have a little dog relying on me for at least 2 hours of entertainment every day. But I’m also excited for a new challenge.

Bound for University of British Columbia!

Alright, it’s official – last week I was admitted to and paid my deposit for the University of British Columbia’s BCS (ICS) second-degree program, starting this fall. eek!

Despite my endless worries about moving across the country with a hyper little dog, to a city where I know all of two people, I think this is the right choice. For one thing, it’s only a 20-month program excluding the co-op. For another, UBC is one of the best computer science schools in Canada. And, last but not least, the program is specifically for mature students who’ve already got a bachelor degree in another field — meaning my peers won’t be straight out of high school! I’m hopeful that this means I’ll make friends a little more easily in the program and feel less isolated than I have at Queen’s, for example.

I’ve got my work lined up for me this summer, though. My last day working at Queen’s is June 9. I have to say goodbye to all my favourite Kingston restaurants (and, okay, my friends…) in the next month or so. The going-away party is June 18. All my stuff needs to be sold and I’ve got to be out of Kingston by June 23. I’ve enrolled in a serious dog-training course in Toronto this summer to work on Millie’s reactivity. I’m going to work through the free, online version of UBC’s first-year computing course in the hopes that I can skip it and move on to more advanced stuff when I get there (called “How to Code – Systematic Program Design” at edX — and it’s taught in Racket! so cool! Also the course is based on How to Design Programs, which I’ve written about before). I’ve also met a nice person (thanks, universe!), so I am trying to visit them lots before I move to British Columbia.

Anyway, all of this is to say that I expect my blogging will slow down over the summer as I wait for the real work to start in September. I may blog a little bit about my experiences with edX and possibly even dog training (since we can learn a lot about how we learn from how dogs learn).

It feels pretty good to have settled on some kind of future for the next 2-3 years! And, for the record, I did really well in the winter computer science course on object-oriented programming, so I am proud of that.