A Programmer's Bookshelf
An anonymous reader writes "With christmas just round the corner I have been looking for gifts for my geek friends. But what book? I recently found a simple page with one person's bookshelf and explain what's good and what's not. What do you think? Whats on a programmer's bookshelf? (or what should be and is not!)"
goedel escher bach d:
GENERATION 26: The first time you see this, copy it into your sig on any forum and add 1 to the generation.
It's hard to be specific when "a programmer" could write in a number of languages. Regardless, just about anything from O'Reilly is well worth the shelf space. I still have my original copy of "The Whole Internet"!
Godel, Escher and Bach is a damned good book, and any self-respecting geek should have read it. Twice.
Other favourites include Capital by Marx, Crime & Punishment by Dostoeyevsky, Also Spracht Zarathustra (Nietzsche), The Fountainhead (Rand), The heart of a dog (Bulgakov) and Dubliners (Joyce).
If you're a programmer, the last thing you're going to want to read are code books.
You do know that books had Indices before databases, right?
Censorship is telling a man he can't have a steak just because a baby can't chew it. --Mark Twain
I find lo-tech paper books aren't costworthy in today's tech environment - they go out of date too quickly, and are thus resource wasteful (In my area - web tech - anyway). Any reference books I buy in digital form, as this is usually more cost-efficient.
So for a REAL bookshelf... probably some IT-angled fiction. This is tricky as most authors fail to research tech angles correctly (like Hollywood computers, but not quite as glaringly obvious). Douglas Copeland's Microserfs was OK, and quite entertaining.
For an intelligent recommended read though, I can't recommend the usual Zen and the Art of Motorcycle Maintenance highly enough. It really makes you think, which is nice. I've been meaning to check out Scott Adam's (of Dilbert fame) God's Debris too. That's free to download by the way. So it might be worth reading a bit and if you like it, you could buy paper copies for your friends.
Code Complete by Steve McConnell
The Pragmatic Programmer by Andrew Hunt and Dave Thomas
Refactoring: Improving the Design of Existing Code by Martin Fowler
The Mythical Man Month by Fred Brooks
The are a few off the top of my head that any programmer should read. I'm sure there are a few others. Most things after that are probably specific to certain areas and interests.
Neither of these I would recommend in general, but they are both excellent books if you are dealing with the subject matter they discuss. They are both enjoyable reads and extremely useful.
Inside the C++ Object Model by Stanley B. Lippman. Lippman is one of the original authors of CFront (along with Stroustrup), the original C++ compiler which worked by translating C++ into C. This book explains how every C++ feature is implmented by the compiler: virtual functions, multiple inheritence, in-memory object layout, etc. If you are working on projects where the overhead of a pointer de-reference or virtual function call may be too much, then this book is a must read. Even if that doesn't describe you, this is still a suprisingly enjoyable read and will almost certainly help you at any job interviews for C++ programming positions.
Hackers Delight by Henry S. Warren Jr. This deals entirely with efficient bit twiddling. It has chapters on counting the bits set in a word, finding the first set bit, quick integer square root approximations, etc. Unless you're working with embedded systems or otherwise need assembly-level optimizations, this book just serves to obfuscate your code. On the other hand, it's quite a fun challenge to try to figure out the algorithms without reading the explanations.