In this post I will yap about the CS courses that I have taken so far and I will mention what I like and dislike about each of them!
Year 1
CPSC 110
The course is supposed to be a first year’s introduction to programming at UBC. I find it somewhat interesting as the course is taught using a functional programming language.
In my opinion, this course is just an algorithms course in disguise but with Racket.
PROS | CONS |
---|---|
Helps with problem solving skills. | I’m not a fan of having to follow a ‘recipe’. |
They emphasize solving problems rather than worrying about runtime or space complexity. | They dock marks for style marks. (They really should make a linter.) |
Tips: I think for this course, usually doing the practice material can get you very far, as most problems follow a specific template/recipe.
CPSC 121
This course in my opinion was rather weird. It covered a lot of topic which are somewhat related to each other, such as logic circuits, discrete math, regex, state machines and proofs.
I think the course has a lot of breadth letting students know these topics but I feel like since it covers so much, it lacks depth. In particular, the proofs were badly taught. Though I hear in recent years it’s worse? as it’s now autograded.
PROS | CONS |
---|---|
Most of the topics are cool (Circuits & Proofs especially). | There’s pre-readings. |
Goes over a lot of topics allowing students to further study CS theory. | Lacks depth in the topics |
Tips: Redo all the tutorials and understanding them. For circuits, I think building gates in minecraft can be a fun way to learn.
CPSC 210
This course feels like it should have been the actual introduction to programming course. It just teaches you OOP in Java and how to draw squares and fancy arrows which I don’t even remember what the arrows mean.
Also there’s an open ended project which a lot of students use in their resume. Do decide on a non-trivial project as it could help make your resume look better.
PROS | CONS |
---|---|
OOPs is an extremely popular paradigm and widely used. | Lecture feels unnecessary to attend. |
Some interviewers might ask the concepts here. | The project can be “cheesed”. |
Tips: You should be fine.
Year 2
CPSC 221
I think the topics it covers is quite good as it encompasses common data structures you would need to know for a technical interview. It also has weekly examlets which in some sense forces students to actively study.
PROS | CONS |
---|---|
Good to know basics for leetcode. | There’s weekly examlets. |
Uses C++ | Lots of questions feels like Trivia. |
Tips: If you have done leetcode, the questions in the course will feel trivial. I think leetcode is probably the best way to do well in the course.
CPSC 213
A lot of people complain about this course, but don’t listen to them, this is probably one of the most interesting course I’ve taken.
PROS | CONS |
---|---|
Helps you understand what’s happening under the hood. | Quizzes are scary. |
Covers memory management and concurrency. | Some questions are stupid (i.e. memory reads). |
Tips: Try to understand why things are the way they are.
CPSC 317
The course covers important topics. But it felt super memorization heavy. Probably the course I hated the most.
PROS | CONS |
---|---|
Useful knowledge. | Badly taught. |
So many memorization & quizzes. |
Tips: Read the textbook I guess.
CPSC 313
The course covers some useful stuff, and goes over assembly again. Though one might argue that the material isn’t as applicable in normal software engineering as the concepts are too nieche.
PROS | CONS |
---|---|
Systems are always cool. | Biweekly quizzes. |
Talks about cache! | Prairielearn. |
Tips: There’s a decent amount of videos online on the topic talked in the course.
CPSC 340
The course was rather fun as it went over a high level overview of how ML algorithms works and then makes you implement them from scratch in the assignments. Most of the topic was pretty cool as well.
PROS | CONS |
---|---|
Really good lectures. | |
Material is cool and useful |
Tips: Just understand how the algorithm works.
Year 3
CPSC 310
The course covers arguably important software engineering topics, but felt like it was executed badly. The nature of T/F questions was really bad, and the project felt like it wasn’t connected to the material.
PROS | CONS |
---|---|
Material is important. | Project isn’t open-ended. |
Project is non-trivial | The course structure is bad. |
Tips: Get a coin in the exam rooms to flip T/F.
CPSC 320
The course contains a decent amount of proofs. The questions for coming up with algorithms is rather easy but proving their correctness takes effort. Overall, I think the course helps you with some problem solving skills.
PROS | CONS |
---|---|
Builds problem solving skills. | Lots of reductions. |
Simple course structure (Exams & Biweekly Assignments). |
Tips: Doing leetcode made the course feel easy.
CPSC 427
The course initially started good, but felt like it fell short towards the end. The main part of the course is making your own game from scratch in C++ (The best language 😎). There’s also some assignments but they were very unstructured as some had no rubric.
Technically there was also no incentive to go to lectures as there are no exams or ways to be tested on lecture materials. However the topics were quite interesting in of itself which made me go to lecture.
Furthermore, the course didn’t teach OpenGL well and didn’t touch on modern C++ which was disappointing. The project was good as it’s somewhat open ended, though there are a set of requirements that you have to meet such as collision, physics, etc.
I think the lecture material was also somewhat lacking as it felt like it was showing the existance of certain algorithms rather than explaining how they work.
The project was definitely the best part of the course, and the freedom to set up the project and structure it however you want is nice as you can make your own linter rules, etc.
PROS | CONS |
---|---|
Fun project. | Course felt unorganized. |
Interesting topics (when it was about programming related at least). | Almost slept through some lectures. |
Tips: Get good at C++ and OpenGL. Find a good team.