01 October 2019

After 5 years in software industry, from third world education system, from quickest growing field, I have to admit that, my foundation knowledge about Computer Science and somewhat Software Engineering is really bad. Lacking of much basic knowledge, I could not push myself to next level both in mindset and skillset. Although I have heard about most of terms but I have no idea about why they exist, how they can solve problems and how to apply those things into real life. So, it’s time to decide that, back to basic, without any doubt.

There are two approaches to go through basic things.

  • Top-Down. That means we start from highest level of computer system, and go down one by one layer.
  • Bottom-Up. Try to build a simple computer from near-lowest level, then climb up (like Nand&Tetris course did).


I spend some days (actually months) to figure out which book I should read, which skill to practice but that’s really hard to give a clear point of view on what to do because there is much. However, there are some bullets I think can help me to shorten the list:

  • Course from top world universities in CS, SE (Stanford, MIT, CMU, UC)
  • Textbook by professors from top world universities in CS, SE
  • Textbook from sub-domain leader (professor, engineer)
  • Essay from world-class influencers in CS/SE (Peter Norvig, Donald Knuth, Paul Graham, …)

About engineering, I try to follow domain leaders from Twitter and their books.

So, let dig deep in details. Just let you know, I have more than 20 books in my Wunderlist’s book list, then I feel scare of them because all are must-read Computer Science/Software Engineering books. With years experience in learn new thing, I know that I cannot absorb them simultaneously. Divide to conquer is the best way to grab all of them and put into my head and hand. I have to go one by one but with very strong approach that ensure I will learn some useful pieces.

My Approach

  • Input
    • Learn basic quickly
    • Catch main concept
    • Read first, then try example
  • Output
    • Practice (apply on real project is better)
    • Benchmark
    • Blogging

Foundation Books

  • Structure and Interpretation of Computer Programs
  • The Elements of Computing Systems
  • Foundations of Computer Science
  • Principles of Computer System Design An Introduction

Books In Priority Order

  • Clean Code
  • Refactoring - Flower
  • Code Complete
  • GOF
  • Mythical Man-Month (for project managing)
  • Pragmatic Programmer
  • Programming Pearls

Another book list can be found at here.


This post was written 2 years ago.

blog comments powered by Disqus