📚3 Must Read Books for Programmers from Non-traditional Background
Tags: computerscience, programmer, softwareengineering, selflearning
Published: 2022-12-16 16:00:00

---
title: 📚3 Must Read Books for Programmers from Non-traditional Background
published: true
description: 
tags: #computerscience #programmer #softwareengineering #selflearning
# cover_image: https://direct_url_to_image.jpg
# Use a ratio of 100:42 for best results.
published_at: 2022-12-16 16:00 +0000
---
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wai51c4v5rgr6ir5gyjs.jpg)

1️⃣ **[Code: The Hidden Language of Computer Hardware and Software](https://amzn.to/3YlW9zP)**

![Code: The Hidden Language of Computer Hardware and Software](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/czkoj8nmz66mwu3v91x7.png)

This is a classic book I believe should be the first thing to read when you want to learn about how computer works. Even though the [first edition](https://amzn.to/3Yu64Du) was published nearly two decades ago, the content is still relevant, and good news is that the [second edition](https://amzn.to/3V1PuYw) was just released Aug 2022 with new chapters on clock, ALU etc, and the companion website, [CodeHiddenLanguage.com](http://codehiddenlanguage.com/), uses animated graphics of key circuits in the book to make computers even easier to comprehend.

It covers how technology involved and computer was built, how do hardware components work together to run a program, the book answered my questions about what happens in a computer behind the scenes, and it laid foundation for me to grasp higher abstraction level mechanism such as operating system

2️⃣ **[Computer Systems: A Programmer's Perspective](https://amzn.to/3V4JE8R)**

![Computer Systems: A Programmer's Perspective](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y01r38a3o622wi43g8ns.png)


This is actually a text book used at Carnegie Mellon, it explains the underlying elements common among all computer systems and how they affect general application performance but from the programmer’s perspective, it’s a big book and indeed pricy, I was following the corresponding open sources course online, after a while, I just thought I better go with the hard copy so I can flip through them and work on the exercises. But if you don’t want to spend the money on hard copy, learn with the open source course videos should be equivalent from a self learning perspective.

The book is in three main parts: program structure and execution, running programs on a system, interaction and communication between programs. I did not read this book from start to end, but rather dive into the chapters I want to learn more details or curious about, since I’ve already have some basic ideas after reading the first book. Depends on your learning style and your knowledge system, you can go through the chapters sequentially or read the first book and use this as some sort of advanced learning material. 

The benefit of the content in this book/course at least for me is that it provided extensive coverage on how a computer works and the practice problems to test if you really understand a concept.

3️⃣ **[Operating Systems: Three Easy Pieces](https://amzn.to/3YqhRCK)**

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xu47mmfwiy36c3ibn4bt.png)

This book is the culmination of years of teaching intro to operating systems by by Remzi H and Andrea Arpaci-Dusseau to both undergraduates and graduates at the University of Wisconsin-Madison Computer Sciences department. 

It has three pieces: virtualization, concurrency, persistence, these are the fundamental concepts in OS construction. I find it works great with the operating system course the authors are teaching. Note that on the course page it lists CSAPP similar course as its prerequisite.

After learning the fundamentals I’ve found it helps when I look at OS level metrics to identify system bottlenecks, and it was easier to understand the new technologies such as Docker, also the learnings at this abstraction level enables me to have a clearer picture when I debug or design a system, or even during system design interviews.

Which one are you mostly interested in? Let me know what you think about using them as a start to get a better understanding of computer systems!🤓