Overview

This is an opinonated guide for people who want to self-study the basics of Computer Science, in order to build solid foundations and avoid getting wiped by LLMs. I added two specialization path of my interest after you're done with the basics, in case you're interested too: Web Development and Machine Learning. There is a discord server here if you're looking for a community of self learning people. These being university courses, they won't stay online forever, make your own backup with yt-dlp for videos, and wget for websites. Now about the courses:

  • CS 61A concentrates on the idea of abstraction, allowing the programmer to think in terms appropriate to the problem rather than in low-level operations dictated by the computer hardware.
  • CS 61B deals with the more advanced engineering aspects of software, such as constructing and analyzing large programs.
  • 15-213 provides a programmer's view of how computer systems execute programs, store information, and communicate. It enables students to become more effective programmers, especially in dealing with issues of performance, portability and robustness.
  • 15-445 is on the design and implementation of database management systems, whatever you end up doing you will interact with databases. Case studies on open-source and commercial database systems are used to illustrate these techniques and trade-offs.
  • CSCI 0220 gives you the tools to explore interesting questions and convince yourself and others of their answers. You'll be introduced to new worlds of ideas and ways of thinking. We'll learn about Set Theory, Logic, Number Theory, Combinatorics, Graph Theory, and Probability.

🥼 Labs | 📹 Videos | 📕 Books | 📝 Notes

Prerequisites

  • Fluency in english
  • High school mathematics 📕
  • Some discipline

Courses

Tips

  • Use a GNU/Linux distro. I suggest Fedora, with Distrobox so that all your development environments are in separated containers. You will have to install lots of stuff, this will prevent conflicts and filling your computer with things you only need temporary.
  • Use a simple text editor with syntax highlighting (like Helix) so that you type everything, without the help of autocomplete or LSPs. They are good for productivity, they suck for learning. Things will stick better if you type and force yourself to remember what to type.
  • When stuck take a break. Only look at solution if it's taking days to solve. These courses are known to be hard and are supposed to be hard.
  • Build stuff. It does not have to be a novel thing. Pick something that's already been done, identify the main functionality and start from there. You can iterate or jump to something else when done. Some recommendations: a text editor, a version control system, a database, and old school video game like Snake or Pacman.

FAQ

How long is this going to take?

Count 200 to 250h per course.

Will I be ready for a job after completion?

Yes, but make sure to build a portfolio and start networking along the way. Getting a job is matter of who you know, more than what you know, if you don't have a degree.