January 15th, 2013

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:

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

Since I receive email asking what books to start with all the time, here is A beginner's stack.


I was tempted to add " The TCP/IP Guide" and "Hacking : The Art of Exploitation".


Add a comment



Name Homepage
E-mail
(Will not appear online)
Comment



Comments (14)


#1 - Norman - 01/17/2013 - 11:27
In addition for C :

1. Zed Shaw´s "Learn C the Hard Way" ( http://c.learncodethehardway.org/book/ )
2. 21st Century C ( http://shop.oreilly.com/product/0636920025108.do )
#2 - Edouard - 01/17/2013 - 11:49
Dude, you read in my mind.
Yesterday I was thinking :
"I would be very interested to know which books Fabien owns and what are his best readings !"
Thank you !
#3 - Ben Malavisuriya - 01/17/2013 - 12:59
thank you very much for these recommendations, time to get started.
#4 - Michael - 01/17/2013 - 16:09
I've been working C since I read your "http://fabiensanglard.net/c/index.php" article. I've been quite interested in Quake. I cannot seem to find a good reference for OpenGL in C. Can you suggest an OpenGL book that I can hook into with C? Amazon seems to list too many for me understand what I should be looking for.
#5 - fabien sanglard - 01/17/2013 - 16:34
@ Michael:

The OpenGL SuperBible was good back in the OpenGL 2.0 days. I have heard the latest edition is pretty good too.
#6 - Sergey - 01/18/2013 - 01:06
Really great stack for programmer. Petzold and Tanenbaum have written great books.
#7 - Toni - 01/25/2013 - 10:15
On your Twitter, you posted a picture with two books from Tanenbaum. What did you think of the 'Design and implementation' book? Worth the money?

Thanks for a great blog!
#8 - fabien sanglard - 01/25/2013 - 14:15
@Toni

"Operating Systems: Design and implementation" is all about Mimix architecture. It is very good if you want to learn about the internals of a MicroKernels with Client/Server design.
#9 - Riko - 01/28/2013 - 07:33
Can you add books about algorithm design and problem solving? I'm curious as to what books you'd suggest in that regard.
#10 - fabien sanglard - 01/29/2013 - 22:10
@Riko

In terms of algorithm I would recommend the books by Robert Sedgewick ("Algorithms" is a reference book), Abrash provides a pretty cool explanation of Boyer-Moore in his "Black Book" and of course there is the classic "The Art of Computer Programming" by Donald Knuth.
#11 - Dominik - 02/04/2013 - 16:45
Thanks Fabien for this great list.
I think its a good help for my Bachlor Thesis. I might also add "Computer Grafics - Principles and Practice".
Thanks again.
#12 - Christophe - 02/06/2013 - 05:33
Thanks alot for the recommendations!
I'm also looking for a beginner's book on Direct3D programming; any thoughts?
#13 - Matthew Stenquist - 02/15/2013 - 05:11
C O D E by Charles Peltzoid is one of my favorite books. The first few chapters of Morse code, and Braille really make C O D E wonderful to read!
#14 - exim - 02/15/2013 - 15:20
In case if your interest is not limited to only browsing someone else's [brilliant] game sources from 80s or early 90s ;) :

Bjarne Stroustrup - The C++ Programming Language

 

@2013