BCS Terms 3&4 Review – CPSC 322, 313, and 320

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).

CPSC 320: Intermediate Algorithm Design & Analysis

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.

Let me know if you have any questions!

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.


BCS term 1 review: CPSC 121, STAT 200, MATH 200, and COGS 200

I’ll admit that my plans to blog weekly fell through in a pretty big way this term. My last exam is tomorrow morning (possibly I should be studying), but for all the potential BCS applicants out there, I did want to at least write a review of the 4 courses I’ve taken this term and my general impression of the program so far. I’ve got a couple weeks off over Christmas, too, so I hope to share more about what I got up to over the last three months during that time.

One of the very first things that UBC tells you about the BCS program is that

“We expect that, for many participants, the first eight months of the BCS (ICS) program will be an intense and challenging experience, immersing students in new ways of thinking, creating, and communicating.”

Emphasis mine. And they aren’t kidding.

I worked harder in the last four months than I did during my undergraduate or MA degrees. It was exhausting. For the first 8 weeks, particularly, I kept my head down and — apart from being out with Millie for 1-2 hours per day — essentially did homework and readings from morning until about 8pm at night, every day. I wasn’t even in the most labour-intensive course (that award has to go to CPSC 110, from which I was fortunately exempted). But the transition from a humanities background to a fast-paced, problem-solving environment — with labs, assignments, readings, quizzes and problem sets due every week — was a tough transition for me.

There have been moments of despair! Several moments, actually. Nobody talked much about this during the limited orientation we got to the program, but I went through (and am still going through…) a shock very similar to what I witnessed in first-years at Queen’s: the realization that just because we were pretty smart and capable back home, we aren’t necessarily going to get those same results here. (MATH 200, I’m looking at you.) All of the friends I’ve made here in Vancouver felt the same, at some point or another, although we only started sharing these dark feelings later in the term as we got to know each other better.

So, if you’re currently in the BCS program and feeling like garbage, let me tell you: you’re not alone. You’ll get through it!

(This is partly a pep talk on my behalf, too, in advance of final grades coming out in a week or two.)

If you’re curious about what exactly I took this term, here we go:

CPSC 121: Formal Models of Computation

This turned out to be my favourite course this term! We did a pretty fun variety of things in this class: playing with circuit boards in the lab, discrete math, easy proofs, propositional logic, weak and strong induction, the very, very basics of a working computer … I found the learning curve tough at the beginning. We had clicker questions in lecture, and I often felt like I was the only person out of everyone I sat with who struggled to get the right answer. Labs also occasionally drove me nuts; our labs always came together by the end of the session, but sometimes it was a struggle to figure out the wiring on our circuit board.

However, by the end of the course, I really started enjoying it. Proofs are great. Propositional logic is great. Hell, I find proving the validity of propositional logic statements very soothing, now. It felt like solving puzzles in its purest form! We did zero coding during the course, but we did examine algorithms to a small extent, and apparently this gets expanded on in CPSC 221 (which I’m taking next term).

The workload felt high at the beginning while I was still getting my bearings, but by the end of the course, it felt manageable. There’s a weekly lab, a weekly online quiz, 5 assignments (each one took me between 4-8 hours to do), two midterms, and a final exam.

STAT 200 – Elementary Statistics for Applications

I found STAT 200 very sneaky. For the first 6 weeks, it felt like my bird course: different types of experiments, parameters versus statistics, the very basics of probability, normal and uniform distributions. So far, so good. Things quickly escalated after the halfway point. I couldn’t even tell you exactly what was hard about it — the math was easy — but I found it tricky to apply the correct formula to a complex word problem. I wish I spent much more time on this class; the early weeks lulled me into a false sense of security. In hindsight, I wish I attended the professor’s office hours to clarify the concepts early on.

STAT 200 has a reputation for being an easy course, and I don’t know if I agree yet or not. It felt easy at the beginning, but we’ll see how the final went. (To be fair, I also had the stomach flu that day.) We had 2 assignments, weekly labs, a couple webwork questions per week, a midterm, and a final.

MATH 200 – Multivariable Calculus (Calculus III)

This course was a roller coaster of emotions. I spent almost every day doing practice problems, studying for the quizzes, or trying to get through the webwork each week. I got 3/9 on the first quiz (and contemplated dropping out of UBC and moving back home). Then I did much better on the next 5 quizzes. I also did very well on the midterm (especially considering our section’s average was 47% before scaling).

And then… the final. Oh, the final. It was tragic. I went into the final with an A in the class, but I blew a couple easy questions (I’ve come to realize I choke under math pressure!), so I am not feeling too great about my grade, barring scaling. I did well in Calculus I and II, but spherical and cylindrical coordinates escape me.

Unless visualizing three-dimensional shapes comes easily to you (and it certainly did not to me), you’ll probably find this course a lot of work to wrap your head around. It’s not an impossible course — previous grade distributions show that quite a few students wind up with 80 and 90+ grades (and a lot of students get under 60) — but I think, for those of us who can’t picture the shapes easily, the course remains un-intuitive and difficult. Part of it was the fast pace, for me — given more time to think about the material each week, I think I would have found it a lot easier. But our professor moved like lightening!

In this course, we had weekly web work, six quizzes, one midterm, and one final.

COGS 200 – Introduction to Cognitive Systems

Finally, COGS 200. I don’t even really know where to begin with this one. This course was all about the theory and design of cognitive systems, or artificial intellingence, and what that might tell us about our own consciousness, to.

It’s interdisciplinary, so we had three professors — a philosopher, a linguist, and a computer scientist — take turns lecturing the material. Coming from English literature, the philosophy and linguistics components were interesting but also pretty straightforward. The computer science was new to me, but I didn’t feel like the professor had enough time to share much in-depth or thought-provoking material.

The real doozy is the group work. 45% of your final grade ultimately comes from a research proposal that you and your three assigned group members have to come up with, research, and write. Our group did very well, but I often found it stressful balancing our different goals for the course as well as different experience levels in academic research (first-years could take COGS 200, after all). If you wind up with a terrible group, well, this course will not be very fun for you.

We had three individual written assignments (mainly short-answer questions, not research papers), a group midterm (terrible), a 1-page research proposal introduction, class presentation and poster, the final 5-page proposal, and a final exam.

Hope you found these course reviews helpful. Back to studying for CPSC 121 — wish me luck!