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

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 firstto define proper goals:

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.

I’m trying to apply someactive learningprinciples 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

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

I. Programming (32 hours 55m)

The article titled “teach yourself computer science” specified that I should follow “roughly” the order of study they propose, beginning by the programming field.

Main Resource: Structure and Interpretation of Computer Programs (SICP)

This book is considered by many as the bible every developer should read. It’s free and you can find the bestepub and PDF versions here.

You can find the solutions of the exerciseshere.

I succeeded to do almost all exercises till1.2.5 Greatest Common Divisors.

Complementary Resource: Berkeley Videos

The videos areavailable here. The notes of the course arehere. If you search some sample exams from Berkeley, it’shere.

These are a very good complement to the book: concepts are explained without asking you too much about Mathematics, in contrast with the book. If you want to study the SICP but your mathematical background is not strong enough, simply follow this course. Mynotes and exercises are here.

What I’ve learned from SICP so far

What can I use in real life?

The whole discussion about recursion in the book helped me quite significantly to easily write them. It’s a topic I’ve always struggled a bit with. Now it’s a breeze to go through any problem I want to solve with recursion.

What difficulties did I encounter?

This book is not for math haters. It was written for MIT students who have already quite some mathematical knowledge. Without this prior knowledge, the exercises can be pretty difficult and frustrating at time.

It was the cause of another problem: I spent too much time on the exercises. I could solve most of them but it took me hours in some cases.

I decided from there that I would not spend more than 30 minutes on the exercises to keep the frustration low without discarding the huge benefit of doing them.

II. Discrete Mathematics (50 hours)

The more I was reading SICP, the more I found the exercises difficult, especially since it was dealing with some mathematical concepts that I was not aware of. Therefore, I decided to move on and to begin to studying theMathematicssubject.

Main resource: Discrete mathematics and its applications

Teach yourself computer scienceadvises you to read the lecture notes by László Lovász, freely available hereas a ps document. I converted it toPDF herefor those who don’t know what a ps document is. I didn’t know either.

However, I’ve chosen another main resource of study, apparently more beginner friendly:Discrete Mathematics and its Applicationby Kenneth H. Rosen. It’s a pretty big book, quite inexpensive in its earlier editions.

In 50 hours I was able to finish the first chapter (propositional logic) and achieve 54 exercises.

Complementary resource: MIT 6.042J mathematics for computer science, Fall 2010

These videosfrom MIT are more advanced courses about Discrete Mathematics. Again, they assume that you know quite a bit in Mathematics. Nevertheless, they are very interesting even though I had difficulties to follow them.

In the worst case it will at least give you a good glimpse of what Discrete Mathematics is all about.

One teacher (Tom Leighton) has better teaching skills than others. However, they all have a very deep knowledge of their respective subjects.

What I learned so far

What can I use in real life?

What difficulties did I encounter?

III. Return to the basics of mathematics (11 hours 15)

After having some other (minor) problems with my Mathematics knowledge in Discrete Mathematics, I decided to come back to the basics.

Another important reason which guided my choice: I really enjoyed doing some Mathematics. Without that, I would have not continued to study computer science.

Don’t be confused: the Mathematics related to computer science are different from the one you studied (and maybe hated) at school. I would advise you to give it a try.

At that point I decided to alternate between studying Discrete Mathematics and the basics of Mathematics.

Main resource: How to learn basic arithmetic fast

This video of 4 hours is really good to refresh a lot of things, from the sums and product through the percentages, exponents, logarithms… It covers a lot of ground very quickly with a lot of exercises.

The tips given are very good as well to understand and solve basic problems quickly.

You can see on youtubean hour long previewof the video. If you like it, you canbuy it on Vimeo.

What I learned so far

What can I use in real life?

What difficulties did I encounter?

After studying the SICP and Discrete Mathematics, it was very relaxing to finally understand everything with a bit of work. I didn’t have many difficulties.

My advice for beginners in computer science

If I could come back to the beginning of this adventure, I would have studied the different subjects in this order:

I would have studied Basics and Discrete Mathematics in parallel and then moved onto the SICP, trying to get the Mathematics knowledge I still missed along the way.

Learning computer science: What’s next?

I will continue to learn the basics of Mathematics and Discrete Mathematics for at least 150 hours:

In short: a very good experience, underlying a many of my weaknesses but as well teaching me solid fundamentals I was missing.

Keep in mind though: if you expect to be a super wizard programmer by studying computer science, you might be disappointed. Computer science is hard to study. It has strong theoretical sides and even if I already found some use of it in my daily work, it’s not mind-blowing at all.

Going through this journey asks for work, patience, and dedication. Having clear goals, a concrete study plan and enjoying the process are mandatory.

This article was written byMatthieu Cneudeand was originally published onThe Valuable Dev, a blog focusing on the important and timeless concepts in software development. You can read the piecehere.

Story byThe Valuable Dev