Skip to content
loading...

re: The Best Book to Read as a Developer VIEW POST

FULL DISCUSSION
 

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.

 

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.

 

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!

 

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!

code of conduct - report abuse