Following the Teach Yourself CS Curriculum
For the last month or so I have been steadily making my way through the Teach Yourself Computer Science Curriculum.
I have decided to document my whole learning process here, for two reasons:
As a method of self-accountability
In the hope that it may help someone who is also planning on following through this entire monster of a course
Most of the content suggested here is for programmers who already have a considerable amount of experience, and want to solidify their foundations, not for folks who are just starting out.
Quoting the TYCS website:
This guide is NOT designed for those who are entirely new to programming. We assume that you are a competent programmer without a background in computer science, looking to fill in some knowledge gaps. The fact that we’ve included a section on “programming” is simply a reminder that there may be more to learn. For those who’ve never coded before, but who’d like to, you might prefer a guide like this one.
Don’t worry, all of this might seem over-whelming at first(yup, it was for me), but as I parsed through the first few books, I’ve realised that you pick up steam as you go. The most important thing is to not let go. Keep pushing through even though it might not all make sense at once. Once you develop an intuitive understanding of the main concepts, all of the knowledge blocks you’ve developed begin to start fitting in like Tetris blocks. Trust me, the effort is worth it.
So, I will be updating my progress, penning down my own personal revelations and mind-fork moments (looking at you SICP) as I make my way through all of the suggested content and books.
The curriculum is designed is such a manner that one is supposed to spend ~100 hours on each topic and then re-visit stuff that they found interesting as they go.
All accounted for, it should take about 3 years to finish all of the prescribed content at my current rate of thoroughly perusing all of the content.
I have made a Github repo to store all of the required reference material. Most of it is available for free on the internet!
I expect to blog once a week to make an update on my progress.
Let’s see how this goes.
Here’s a TL;DR of the whole curriculum:
Study all nine subjects below, in roughly the presented order, using either the suggested textbook or video lecture series, but ideally both. Aim for 100-200 hours of study of each topic, then revisit favorites throughout your career 🚀.
Teach Yourself Computer Science Curriculum
|Programming||Don’t be the person who “never quite understood” something like recursion.||Structure and Interpretation of Computer Programs||Brian Harvey’s Berkeley CS 61A|
|Computer Architecture||If you don’t have a solid mental model of how a computer actually works, all of your higher-level abstractions will be brittle.||Computer Systems: A Programmer’s Perspective||Berkeley CS 61C|
|Algorithms and Data Structures||If you don’t know how to use ubiquitous data structures like stacks, queues, trees, and graphs, you won’t be able to solve challenging problems.||The Algorithm Design Manual||Steven Skiena’s lectures|
|Math for CS||CS is basically a runaway branch of applied math, so learning math will give you a competitive advantage.||Mathematics for Computer Science||Tom Leighton’s MIT 6.042J|
|Operating Systems||Most of the code you write is run by an operating system, so you should know how those interact.||Operating Systems: Three Easy Pieces||Berkeley CS 162|
|Computer Networking||The Internet turned out to be a big deal: understand how it works to unlock its full potential.||Computer Networking: A Top-Down Approach||Stanford CS 144|
|Databases||Data is at the heart of most significant programs, but few understand how database systems actually work.||Readings in Database Systems||Joe Hellerstein’s Berkeley CS 186|