My favorite books

This is a collection of my favorite books, most of which I own. I highly recommend each to anyone who shares my interests. I was very tempted to list books I've heard are great but haven't gotten the chance to read yet, but I stuck to books I can personally vouch for.

The programming books are among the best in their subject areas. They are popular and referred to often. The other non-fiction books were the best I've found so far for the level I'm at. I don't spend much time reading fiction, but I've listed the books I've come across that are worth reading cover to cover.

I added a final section for things other than books, which includes magazines and audio books which I really enjoyed.

This page was generated with XML and XSL.

Book categories:
C++
[cover]
The C++ Programming Language
by Bjarne Stroustrup

The definitive C++ programming manual written by the creator of C++, Bjarne himself. This is a dry, highly structured book but very readable. I use it mostly for reference, but once you have a good handle on C++, it's fun to skim the book to see all of what C++ has to offer.

[cover]
The Design and Evolution of C++
by Bjarne Stroustrup

This is Bjarne's second most popular book. The first third chronicles C++ from its humble beginnings as a C preprocessor to a powerful, commonly used language. The rest lists C++ features and their own histories in the evolving C++ standard. The narrative style is refreshing after reading TC++PL, and I enjoy learning about parts of C++ I haven't used yet through this book.

[cover]
Effective C++
by Scott Meyers

Because of the complexity and depth of C++, there are a lot of books written in this style of short chapters with tips and things to look out for. This is one of the most popular, partially for the quality, which is matched in other books like Sutter's Exceptional C++, but also for the easy narrative prose Scott writes in.

[cover]
More Effective C++
by Scott Meyers

These tips are deeper and more modern than those in Scott's first book, but the style and quality are the same.

[cover]
Modern C++ Design
by Alexei Alexandrescu

Some people say this book is hardcore, cutting-edge, even bleeding-edge C++. It pushes C++ to do things no one thought it could. Others say it's proof that C++ is a mess and needs to be cleaned up. In any case, Alexei's book is changing the way people use C++.

[cover]
Ruminations on C++
by Andrew Koenig, Barbara E. Moo

Ruminations starts with programming problems and then presents solutions with C++, often pointing out how C++ features make things easier. Koenig and Moo were important contributors from the birth of C++ to the present. This is definitely not a reference book, and can be read straight through.

[cover]
Expert C Programming
by Peter van der Linden

This book is on C, but the ideas are applicable to C++. It's worth buying for the section on pointers alone. I bought it when I was just learning C, and this book gave me that "aha!" moment where I understood pointers. It also has great stories about the author's programming experiences.







Windows Programming
[cover]
Programming Windows
by Charles Petzold

The Win32 API bible. With only C or C++ experience, Petzold gives a deep understanding of the Win32 API, how it works, and why. I would recommend buying this book when starting with Windows programming because of the solid foundation it builds.

[cover]
ATL and COM Workshop
by Andrew Troelsen

Andrew is quickly becoming a very popular writer on Windows technologies, especially COM. This book progresses like most COM books, starting with C++ and ending up with COM. The OOP foundation and progression is the best I've seen though.

[cover]
Inside COM
by Dale Rogerson

Another good COM book. It's a good companion to Andrew's book, since it gives another perspective.

[cover]
Programming Windows with MFC
by Jeff Prosise

A comprehensive MFC manual, written clearly but somewhat dryly. However, no other MFC book is recommended as much as this one.







Graphics Programming
[cover]
Computer Graphics: Principles and Practice in C
by James D. Foley, et al

I don't own this book, but I wish I did. Unluckily the professors I had at UIUC assigned Watt and Hearn & Baker instead of Foley (this one), so I get by with those. Foley is the best though, according to almost everyone I know.

[cover]
OpenGL Programming Guide (red book)
by Mason Woo, et al

For learning OpenGL, there's no question this is the book to learn it from. This book is as technical as possible while still being very readable. It is meant to be read first by section, then used later as a reference.

[cover]
Special Effects Game Programming with DirectX
by Mason McCuskey

DirectX books are sadly mostly low quality. This book is no Red Book (see above), but it's done well and is a great reference. As a bonus, the author maintains a forum on his web site and responds to bug reports. Two things to keep in mind while considering this book are that DirectX 9 is out, and has significant changes, and also the MSDN documentation is well done. That said, I still highly recommend this book for learning DirectX quickly.







Computer Science
[cover]
The Art of Computer Programming
by Donald Knuth

I find Knuth tough to read, but he is interesting. The first book dives right in to his made-up assembly language, MIX. This was extremely boring, so I put it aside for a while. But I came back to use Knuth as a reference for learning searching and sorting techniques, as well as other basic algorithms. Knuth presents a string-search algorithm that has become famous, and it's always nice reading about an algorithm or technology from its creator. I'm sure there are many more gems like that in these books, and I'm looking forward to finding them. This link is to the first volume only, since Amazon doesn't sell the 3-volume set. If one of the other volumes looks interesting and you don't want to get all three at once, don't hesitate to get them out of order. I should also say that Knuth is about the most famous computer scientist there is, so if you're a computer scientist yourself, this is required (and enjoyable) reading.

[cover]
Data Structures and Algorithms
by Harry R. Lewis, Larry Denenberg

This is my personal favorite algorithm book. It gives clear and concise descriptions of important algorithms, and walks the reader through how they work and how to implement them. I was trying to implement the backpack algorithm one day, and CLR (my book is an earlier edition, Stein didn't contribute to it) and TAOCP were taking a long time to absorb. This book, in one and a half pages, gave me quick understanding of the basics. I then went back to CLR for a different perspective. I don't hear much about this book, but an assistant professor at UIUC who the students loved assigned it, and I'm glad he did.

[cover]
The Algorithm Design Manual
by David Skiena

I bought this book solely for TopCoder competitions, and I'm not sure how useful it is for that. But it's very similar to Denenberg in that it gives short, concise explanations of algorithms. The catalog of algorithms in the back is well structured, so it's good for getting a big picture about what algorithms there are and how to think about them as a whole.

[cover]
Introduction to Algorithms (CLRS)
by Cormen, Leiserson, Rivest, and Stein

Another of the core computer science books, this is basically a catalog of algorithms. There is only pseudocode in this book, and it's probably the dryest writing on my list. But when I need to know more about an algorithm than the other two books listed above, I go to this one. Unlike Denenberg and Skiena but similar to Knuth, this book uses CS and mathematical notation that beginners find intimidating.







Software Engineering
[cover]
The Pragmatic Programmer
by Andrew Hunt

This book teaches the reader how to think about programming, or to use metacognition as I would say. It gives you tips on how to catch yourself doing things that will hinder your productivity.

[cover]
Code Complete
by Steve C McConnell

A good book to read for any level of programmer. Beginners will learn good habits before they develop bad ones, and experienced programmers will catch bad habits and reinforce those they might not think about. Tips include everything from how to comment to object-oriented concepts to what software quality is.

[cover]
Peopleware
by Tom Demarco, et al

Two very experienced software engineers share their knowledge on how to make programmers productive and ship quality software on time. The book contains a wealth of information on real companies and real data. An example I often think about is IBM's study on how much desk space each developer needs. It turned out to be something like 120 square feet, and the authors found the average total cubicle space for some group of developers was only 100 square feet. They also challenge ideas like people are more productive when sad than happy and the more stress the better. They talk about the "coding zone" and why programmers need to be able to shut off all interruptions.







Mathematics
[cover]
The Book of Numbers
by John H. Conway

With a deceptively light title, The Book of Numbers is fun to read for any level of mathematician. It shows how powerful numbers can be, and approaches them in many different ways. Prime numbers, polygonal numbers, and Eisenstein numbers are a few of the interesting sets the reader will learn about. My favorite part is where the author shows how geometric shapes can be manipulated to generate numbers in certain sets. This immediately clicked in my mind, and led to a deeper understanding than I had before.

[cover]
Euclid's Window
by Leonard Mlodinow

This one is definitely a page-turner. I finished it in a couple days. It starts with the Greek geometers, which I've been really interested in lately. When I picked it up I had just learned that Eratosthenes measured the size of the Earth back in the third century BC. The book builds on exciting discoveries like this one up through today's string theory. It requires no mathematical background, but whets the appetite to learn more. Very well written, flows well, an overall enjoyable read.

[cover]
Winning Ways for Your Mathematical Plays
by Elwyn R. Berlekamp, John H. Conway, Richard K. Guy

Originally Winning Ways, or WW, was a two-volume set. That original set is very hard to find, listing for $200 used on Amazon. If you're lucky enough to have one at a local university library, check it out. The authors are now breaking the set in to four books, so this one is only the first half of the original first volume, updated and revised, though I'm not sure what the new material is. I also read this for TopCoder, and it did come in handy. I didn't learn any game theory at UIUC, but it does find its way in to algorithms in unexpected ways.







History and Politics
[cover]
Renegades of the Empire
by Michael Drummond

If you're interested in what it's like to work at the old Microsoft, this is the book to get. The other popular book on this topic is Microserfs, but it's fictional. This one is a factual recount of the early- and mid-90's at Microsoft, before it transformed in to the serious, professional, organized business it is today. It focuses on the evolution of DirectX, back before it had that name. It takes place back when backstabbing was required, going behind your manager's back was expected, and politics were insane. It's true MS is still like this in some instances, but not nearly as much.

[cover]
Fire in the Valley
by Paul Freiberger, Michael Swaine

After seeing the movie "Pirates of Silicon Valley", I was recommended this book. It starts at about the same time, 1975, the birth of the personal computer revolution. Actually it starts in the 1800's with mechanical calculators, but that chapter is short. The January 1975 cover of Popular Electronics sported the Altair 8800 for a mere $439, and Bill Gates was the one to write BASIC for it. One of the co-authors is an editor for Dr. Dobb's Journal, and I believe he was around when DDJ was born in 1976. The writing style is very different, and some may find it annoying. Each chapter takes a chunk of time, usually between 1975 and 1980 or later, and takes it from a certain perspective. So some periods are revisited several times. I didn't mind it, because the perspectives are very different. But some Amazon.com reviewers hated it.

[cover]
Crypto
by Steven Levy

Steven gives a fascinating account of the history of cryptography in the U.S. One of my favorite parts was reading about Diffie Hellman driving down to see a space shuttle launch; I've wanted to do that since I read page 25. Another very uplifting part was when Diffie was at his low point right before thinking of public-key cryptography. His life wasn't going well, but his wife told him he was destined for greatness and he didn't fully believe it. And then he discovered this world-changing idea. I also liked seeing how all these people working on something the NSA was trying to suppress got together and hammered out a cryptographic system. Things like cold-calling professors, driving hundreds of miles to meet at night with strangers, and talking to people who couldn't tell you anything. Apparently solid cryptographic algorithms are very hard to create, but the NSA underestimated what the public could do.

[cover]
Close to the Machine
by Ellen Ullman

This is a good book to get a feel for what a programmer's life is like, personal and private. It even includes a few sex scenes which I thought were gratuitous, but tolerable. Ellen is a bit dramatic at times too, but she's in to her work. If anything, Ellen will be your coder friend when all your friends seem to give you blank stares when you start talking about programming.

[cover]
U.S. History for Dummies
by Steve Wiegand

This is the level I'm at after taking one history course in junior high. Not much to say about it except it's easy to read and politically neutral.

[cover]
Politics for Dummies
by Ann DeLaney

Again, an easy read and extremely useful. When I picked it up I honestly didn't know how often senators and representatives were elected to Congress. This book is also politically neutral. The author is highly qualified; see the back cover on Amazon.com for a short bio.







Sci-fi
[cover]
Robot Dreams
by Isaac Asimov

This book barely beats Asimov's "I, Robot" because this one includes the story "The Last Question". I won't say anything about it, just that you should read it. If you can't wait, you can find the story online, but the rest of the book is almost as good. If you like this book, pick up "I, Robot" next.

[cover]
Robot City 2
by William F. Wu

This book totally engrossed me in junior high. No other book took me away from reality like this one did. Reading it now, the plots are a little thin, but it's still pretty good. Take a look at it if you need some light reading, or if someone who hasn't hit college yet is interested in sci-fi.

[cover]
The Ultimate Hitchhiker's Guide
by Douglas Adams

What can I say about THHGTTG? It's a cult classic. Nothing more to be said. Buy it! Okay, I'll say that it's an ingenious blend of sci-fi and humor, some of the funniest material ever written. It's technically British humor, but geeks all over the world love it.

[cover]
Ender's Game
by Orson Scott Card

Every CS major and their imaginary girlfriends at my university read this book. It's action-packed, intelligent, fun sci-fi. Orson's later books in this series are slower and more thoughtful, but this one is simply fun.







Classics
[cover]
1984
by George Orwell

In 1984, the state has nearly total control over the thoughts of everyone working for it, and the poor are kept too stupid to be a threat. Winston Smith can't help but think freely though. This is his story, a struggle to live in a world where 2+2=5, and only those who can believe that survive.

[cover]
Fahrenheit 451
by Ray Bradbury

Ray Bradbury is a very interesting person. He said he wrote the draft for this book as fast as he could on typewriters that cost a dime an hour (or so). In the afterword he writes about all the people that have written him about taking out a racist comment here or a swear word there. He replied that books need to keep their swear words and racist comments, and that was the whole point of his book.







Magazines
[cover]
C/C++ User's Journal
by CMP Media, Inc.

CUJ started with C, incorporated C++, and is now starting to cover Java and C#. It employs the top C++ experts like Alexei Alexandrescu, Scott Meyers, and Herb Sutter. CUJ.com has free columns as well as some of the print articles online.

[cover]
Dr. Dobb's Journal
by CMP Media, Inc.

DDJ is a little higher level than CUJ, focusing on how software is created, what new software technologies are interesting, and how to use them. DDJ.com carries free articles as well.







Audio books
[cover]
Just For Fun
by Linus Torvalds, David Diamond

I usually don't listen to audio books, but I think this one is stronger on tape than in print. Linus talks a fair amount in it. The tape starts with Linux as a young child coding with his grandfather (I believe), and goes through Linux's birth and infancy before it became popular. This is another one of those things I'm glad I had when it seemed none of my friends were coders.