A Few of My Favorite Technical Books

I recently found the need to do some unit testing on one of my "for fun" projects. The project is an ASP.NET MVC project, so I decided to use NUnit as my testing framework. After searching for a tutorial on the framework, I remembered a great chapter on unit testing I read in a book years ago. After re-reading that chapter, I found that I was more than ready to take on the task ahead of me.

This got me thinking about some of the books that have helped shape me as a programmer, and how I should share them with anyone who finds this blog. I love programming, and when I'm not actually programming, I find myself reading about programming. Here are a few of my favorite programming related publications:

Beautiful Code
O'Reilly Media
Edited by Andy Oram & Greg Wilson

This book is a collection of essays written by famous and influential programmers when asked what they think is meant by "beautiful code". It contains chapters by the likes of Brian Kernighan (C), Greg Kroah-Hartman (Linux Kernel), Yukihiro Matsumoto (Ruby), and many more top project contributors and language inventors. This book contains the aforementioned chapter on unit testing(by Alberto Savoia) that helped me understand the goals of automating my tests. Every chapter of this book is pure gold, and includes historical notes and stories of good ol' days. There is no need to read this book in order, and can be enjoyed as a whole, or as a sort of collection of technical short stories.

The C Programming Language
Brian W. Kernighan & Dennis M. Ritchie

This is the best programming language definition book that I have ever read. The authors created the language, and wrote an amazing book about it. It reads more like a close friend walking you through the language step by step. Along the way, this friend shows you examples of how he used the language to solve problems in implementing the UNIX operating system (which Ritchie actually did). Never has such a short book contributed so much to the field of computer science. No list of programming books is complete without this classic.

Just for Fun: The Story of an Accidental Revolutionary
Linus Torvalds, David Diamond)

With a little help from a co-author Linus Torvalds (benevolent dictator of Linux) wrote an autobiography about how he created the Linux operating system kernel. Although this book is not meant to be technical, it can't help from being that way. There is even a part in the book where Linus suggests that non-technical readers skip about 50 pages. This story exemplifies what it means to be a computer programmer, and why it pays to do things for yourself. The reader learns the humble beginnings of the Linux kernel, and how it grew out of a self-satisfying dorm room project to perhaps the most prolific operating system there is (yeah, I said that). Anyone who codes for fun will love this book.

Operating Systems: Design and Implementation
Andrew S. Tanenbaum, Albert S. Woodhull

I first read this book in college, not for a programming course, but for a public speaking class. I needed to give an instructional speech, and I did some research into operating systems in order to use the topic. Although my speech could have gone better (I lost points for doubling my allotted time), I learned a great deal. This book was also what Linus Torvalds used to create his Linux kernel, and the Minix kernel that this book uses to teach was what inspired him to create it (in a bad way). To see the previous two authors have a decade-spanning public forum debate, just search for the term linux is obsolete. An informed reader won't be disappointed.

Cross-Platform Development in C++: Building Mac OS X, Linux, and Windows Applications
Syd Logan

Although this book is a bit more targeted than some of the others listed, it is actually a really good general programming guide. Mr. Logan was on the Netscape Navigator team, and helped develop the XUL language that is used for developing Firefox applications. In the book, he talks about the importance of keeping code at the correct level of abstraction and never integrating UI with functionality. Following this book's advice will make your code much cleaner, more portable, and easier to understand. Problems are easier to tackle when they are properly abstracted, and ensuring code portability acts as an enforcing mechanism to keep things abstracted. I am a much better programmer today for having read this book.

Although there are many more books that I would like to list, I haven't the time and I doubt you have the attention span. I'll end this post with an excerpt from one of my favorite non-programming books; Little Brother by Cory Doctorow:

"If you've never programmed a computer, you should. There's nothing like it in the whole world. When you program a computer, it does exactly what you tell it to do. It's like designing a machine — any machine, like a car, like a faucet, like a gas-hinge for a door — using math and instructions. It's awesome in the truest sense: it can fill you with awe."