Let me start with an interesting experience about exam cancellation. (Skip the first three paragraphs to get straight to the review.)

On December 19 at 5:30am, I woke up to pitch darkness in my home out in Maple Ridge. The power had gone out overnight, which was not the best way to start my day. I was scheduled to write a final exam at 8am at UBC (which was roughly 60kms away). I lit a candle and ate my cold breakfast, hoping the snow outside would stop. Vancouver is probably the only Canadian city that shuts down after getting a few cms of snow.

At 6:00am, I checked UBC Bulletins and saw that “exams will continue as scheduled.” So, I hopped in my car and started making my way to school. Generally, it takes about an hour and 20 minutes to get me door to door, so I  would have gotten to school with an hour to spare. However, the Greater Vancouver area had ran out of salt and the snow-plowers hadn’t began their day yet, so I found myself inching along the freeway at 15km/hr at 6am with a few others who started their day early.

Thankfully, at 6:23am, UBC decided to cancel exams scheduled for 8am, and rescheduled them for January. I wrote mine last Sunday and I thought that it went pretty well, considering the amount of time that has passed between the end of classes and the actual exam.

Professor: Alice Gao

Quick Links: Course Website

I’ve talked to a few people about computer science before entering the BCS program, and they all told me the same thing:

You don’t need a degree to be a developer. But a degree can enable you to be an outstanding developer.

Taking CPSC 121 with Alice solidified this opinion for me. I’ve coded in Python and VBA before entering BCS, but I was never exposed to the material that we covered in CPSC 121. From propositional logic, predicate logic, discrete math, induction proofs, components of a computer, and breadboarding… This course truly covers a bit of everything rooted in computational thinking that I wouldn’t have been exposed to in a bootcamp.



Building circuits using the Magic Box.



Implementing circuits in Logisim. This is a 4-bit counter.


The 4 questions the course aims to answer:

  1. How can we convince ourselves that an algorithm does what it’s supposed to do?
  2. How do we determine whether or not one algorithm is better than another one?
  3. How does the computer (e.g. Dr. Racket) decide if the characters of your program represent a name, a number, or something else? How does it figure out if you have mismatched ” ” or ( )?
  4. Modern processors have billions of transistors. How can we build a computer that is able to execute a user-defined program?

The first week of the course was slow and I picked things up without much struggle. However, the learning curve becomes very steep, very quickly. By the 3rd week of the course, I was struggling to answer the “simple” clicker questions in class. Despite all of this, the struggle was enjoyable. I immensely enjoyed labs and tutorials. The TAs cared about my learning and would go to great lengths to explain course concepts. On top of that, Alice is an amazing professor. She delivers the material eloquently and made the course very enjoyable.



  • Start assignments early! There are a total of five assignments which averaged to around 15 hours of work each in order to achieve a perfect grade.
  • Go to tutorial. The purpose of tutorials is not to provide answers for the practice questions. The TAs take the time to walk through the solution and give tips on how to approach and tackle a problem.
  • Read the textbook. The quizzes on Connect before class are designed so that we can build on top of the textbook material in lecture.
  • Practice, practice, practice. The concepts just click after working through the problems a few times.

Leave a Reply