The Best Tech Books I read
I have gathered here the few books I consider to be masterpiece about computer stacks. There are two for each levels of the stacks:
- Hardware.
- Operating Systems.
- Programming Language.
And since the lack of enthousiam is the root of mediocrity I have also added a category "Inspiration" .
Hardware
Code: The Hidden Language of Computer Hardware and Software
Charles Petzold's masterpiece explains how hardware works to the deep down. Starting from scratch, with countless drawings, information flows from the pages to your brain without effort.
Explaining like if you were 5 years old, it follows perfectly the book quality rule: "Quality is inversely proportional to its size".
Computer Organization and Design
Excellent description of modern CPU internals and how to reach Software/Hardware synergy. Prefetching, cacheline or Out-Of-Order execution (to name only a few) are clearly explained. If the "Code" book is the sparkle, "Organization and Design" is the explosion.
Trivia : An example of speed improvement due to good hardware knowledge: Doom stored textures
horizontally in RAM to take full advantage of the cacheline.
Trivia : An other example of speed improvement due to good hardware knowledge: OpenGL Interleaved
arrays are faster than separate arrays (thanks to cacheline again).
Operating Systems
Whether it is to perform I/O, display something on the screen or communicate on the network you program will have to leave user-space at some point. What happens in kernel-space is explained here.
Modern Operating Systems
Virtual Time, Virtual Memory, Virtual Filesystem, System calls, Sleep/Busy Locks and Process scheduler (to name only a few key concepts) are clearly explained in this great book by Tanenbaum.
The Linux Programming Interface
Have you ever wondered how malloc
is implemented by the C Library ? This book offers a top-down approach to understand what the Operating System can do for your application/library. A departure from the bottom-up description of "Operating Systems: Design and Implementation" that may be easier for some readers. A must have regardless.
Trivia : An example of speed improvement due to good knowledge of page-fault: Firefox boots two seconds faster thanks to DLL preloading.
Programming Language
Most of my code is C and I discussed the best books for the C programming Language in a previous article.
I hope to be able to recommend the two best C++ books soon.
Inspiration
Three components lead to success:
- Passion.
- Skills
- Luck.
Most of us have Passion and Skills. It is very inspiring to
see what happen when Luck is also part of the equation:
The Pixar Touch:
They should have gone broke and failed several times...but instead flew to Infinity and Beyond ! Many delicious technical trivias
(early days of Framebuffers, texture mapping) and great anecdotes about human rivalties/survival: Passion, Skills and a LOT of Luck.
Also: Crazy schedules.
Masters of Doom:
Passion, Binary Space Partition and a little bit of Luck ! Also: Crazy schedules.
Adapting the stack
The books mentioned should satisfy most stacks but it is paramount to adapt it to your specific needs. Since I do a fair amount of network programming those times, I would certainly include
the masterpiece: "The TCP/IP Guide".
My past career as a 3D-engine developer involved a lot of Computer Graphics, I would have mentioned the following:
Real-Time Rendering
An extensive reference that describes the recent realtime rendering techniques. An essential map that will help you to know where you want to dig deeper. A CG Classic.
Michael Abrash's Graphics Programming Black Book
A very old book that still contains very good lessons (especially planes mathematics) but really an inspiring celebration of Michael Abrash's motto: "Do what you Love, work with humility and Good Things will come eventually".
All together
I was tempted to add " The TCP/IP Guide" and "Hacking : The Art of Exploitation".