How to teach yourself computer science: A developer’s 100-hour journey

I wondered for quite a long time: does only knowing the basics of computer science help to become a better developer? And could it bring value to a developer?

If you ask yourself these questions as well, and you don’t want to invest time (yet) into learning computer science, here’s the story of my experience. In this article, I’ll answer the following questions:

  • Why learn computer science?
  • What was my study plan?
  • What resources did I use?
  • Did I learn something useful that can be transferred to my day to day job as a developer?

I began with this fantastic list of resources: teach yourself computer science. It’s basically a guideline on how to study computer science as a software engineer, without spending a lot of money trying to enter MIT.

[Read: Are EVs too expensive? Here are 5 common myths, debunked]

So, why learn computer science by yourself?

That’s a simple but important question: why would we do that in the first place?

For every project which requires a good amount of motivation, I try first to define proper goals:

  1. Being able to learn a new language / new technology quicker by knowing some core concepts you can apply to every language / technology.
  2. Improving my understanding of lower abstraction levels. Understanding a bit better “how it works under the hood” could improve my understanding and therefore my efficiency for solving bugs or designing algorithms.
  3. Improving my logical reasoning skills to make my code more logical as well.
  4. I believe that understanding the underlying concepts is a key for innovating in the development field.
  5. Understanding the history of the industry: why are we where we are now, what can we do to improve the computing world?

Computer science 101: the study plan

I’m not interested in trying to read every book about computer science. It should at least provide me some sense of understanding.

That’s why my study plan focused on memory retention, understanding and building a quick reference about what I’ve learned, to be able to come back to it easily.

  1. I studied about 2 to 3 hours every week, depending on my priorities. I didn’t want to do too much and feel burned out and fed up by computer science. The most important thing to me was to study on a regular basis, whatever the amount of time. It should be something I enjoyed doing.
  2. While studying new material, I wrote summaries on it in the form of mindmaps. This has two advantages: writing helps to remember what I learned and I can easily recall some key concepts when I need them, in no time.
  3. My study time is divided in two categories:
    • New learning (new chapter in a book, watching a new video course, doing examples and exercises)
    • What I call “knowledge base recall.” It’s mainly doing (more) exercises about the new material I’ve read / seen the week before, reading my mindmaps, and try to remember what I wrote in it.
  4. Regarding the exercises, I try not to spend more than 30min on each of them. The goal is to struggle enough to remember the concept but not too much to feel burned. It’s a delicate balance.
  5. I try to redo some exercises I could not do the first time, days (even weeks) after the different attempts, to see if I my understanding improved.

I’m trying to apply some active learning principles by doing as many exercises as I can, and asking myself questions while reviewing my mindmaps.

Revisiting what I learned from one week to the next is really, really beneficial to improve my memory retention and my understanding.

What I’ve done so far

motivation to learn discrete Mathematics

Here what I’ve precisely done during these (almost) 100 hours of computer science study, in chronological order.

I. Programming (32 hours 55m)

graph pomodoro done overtime programming part