DR

Computer Science Curriculum

When I finished my coding bootcamp, Hack Reactor, I felt lost.

Don’t get me wrong, Hack Reactor was an excellent learning experience. One aspect I appreciated is that they set up a specific curriculum that allowed me to fully trust the system. I fully trusted that Hack Reactor had generated a learning plan that was optimized to most efficiently teach students to become software engineers. They specified WHAT to learn, I just had to put in the time and effort to learn it.

However, there is no guide for what to do after graduating.

I spent a good chunk of time learning the knowledge and skills needed to do well at my job. I learned Angular, Azure DevOps, and Java, among many other things.

I still felt I was missing something.

I found that I was learning bits of information, but not the principles and theory. Elon Musk says that “it is important to view knowledge as a sort of semantic tree. Make sure you understand the fundamental principles, i.e., the trunk and big branches before you get into the leaves/details or there is nothing for them to hang on to.” I was picking up twigs and leaves, but didn’t have the trunk and big branches.

I hope to develop a deep and useful knowledge base that lasts. Javascript frameworks are useful, but they can go out of style. Plus, if you just know React, that knowledge isn’t very transferrable to other technologies, whereas having a strong understanding of algorithm design certainly is. In the interest of developing a strong trunk, I went searching.

After tons of research, I found my answer. I decided to learn the underlying principles of computer science. It hasn’t been easy, but it has been highly rewarding.

Initially attempting to learn computer science felt overwhelming. People spend 4 years studying full-time to get a CS degree.

Luckily, after tons of experimentation, I’ve found an excellent set of resources. There is a limitless amount that one could learn about computer science, so I’ve attempted to create a curriculum that is targeted toward learning only the most useful knowledge, over a manageable timeframe.

I have now spent 300+ hours over about a year working to learn the fundamentals of computer science. Here are some of the resources I’ve found most useful:

CS Curriculum Guides:

teachyourselfcs.com

A great guide filtered down to the most essential CS resources. This is where I found many of the below sources.

Open Source CS Degree

An open source github repo full of CS materials. I prefer teachyourselfcs for its more concentrated list.

Overall Course:

Harvard CS50

Harvard’s CS intro class. It is phenomenally well-produced and a great starting point. The below resources cover many of CS50’s topics in greater depth.

Computer Architecture:

Computer Systems: A Programmer’s Perspective

Covers what’s under the hood of a computer. Goes in depth into how information is represented digitally (e.g. how different formats are represented in bits and bytes). Plus, it covers how code gets compiled down from a high-level language, into a low-level language, into assembly code, and finally into machine code.

Code by Charles Petzold

A more entertaining and palatable book covering computer systems. Less in-depth, but very well written.

Algorithms and Data Structures:

NeetCode

This is a paid course targeted toward LeetCode style job interviews. I’ve found it quite helpful.

Networking:

High Performance Browser Networking

Guide to networking, specifically browser networking.

Julia Evan’s zine

Entertaining, cartoon-style overview of networking fundamentals.

Ben Eater Networking Youtube Series

Youtube series covering how networking works.

Distributed Systems:

Designing Data Intensive Applications

Phenomenal book. Highly recommend it. I’ve found that this curriculum overlaps well with the topics that one is expected to know in a Systems Design interview.

The following are topics that I intend to dive into soon and the resources that I’m planning to explore. However, I can’t vouch for them fully, as I haven’t started them yet.

Databases:

CS186 from UC Berkeley

Operating Systems:

OSTEP: Operating Systems: Three Easy Pieces

I hope this guide proves helpful. I would love to hear your thoughts. Feel free to reach out – visit my contact page for details on where you can reach me.