A few days ago it was my birthday. This year I decided to reward my aging self with some books I’d had my eyes on. My budget was roughly $250, nothing to snicker at, but programming and computer science books aren’t exactly famous for being inexpensive.
The hardest part was shortlisting only a few titles, out of a substantial number of books that interest me. This ruthless streamlining was not solely motivated by cost either. Time is by far the most non-negotiable constraint, and as pretty as certain books may look on my shelves, I’d rather get titles that I know I will reference often or read cover to cover.
Last night I finally placed my order on Amazon. Narrowing down my choices wasn’t easy, but I think I was able to get a lot of bang for my buck, so to speak. I’m sharing the list of books I ordered, and my rationale behind selecting them, in the hope that some readers will find this information useful. You’ll probably find one book at least that tickles your fancy.
1) Code: The Hidden Language of Computer Hardware and Software by Charles Petzold
Very high-level languages have major advantages, but they tend to conceal many details. As a result these low-level details are often forgotten, overlooked or no longer taught. I’m talking about gates, bit manipulation, etcetera. Ten years have passed since I last sat in a computer architecture class or programmed in the MIPS assembly language, so I see this book as a refresher about this sort of interesting details that lay between hardware and software.
2) Programming: Principles and Practice Using C++ by Bjarne Stroustrup
I’ve been meaning to get more serious about learning C++ for a while now. The fact that I chose this book may seem odd. After all, it’s a C++ book for CS 101. I’m fully aware that I won’t find many new concepts in it and that the pace will probably be very slow to me at time, as it’s aimed towards newcomers. I opted for this book, among other reasons, because it’s very recent and was written by Bjarne Stroustrup (C++’s creator) himself. It’s a modern overview of C++ today and should cover all the essentials of writing portable code with a slant towards real world work, including parts of the STL. I’m interested in revisiting well known concepts from the perspective of C++, and this title should work as a good introduction before I switch to The C++ Programming Language, Effective C++, More Effective C++, Exceptional C++, and other advanced books. Lastly, I chose it because a good friend suggested it to me.
3) Processing: A Programming Handbook for Visual Designers and Artists by Casey Reas
Processing is another language I’m interested in. The idea of creating fancy visualizations of data is very appealing to my statistical side. This is probably another “basic” book, but I wanted to have a detailed tutorial on the subject. It’s also a very beautiful book. (Remember that deep down we are all hedonists.)
4) Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin
I love “Uncle Bob”‘s writing style and this book is, according to many, a wonderful addition to any software engineer’s collection. Apparently it’s Code Complete meets Refactoring meets Test Driven Development: By Example, all wrapped up in a single book. As much as that’s possible, naturally.
5) The Little Schemer (4th Edition) by Daniel P. Friedman
This is the first little volume in the “The * Schemer” trilogy. I’ve heard great things about this unusual Q&A book that straddles the border of functional and logic programming. I’m not new to functional programming, but I’m certain that this book will be an eye-opener nevertheless. There should be plenty of fun exercises inside. If I enjoy it as much as I hope, I’ll also get The Seasoned Schemer and The Reasoned Schemer, down the line to bring my understanding to the next level.
6) Introduction to Algorithms, Third Edition by Thomas H. Cormen
I own the second edition of this book, but guess what? They just released a revised edition with updated content, new algorithms and it’s been expanded to take the world of multiple processors into account. If you are not familiar with this classic, don’t let the title mislead you, this is no “introduction”. It’s an excellent, rigorous tutorial and reference that every programmer should own.
7) Elements of Programming by by Alexander Stepanov
The toughest book of the lot. This newly released theory of computation book has incredible reviews. It should be a rigorous handbook of the mathematical foundations of programming. And at this price it’s a bargain, in my opinion. The examples are in C++, so I’ll quote part of the review by Bjarne Stroustrup.
“Elements” is a great book in that it can change the way you think about programming in fundamental ways: If you “get it” programming will never be the same again for you.
Reading “Elements” requires maturity both with mathematics and with software development. Even then it is so different from most books on programming that it can be hard going. The frequent comparisons of “Elements” to Knuth’s “The Art of Programming” is well earned.
— Bjarne Stroustrup
What are your thoughts on this list? I think I could have done a lot worse with my modest $250 budget. And as you can imagine, I’m pretty excited about their arrival and am looking forward to diving into them.
On a side note, this reminds me that I should start writing detailed reviews for the most interesting books I’ve read over the past few years, not just for Ruby books (recently updated) and Rails ones (to be updated soon).
Disclaimer: The links to Amazon have my referral. It’s a small contribution to this blog that won’t cost you a dime. If you are opposed to me making a few cents from my posts, feel free to select, copy and then paste the title that interests you into Google.