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.


My very first hackathon: UBC Local Hack Day

After a wicked snow day resulting in a cancelled final exam, the unexpectedly highest GPA of my life (so much for “not being a math person”), and abandoning my darling doggo to a Vancouver kennel (my heart breaks for her), I am finally nestled in snowy Ontario with family for a short winter break. I promised in my last post that I would write a little more often while I had the chance, so I thought I’d share my experiences at my very first hackathon, UBC’s Local Hack Day on December 3, 2016.

UBC Local Hack Day is part of the Major League Hacking (MLH) Local Hack Days happening worldwide. Instead of the more typical grungy 24- or 48-hour coding sprint, MLH Local Hack Days are a humane 12 hours long — much better! The organizers provided us with free snacks and pizza, and I even got some shiny new stickers for my laptop:

GitHub and MLH stickers on my laptop.
Sweet stickery swag.

Major League Hacking (MLH) encourages high schools and universities around the world to organize their own Local Hack Day, and UBC hosted one of them. At the same time that I was plunking away at my laptop in Vancouver, BC, students all over the world were doing the same thing. MLH representatives were at some of the larger schools — I think they were in New York, for example — interviewing attendees and generally sharing upbeat quotations and photos. It was pretty fun and lighthearted.

I had the option of joining a team and presenting my final project at the end of the hackathon, but I chose not to. Part of the Hack Day’s appeal was its non-competitive, celebratory and beginner-friendly atmosphere — I wanted the chance to hunker down and work on a personal project in a dedicated environment, without any pressure to actually finish, so that I could continue working on it post-hackathon (indeed, I’ve spent most of today working on it! More on this later.). The introductory speeches included quite a lot of talk about the MLH code of conduct and kindness, which I appreciated.

A few speakers stopped by. Susan Ibach, a Tech Evangelist from Microsoft, was back to talk about Azure and, like the last time I saw her speak, was pretty hilarious. Some students from the UBC Game Developers’ Association gave a helpful talk about version control and GitHub.

In hindsight, I feel like I could have gotten even more out of the event, but I just got too excited by, well, coding. Instead of taking the time to learn from the talks, or chat with the professional mentors, I put my head down and worked for about 11 hours straight. My head was spinning by the end! I think an important aspect of these events, especially since I wasn’t aiming to win a competition, is simply found in the networking. I completely missed that part.

My biggest regret is not staying to hear my peers’ presentations, but I just couldn’t tolerate sitting in that auditorium any longer. Hack Day went from 9am to 9pm; I left at around 7:45pm, right before the presentations began. I needed a break (and a shower).

My next hackathon is the Vancouver Game Jam in January, which is more traditional in length (48 hours!) and definitely team-based. I hope to learn a lot at this one since I’ve never actually developed a game before, but after my experience at UBC Local Hack Day, I also know the importance of taking regular breaks.

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.