Teach Yourself Computer Science

Andre Padilha
3 min readJun 14, 2022

--

Quick introduction on my motivation to study basic Computer Science: I graduated in Management Engineering in 2019 and started a Master’s in Computer Science this year, 2022, both at UFABC. The thing is, although I was accepted into the program and had some projects involving programming, I knew I had a lot of weak areas to take full advantage of the program. The areas that I identified needing improvements are: Algorithms, Compilers, Operational Systems, and Computer Networking.

Image: Freepik.com

Searching for references to learn Computer Science with rigor/depth I stumbled upon the website https://teachyourselfcs.com/ and I instantly saved it in my favorites and I constantly check the references there, although it’s a short page.

It’s a list created by Oz Nova and Myles Byrne, to help people without a Computer Science background (that includes Engineers and even Software Engineers).

There are 9 topics to study and it includes several famous/consolidated references:

  • Programming — Structure and Interpretation of Computer Programs
  • Computer Architecture — Computer Systems: A Programmer’s Perspective
  • Algorithms and Data Structures -The Algorithm Design Manual and/or Introduction to Algorithms
  • Math for CS — Mathematics for Computer Science
  • Operating Systems — Operating Systems: Three Easy Pieces
  • Computer Networking — Computer Networking: A Top-Down Approach
  • Databases — Readings in Database Systems (the “Red book”)
  • Languages and Compilers — Crafting Interpreters (or the “dragon book”)
  • Distributed Systems — Designing Data-Intensive Applications

Let’s face it: it’s easy to get lost in countless lists like “TOP 50 BOOKS TO START YOUR CAREER IN [HOT CAREER IN TECH]”. The fact that Teach Yourself Computer Science (sometimes referred to as TYCS) is concise and doesn’t look like bullshit (there are a lot of old books that passed the test of time and are standard in their respective fields) really appealed to me.

I decided to complete the whole list, and since I can still take some credits at UFABC, I will take those that are equivalent to the topics in the list, besides of course all classes that are required to complete my Master’s.

I started my journey with the first topic, “Programming”, on my own using the recommended book: Structure and Interpretation of Computer Programs (I will sometimes refer to it as SICP). I read the whole book, watched some classes, and solved more than 300 exercises in approximately 5 months (more about this reference here). I skipped “Computer Architecture” because I took credits on this course at Cornell University (I remember programming a cardiac arrhythmia detector using an FPGA and a lot of Assembly).

“Math for CS” was extensively studied in “Discrete Mathematics”, a course I took at UFABC (it was a lot of hard work), and luckily for me, we used the same book that Teach Yourself Computer Science recommended.

I was also enrolled in two other courses: “Data Structures and Algorithms 1”, an undergrad course (it was quite easy after solving Structure and Interpretation of Computer Programs), and “Algorithm Analysis”, a Master’s course that was hard work (although less difficult than what I was expecting; I think that I faced it with a lot of respect). I feel more confident about Algorithms now, but I still want to study more elaborate algorithms and other data structures in Data Structures and Algorithms 2 and 3.

I am enrolled in “Compilers” right now. I was delighted by this topic while reading SICP.

In short, from the original list I feel that I still need to complete:

  1. Operating Systems
  2. Computer Networking
  3. Databases
  4. Languages and Compilers (currently enrolled)
  5. Distributed Systems

All of them are available online through TYCS, but I can take some credits at UFABC, which I will probably do in the following months.

The most important thing though is to get some real hands-on experience, and I am grateful that I will be working with state-of-the-art sensors and vehicles in my Master’s.

Thank you for reading!

--

--

Andre Padilha

Master’s student in computer science at Universidade Federal do ABC.