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.

Previously I mentioned the importance of migrating away from Ruby 1.8, in favor of 1.9. Before my business trip to Italy, I had a chance to watch David A. Black’s new videos for Envycast, in which he presents the essential concepts required to migrate from Ruby 1.8 to 1.9. This pair of videos totals roughly an hour and a quarter, and can be purchased in a package deal for $16. You probably won’t find them to be as entertaining as the ones filled with gags by Gregg Pollack and Jason Seifer, but in my opinion these videos are well thought out and highly informative. The price is fair if you consider that they can bring you up to speed with Ruby 1.9 in no time at all and with very little effort on your part.

ThinkCode.TV: Video di programmazioneSpeaking of screencasts, in Italy I had a chance to pre-announce my “startup on the side”. It’s called ThinkCode.TV and will, you guessed it, create and sell high quality screencasts about programming. ThinkCode.TV was founded with a couple of friends of mine who are top notch programmers and teachers respectively in the Python and the XP/Agile world. Initially we’ll focus on the Italian market (the three of us are Italian) by producing screencasts in Italian about Ruby, Python and TDD. But we plan to expand our horizons, by covering more subjects, accepting external authors, and eventually expanding to the international market by migrating our best sellers to English versions, narrated by native English speakers (to save you the hassle of having to hear a foreign accent).

Should things go well, we may expand beyond the Italian and English markets. But for the time being, I invite Italian speakers to join our newsletter (which is in Italian) to learn about the development of this project and be advised of when we release the first videos. When we branch out to the English speaking world, my readers who don’t speak Italian, will be able to learn about it through this blog.

Scaling RailsWithin the Rails community, New Relic is a company that doesn’t need any introductions. They are synonymous with performance and reliability, thanks to their RPM product for monitoring, detecting, and fixing Rails application performance problems in real time.

What everybody may not have noticed though, is that New Relic started something called RailsLab, a site in which they publish videos and other useful information about scaling and improving the performance of Rails applications.

The first series, known as Scaling Rails, produced in collaboration with my friend Gregg Pollack, is absolutely impressive. The following is a list of the videos they’ve posted so far (they’re also available through iTunes):

  1. Introduction
  2. Page Responsiveness
  3. Page Caching
  4. Chache Expiration
  5. New Relic RPM
  6. Advanced Page Caching
  7. Action Caching
  8. Fragment Caching
  9. Memcahed
  10. Taylor Weibley & Databases
  11. Client-side Caching
  12. Additional HTTP Caching

I was surprised to see so little mention of these fantastic short tutorials in the blogosphere. These videos are a gold mine of information, which is made all the more better by the fact that they’re entirely free. Do yourself a favor and check out these awesome clips, they’re well worth your time.

Next Page →