The Best Book to Read as a Developer

Ryland G on July 02, 2019

I was able to determine that the book is now open sourced, here is a pdf available online. If it's between reading the book and reading my post, re... [Read Full]
markdown guide
 

Thanks, Ryland.

You make this book sound really informative in a good way.

Could you give one example of how understanding the inside of a computer has enhanced your software skills/thinking?

Look forward to reading this.

 

When you know how computer work internally you start appreciating and give more importance to code optimisation and resource management. Understand why Cyclomatic complexity exists. Why a computer cannot be sure if a program is stuck (Halting problem) so no you can't solve that ever, you can only take a guess that it may be stuck. Just to name a few.

 

When you know how computer work internally you start appreciating and give more importance to code optimisation and resource management.

You're absolutely right, it's a very hard phenomena to describe to outsiders. Reading books like this one really just gives you an underlying "love" for how things work.

 

It's the same as any first principles argument: you build intuition.

ex: Studying algorithms allows you to write code that makes appropriate reuse of existing work and by extension arrive at the answer faster while writing more consistent, predictable, manageable code (re: classes of problems).

Similarly, studying computer architecture and processor design allows you to develop intuition about the behavior of processes implemented by the hardware you're using, how they work as abstract resources, what data you're supplying to them as a programmer and by extension allows you to "think" in hardware, which leads to more contextually appropriate code both in general and on a target-specific basis.

 

Similarly, studying computer architecture and processor design allows you to develop intuition about the behavior of processes implemented by the hardware you're using, how they work as abstract resources, what data you're supplying to them as a programmer and by extension allows you to "think" in hardware, which leads to more contextually appropriate code both in general and on a target-specific basis.

This is a great answer (better than mine). Intuition is one of the most fundamental aspects of programming but also the most neglected.

I would say that outside of the abstract value you've communicated, there can also be direct value from the book, depending on your context. If you ever plan on writing C/C++ code professionally, this book will be immensely valuable.

Thanks for leaving such a great insight!

 

Just like @stephangalea said, You start to give more thought about your code, optimisation wise. I've studied Electronic Engineering so I know how the lowest levels (Transistor and Logic Circuit) work. But when you know the whole stack, how things work from the basic elements (transistor) to your code and all the intermediary levels, you will have a more complete understanding of what possible or not and go from there to inventing your own solutions.

 

you will have a more complete understanding of what possible or not and go from there to inventing your own solutions.

That's a unique point that I haven't seen anyone else raise. I definitely agree that having a more end-to-end understanding helps you avoid "reinventing the wheel". Thanks for that perspective!

 

Hey Eduardo!

Checkout out this talk from Scott Meyers on CPU caches. By knowing how the computer uses and access the cache you can write code that takes advantage of this and refactor existing code to be more efficient! For me it was rare to write such code in practice but it's nice to know.

youtube.com/watch?v=WDIkqP4JbkE

 

Wow... Thanks, Denis.

Scott Meyer is such a great lecturer.

I didn't fully understand most of the concepts, but his easy to follow flow kept me engaged.

This video gave me a better 'picture' of how one might take advantage of their understanding of the computer hardware in some software cases.

Thanks again, Denis.

 
 

Sorry for the late reply!

It's a hard question because a lot of what I gained from the book isn't a direct "skill" but instead a deep understanding.

There are obvious places where direct information from the book helped me, such as designing my game engine. What the book taught me about CPU caching really inspired me to learn more about how the cache works. This eventually led to a partial rewrite of my engine, as I had learned about entity-component pattern because of it's cache friendliness. I could list countless situations like these, and from other work projects (such as implementing high performance AI algorithms).

Outside of high performance computing, this book taught me a lot about basic programming patterns and the intricacies of branch prediction. Those are both incredibly relevant concepts, no matter what language you're working in.

 
 

And with the popularity of FPGA's rising, things become even more inception.

 

Another great read to understand the machine is CODE by Charles Petzold

 

Yes. This is exactly what I was going to say. Great book, probably quite similar, it continually sucks you in like a novel and you don't even realize you're deep in the weeds of some hardware abstraction...

 

I literally Crtl-F'ed Petzold, it's exactly what I would suggest. It covered a lot of what I learned in college but in a much more user-friendly readable way. I wish I'd read it before I entered universities doors to be honest.

 

Ahah could have written the same comment. I now suggest people interested in CS or juniors to read CODE, they'll get the stronger foundations everyone should have, as early as possible.

 

CODE is a wonderful book, thanks for adding that to the discussion.

 

Is that free PDF copy legitimate? I know the author is going to open-source the 2nd edition, but the PDF copy of the 1st seems to be on an unrelated site, and the copyright page doesn't say anything about it being released as open source.

I've posted a comment on the author's site, and I'll update here when/if I hear back.

 
 

Not to be a buzzkill, but being excited about an article still isn't consent to give out their work for free. If the book is as influential and useful as you say, kicking some money (seeing it as $40 CAD) towards it is a good habit.

Support the people who do good work 🙂

I've purchased at least 10 copies of this book (definitely not at $40 each, not sure where that's quoted). The author is fully aware of the content in my article.

Thanks for fighting for the content creator!

 

I noticed the book was published in 2006. I can't help but think about progress in hardware since then. But I don't know enough about hardware to know if that progress impacts the overall utility of the book. I suppose based on the positive review here and elsewhere, probably not much.

Any thoughts on this consideration?

 

It's a funny situation, in some ways, we've progressed a lot since 2006. But in terms of the underlying mechanisms, much is unchanged.

I'm not saying hardware isn't improving btw, just not fundamentally like it was in the late 90's-early 2000's. Branch prediction is much better and they add a ton of extra instructions to chipset. Part of what "Inside the Machine" covers, is the "4 GHz race". This is where Intel and AMD duked it out trying to be the first with a 4GHz clock. What they ended up finding out (this is early 2000's), is that clocks over 4GHz tend to melt. This discovery changed the landscape quite a bit, because instead of just trying to add more transistors and increase clock cycles, they actually had to find new areas to improve.

That event, in combination with a cultural shift towards mobile technologies has had a very noticeable effect on microprocessor development. Intel focuses more on ways to save power, and improve task parallelism, as opposed to increase clock speeds and raw processor power.

I would say the bigger changes to hardware are what's happening outside of traditional processors. FPGA's and ASIC's are a real force these days, and Nvidia is obviously killing Intel in terms of recent GPU stuff. Overall I think the book is still 95% as useful as it was when I read it.

 

Really appreciate your insights! Just wanted to make sure I wouldn't invest too much time to be learning stuff that is/would be soon outdated. Thanks for both write ups!

 
 

Sorry! That was meant to be a joke. There's not really an HBO series.

 

I had to think about it for a minute too before I realized it was a joke. :)

 

Me too. Try "Halt and Catch Fire", not about microprocessors exactly, as close as you'll get.

 

I highly disagree with this headline. I've been building apps for ~10 years and not once have I needed to know what a CPU L2 cache is. Put your time towards real-world encounters, yourprimer.com/

 

Hi Robert, there's a difference between saying that a book won't help you and reading it and saying it didn't. Sometimes things we read change our understanding in ways that we don't expect and that sounds more like what Ryland is saying you can expect from reading this book. I've been developing for almost 20 years and while I've never read this book, I have read other books that each contribute to my general understanding. I've also heard many people express sentiment like all developers should learn to code on C so that they gain a proper understanding of memory management. While i have never learned C, I can appreciate that a better understanding of memory management would help my development in Python. My point is really just that the book deserves consideration.

 

I honestly can't argue that, my dad's been bugging me to read a book on R, but with a strictly JavaScript background (full stack), I just haven't been able to stomach the read. 😐

I have been dabbling into Rust recently which has certainly introduced me to different paradigms, I even started writing my JS more organized.

Thank you for your input friend, appreciate it! 🤗

My pleasure. A fiction book that I'd recommend is Bicentennial Man by Isaac Asimov. I won't give any spoilers but one thing it highlights is that we become resistant to change as we get older and while I'm pretty open to new things (at least, that's how I think of myself compared to my parents and other non-tech people my age) I nevertheless find myself acting more like the old person not trusting this "new fangled" technology than I ever thought I would. Internet of Things... meh... I'm concerned with the dangers of letting a dev (and his bug) ruin my toaster! AI... Terminator should end all discussion of that. Big Data - big brother is watching. So I find myself having to overcome a natural suspicion as I get older but I'm also not sure whether it's just because I've been in the industry longer so I know how things can go wrong or just my 40 years of age showing. I think a certain amount of time in dev shows you fads coming and going and you tend to want to sit out the first round while the fanboys and girls prove whether it will last. Right now, I'm happy that containerisation is going to stay and learning Docker is my new mountain to climb :-) Good luck with your own journey in learning Robert!

 

I'm a computer engineering student. That's all contents I've studied from it but deeper. Make me think back to the old day. Thanks

 
 

Definitely! That is what take me understand how computer works and useful when coding independent any programming languages.

 

Great post. Articles that have meaningful and are more enjoyable, at least to me. It’s interesting to read. We are providing opportunity to students where they can gain from their education overseas.

 
 

I am programmer who was self taught by working experiences, and didn't have good reading of books except project tutorials.
Though when I know my code works logically, I'm blind what happened with those peripherals inside the computer.
I'll make this book as a good reading! Thank you for this great post!

 

Though when I know my code works logically, I'm blind what happened with those peripherals inside the computer.
I'll make this book as a good reading! Thank you for this great post!

I'm also self-taught. This sounds like the perfect book for you!

 

Randomly landed on this page from a DEV summary in the email which I never look at. And look who I find here telling people to learn more about hardware? :)

Hope you guys are doing well and making a killing.

 

I didn't take a CS or Software Engineering degree, it was physics all the way through, where coding was essential and incidental at the same time. I did take a master in HPC, where they taught us a LOT about processors, including some of the concepts above (especially pipelining and caching). When I eventually stumbled into a career as a programmer, these concepts were invaluable.

Will look forward to reading this. Thanks for the post.

 

I think that this book is a lot more "practical" as opposed to traditional books used in the CS curriculum. I know that I learned a lot of "related" stuff in college, but none of it ever seemed relevant like the information in this book.

Thanks for the great comment!

 

Thank you so much for your share.

I'm really looking forward to reading this book as a self-taught 17 year old full-stack engineer.
To be honest, through all my journey I've felt many many times that understand what's going on in the low-level helps you a WHOLE LOT in more high level stuff like JS or Python.

Thank you SO MUCH for this book and this article.

 

First off, you're very welcome.

I'm really looking forward to reading this book as a self-taught 17 year old full-stack engineer.
To be honest, through all my journey I've felt many many times that understand what's going on in the low-level helps you a WHOLE LOT in more high level stuff like JS or Python.

This is the best time to start learning this stuff. If you master it now, you'll have that knowledge to compound (like interest) for way more years than most do. That gives you an advantage, trust me.

Glad you liked the post!

 

Great !!! I have same principle with you... i know we are software developers, but its like we must to know what happening under the hood of our software... if you know... then you will write better program...

 

Hey, I looked into the Github release a bit, and I'm not sure it's going anywhere. Chapters 1 and 2 were released 4 years ago, but there doesn't seem to have been any progress beyond. A deeper search into the project might reveal progress elsewhere, but I wouldn't count on getting that second version.

That said, I'm thrilled to have access to the PDF you linked, and I really look forward to reading it. I'm sure it's still valuable in its original form. Thanks for sharing. :)

 

Getting that book right away. :) sounds awesome!!

thanks for taking the time to write this up for us all.

 

You're very welcome. Let me know how you end up liking the book.

 
 

Well, thanks for sharing, I also have one that I consider amazing:

Computer Systems: A Programmer's Perspective (3rd Edition)

I dont think there is a free copy, but this is a link to the book on amazon amazon.com/Computer-Systems-Progra...

 

There is a professor at UT Austin, Jonathan Volvano. He makes amazing introductory textbooks about embedded machines. Here is his personal page, if you found the HW fascinating he does a great job of getting you acquainted with the ARM Cortex M platform, which is pretty complicated. He is all about project-based learning. The man loves what he does and you can tell.

 

Will definitely read it

CleanCode is really affecting me
I guess i choose the write time to read it ✔️

 

CleanCode is one of those books that everyone recommends but I didn't really enjoy that much. It's obviously just me though because everyone else on the planet obviously loves that book.

 

Haha
actually it's fine I have seen people who do not agree with Uncle Bob
as long as one's writing maintainable code.

 

Pumping quality out every day, love it mate!

Cheering you on!

 
 
 

I think you'll love "Computer Systems: A Programmer's Perspective" for the same reasons!

 
 

Have ordered a copy on your recommendation Ryland - wish me luck!

 

Luck wished, you won't need it. Let me know what you think!

 
 

Thanks for writing this article but I have to say, it's definitely not the 'best' book a developer should read. For some developers this will be a waste of time and unnecessary headache.

 
 

Great article! Really enjoyed it and recommended it to a few folks already.

 

That makes me happy to hear. Glad you got value out of it!

 

Sounds excellent, will pick it up for my kid. When I was in school, classes on computer architecture, digital electronics fundamentals etc were mandatory for a CS degree. Certainly never regretted it.

 

When I was in school, classes on computer architecture, digital electronics fundamentals etc were mandatory for a CS degree. Certainly never regretted it.

Yup, and think about if instead of dense, unappealing textbooks the information had come in a super appealing format. This book bridges the type of gap that's very hard to bridge.

 

This sounds great. I too am not keen on learning from textbooks for code but I might have to check this one out.

 
 
 

Great post!

Is there any ePub/mobi format available, too?

 

Thanks, and unsure. But it's a PDF so you can transfer it.

 

Hey,

Could you please recommend something for beginners.

Thank You

 

Sure, but this book is pretty good for beginners. I will get back to you

 

I’ve been looking for a book that will teach me more about hardware - I’ll definitely check this out. You sold me on the illustrations. 🤓

 

Glad to hear it, let me know how it goes.

 

That sounds like a great book... adding it to the (ever growing) list. Understanding the hardware side of things is definitely somewhere I'm lacking.

 

It is a great book. Everyone could benefit from knowing at least a little about hardware.

 
 

Very nice article and very useful. I will try to introduce this book to my kids for sure.

 

I think it's as kid friendly as a book about microprocessors can be. Glad you liked the article, the fact that you described it as "useful" really made me happy.

 

Thanks for the suggestion! This book looks really interesting.

 
 
 

It's a great book, couldn't recommend more.

 

Just sent my order for the book... thanks a lot, I'll read It for sure!

 
 

Hey Ryan!

Thanks a lot for writing this article, I see that the book is not that long, I'm definitely going to read it in the near future!

 
 
 
 

I think it would be a great choice for a book club, great idea.

 

This was an amazing post. It got me hype about actually get some hardware foundation from this book. Thanks man, you prepared me for the next step.

 

It got me hype about actually get some hardware foundation from this book. Thanks man, you prepared me for the next step.

Glad to hear it, although don't say I've prepared you until you finish the book :)

 

Great! I'm going to add this to my soon to read list, I really like to read books but I don't usually read books related to IT, but I've been adding some to my list, thank you for sharing!

 

You made a great post. Not often on the net you will find a competent article on programming, thank you for your efforts. I myself work in the field of SEO, but it is always interesting to plunge into the world of programming. Today I read on another portal also a good article on the topic, writeabout.tech/programming/task-o...

code of conduct - report abuse