Course Format
Students watch pre-class videos then reinforce and practice the material during lecture. Lectures are very interactive, with students doing live coding for almost every class. In addition to lectures, students attend weekly 3 hour labs and work on problems with their fellow students and TAs. Finally, there is a weekly problem set that students complete by themselves or with a partner. Students are not allowed to ask questions about the problem set.
The course is taught using a subset of Racket, BSL and later ISL. You can read more about the choice of language here.
This first year computer science course is unlike ones you may find at other universities. Whereas a university may teach SICP, OOP, or C++ for their introductory computer science course, UBC follows HtDP.
HtDP was created to remedy issues encountered with SICP. One major highlight of HtDP (and by extension CPSC 110) is teaching “explicit design rules”, and to get away from “tinker until it works”. This means you must solve problems systematically, by following a guideline. While it may seem to be “overkill” for easy problems, this systematic program design guidelines will help you greatly in the later half of the course. This means you should become well versed with systematic program design in the first half of the course. If you are struggling with the first half of the course then make sure you get help from TAs or instructors, as the second half of the course ramps up quickly.
Importance of Course
At UBC, this is one of the first computer science courses you need to take to be admitted into the computer science program, regardless of faculty (arts or science). Doing well in this course will help you do well with higher year courses like CPSC 221 and CPSC 320. While this course may seem “out of place”, it teaches you many topics in computer science, such as graph traversal and recursion.
My Thoughts
I think CPSC 110 is one of the hardest and most eye-opening computer science courses I’ve ever taken. While I struggled when I took the course, sticking to the systematic design rules I learned has greatly helped out with doing those infamous Leetcode problems! Additionally, having learned about recursion in my first year made implementing recursive data structures in CPSC 221 a breeze! Finally, this course has also shaped the way I program. I tend to lean towards a more functional style of programming, which I think, has resulted in easier to read and more maintainable code.