How to make the most of CS Primer
While you’re welcome to approach CS Primer however you like, we’ve designed it based on a set of principles that make it somewhat different to a traditional curriculum. We suggest that you take a moment to read this guide, but if you’re eager to dive straight in, the TL;DR is:
- Start wherever looks interesting
- Focus on solving problems
- Use as much or as little of the problem walkthroughs and explainer videos as you need to keep making progress and having fun
- Keep going!
If at any point you’re unsure of the best approach, just contact Oz.
Picking a starting point
You should start with whichever module of whichever subject looks most interesting to you, and just be prepared to change course as needed if you find that you’re missing some of the assumed background for a given problem.
There really is no single sequence through computer science that suits everybody. Firstly, everyone arrives with a different combination of goals, motivation and prior experience. Secondly, some students thrive on a “bottom up” approach and others on a “top down” approach: some feel more comfortable building up one foundational piece at a time before moving on to higher level concepts, whereas others are more excited jump ahead to the relatable high-level thing and use that as motivation to dig into lower-level aspects as needed.As a concrete example: the path to understanding something like a distributed database might start with computer architecture and progress through operating systems, networking, databases and distributed systems. If it sounds fun to work through these subjects one at a time, then that’s what you should do! However if you’re motivated to learn about distributed databases right now and would rather not spend months or years building up to it, then start at distributed databases and fill in gaps as you go. We have done our best to clearly indicate any “assumed knowledge” where that is the case.
That being said, if you’re just not sure where to start, we suggest the “Bits and bytes” module of Computer Systems.
Focus on problems
If you wanted to become a better tennis player, your best strategy would be to find a training method that provides as much deliberate practice as possible. While watching Wimbledon or reading books about tennis might help at the margins,Incidentally, there is at least one worthwhile book about learning to play tennis—in fact about learning generally—called The Inner Game of Tennis. One of its major themes is how to establish productive feedback loops. your primary means of progress would be drills and training matches that give you feedback and consistently push your abilities.
We suggest that software engineers approach computer science in the same way, building a working knowledge of computer science by solving progressively harder programming problems as part of a constructive feedback loop.
For this reason, we’ve designed CS Primer primarily around a sequence of problems for each module, listed under the module descriptions. We suggest that you dive in and try to solve these: typically you can watch the first portion of the associated video to establish some context, then get started when you reach the first “pause point” (the video will pause by itself, and describe your next objective).
If you can get through the entire problem without watching any more of the video, then that’s great!In this case you may still benefit from watching the video in case there are implementation details or interesting asides.On the other hand, if you decide to watch the walkthrough to make progress, or find yourself watching a number of the supplementary explainers, then that’s great too! This is likely an indication that you’re exposing yourself to new concepts right when you’re maximally motivated to absorb them.
Seek as much help as needed, but no more
A good feedback loop boils down to being challenged enough that you’re having fun, but not so challenged that you get frustrated. Since CS Primer is self-paced, it will be up to you to balance the challenge level against your current skill level, as illustrated well by Mihalyi Csikszentmihalhyi in describing "flow":
To adjust the challenge level for yourself, we suggest the following rules of thumb:
- You should watch as much of the solution video as you need to keep making progress. Treat the video overall as a “major spoiler”, although you may find it worthwhile to for instance watch a section on “planning” or “basic implementation” then pause and continue your own solution from there.
- Watch linked supplementary “explainer” videos if you feel unfamiliar with those concepts. They are typically not spoilers, although some students prefer to throw themselves into the problem first, so that they’re better primed to absorb the concepts.
- If you feel like a problem is just too hard, you should maybe work on another problem and come back later. Other options are to watch the walkthrough and perhaps still give yourself the challenge of translating our solution to another language, or implementing it again yourself the next day.
- Some modules have longer “seminar” recordings with students. Seminars are never necessary but may be useful if you’d like a broad overview of a topic like you’d get in a traditional classroom environment. If you watch these, we suggest imagining yourself in the place of the student participants and pausing the video to answer for yourself any questions that are posed to the students.
- Sometimes we suggest a textbook or other resources for a course. These are never strictly necessary, and are provided mostly for those of you who particularly like having a comprehensive textbook at hand. If you are finding a topic particularly challenging to understand, a recommended textbook may help, both for explanations and as a source of warmup problems.
- If you are stuck on a problem or have a question that’s not answered by a provided explainer, please leave a comment on the problem or ask a question on Discord. Don’t be a stranger!
- If you have a question that’s hard to describe or answer asynchronously, join a live office hours.
- If you’re not having a fun, mildly addictive experience, contact Oz!
Just like training matches are more challenging than sitting back and watching Wimbledon, working through CS Primer problems will be more challenging than watching pre-recorded lectures or reading a book. You may have days that feel harder than others, and you may need to calibrate the process as you go. But ultimately, if you’re solving problems while having fun and making progress, you’re almost certainly learning more effectively than if you were taking a passive approach.
Finally, we strongly suggest that you find a routine where you can consistently work on CS Primer problems over an extended period of time. You are already ahead of most software engineers simply by deciding to invest in yourself like this, but the greatest returns will come from the long term compounding effect of consistent effort. We also have some brief suggestions for how to stay consistent.
Have fun and good luck!