Recommended resources

The resources below are all read or watched by myself.

The book Code: The Hidden Language of Computer Hardware and Software is a great introduction of how computers work. It covers only the basic stuff so it doesn’t require any special knowledge or skills to read, but even experienced programmers find its content valuable. (Strongly Recommended)


The book Harley Hahn’s Guide to Unix and Linux is a great introduction to Linux for first time users. It explains the concepts very well and makes sure you understand them clearly. Some contents like GUI are outdated and could be skipped. (Strongly Recommended)

The book How Linux Works is best for people who want to become a power Linux user. It covers some deeper topics like disks, filesystems, networking, etc. I recommend this book if you have used Linux regularly for 1 or 2 years.

Programming Languages

The Udemy course JavaScript: Understanding the Weird Parts covers the most obscure concepts in Javascript, like execution contexts, this, closures and prototypes, and presents them in a straightforward way. The only problem I find is that the instructor speaks too slow so I always play it at 1.25x speed. (Strongly Recommended)

Category Theory

The book (in the form of a series of blog posts) Category Theory for Programmers explains category theory and its connection to programming. The author also has lecture videos on the same topic. I do find the lectures more approachable than the book. I only finished the first part of the videos and the corresponding chapters of the book, and I think it’s more than sufficient for an average programmer like me:) (Strongly Recommended)

Distributed Systems

The book Designing Data-Intensive Applications is a must-read in this field, although it covers more than distributed systems. The author also has a Distributed Systems lecture series taught at University of Cambridge (Strongly Recommended)

The CSE 128: Distributed Systems course from UCSC covers mostly the theoretical part and it’s friendly to beginners. (Strongly Recommended)

I only recommend MIT 6.824 for people who already have knowledge about distributed systems, it might be too hard for beginners.