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.
Get more stuff like this
Subscribe to my mailing list to receive similar updates about programming.
Thank you for subscribing. Please check your email to confirm your subscription.
Something went wrong.
Great choices, all, but way to go with on getting the Little Schemer. One of my favorite books of all time. I’ve even thrown the book in a few laps of non-programmer friends, and they’ve remarked how it’s an interesting little book. Plus how can you not love the illustrations!
I loved the Little Schemer. I got through in less than a week, while lying on the beach in Jamaica. And by getting through it, I mean working out all of the questions in my head before looking at the answer section.
I’m also interested in Processing, but that will have to wait a bit. I’m on a functional bent recently. Intro to algorithms is on my Amazon wish list, as well, along with more hardcore titles like Essentials of Programming Languages and Types and Programmig Languages.
Good list, all in all.
@Eddie, @Srdjan: Thanks. 🙂 The Little Schemer is probably the “most fun” of the lot. I’m really looking forward to it.
+1 on “Little Schemer”
As an alternative and prelude to ‘Processing’, consider the cheaper ‘Visualizing Data’ by Ben Fry (one of Processing’s developers)… it’s more tutorial than reference manual, and it’s a window in to his way of thinking, worth the price of admission. Buy ‘Processing’ next year, if you liked this. 🙂
The feynman lectures are also pretty cool, Lower level, but interesting.
http://www.amazon.com/Feynman-Lectures-Computation-Richard-P/dp/0738202967
Assuming you’re able to read all of those books in a year, you could spend $250 per year on a Safari account, and get access to 120 books per year instead of 7.
https://ssl.safaribooksonline.com/subscribe
Have you tried reading Programming Pearls by Jo n Bentley. He summarises the concepts and focuses on solving problems you come across while creating software. Also, Pragmatic Programmer seems a good read. However, I wonder how you would find the time to read all these books?
@Tim: I’ll have a post about the subject up soon.
@Sai: I read both of those books a few years ago, and they are both excellent for different reasons. I no longer have dead tree copies of them, since I relocated a few times, and I sold them before moving from Ireland to Canada. I’ll probably be able to read 6 of these 7 books, in a few months. And use the “Introduction to Algorithms” tome as a reference.
As a self taught programmer, I am always looking for foundational programming books. This is a good list.
I look forward to purchasing “The Hidden Language of Computer Hardware and Software”
I was just wondering… why do you need to learn C++… when you’re already so much “ruby on rails” and all that cool stuff kind of guy? Esp. when the entire world seems to be busy bashing C++, some even calling it “obsolete” or at least “too uncool to learn”!!! The reason I’m curious is that I already have that new Stroustrup book, I want to learn C++ myself, but keep getting overwhelmed with all the slew of “cool” languages coming out every day!!!