Normally, I would wait to review a book until after I had finished it; but, with Seven Languages in Seven Weeks by Bruce Tate, I wanted to mix things up a little. Each of the seven languages outlined in the book is covered over the course of three days. On each of those three days, there is some teaching followed by some independent learning, or "self-study." I wanted to mention this book now so that I could then post my self-study exercises in some follow-up blog entries.
If you haven't heard of Seven Languages in Seven Weeks, it's a new book from the Pragmatic Bookshelf that provides an in-depth introduction to seven uniquely interesting programming languages:
To give you some insight into why these particular languages were chosen, I am going to repost a portion of the book's introduction, which is freely available on the Pragmatic Programmers' web site.
Ruby. This object-oriented language gets high marks for ease of use and readability. I briefly considered not including any object-oriented language at all, but I found myself wanting to compare the different programming paradigms to object-oriented program- ming (OOP), so including at least one OOP language was important. I also wanted to push Ruby a little harder than most pro- grammers do and give readers a flavor for the core decisions that shaped the design of Ruby. I decided to take a dive into Ruby metaprogramming, allowing me to extend the syntax of the language. I'm quite happy with the result.
Prolog. Yes, I know it's old, but it is also extremely powerful. Solving a Sudoku in Prolog was an eye-opening experience for me. I've worked hard to solve some difficult problems in Java or C that would have been effortless in Prolog. Joe Armstrong, creator of Erlang, helped me gain a deeper appreciation of this language that strongly influenced Erlang. If you've never had an occasion to use it, I think you will be pleasantly surprised.
Scala. One of a new generation of languages on the Java virtual machine, Scala has brought strong functional concepts to the Java ecosystem. It also embraces OOP. Looking back, I see a striking similarity to C++, which was instrumental to bridging procedural programming and OOP. As you dive into the Scala community, you'll see why Scala represents pure heresy to pure functional programmers and pure bliss to Java developers.
Erlang. One of the oldest languages on this list, Erlang is gathering steam as a functional language that gets concurrency, distribution, and fault tolerance right. The creators of CouchDB, one of the emerging cloud-based databases, chose Erlang and have never looked back. After spending a little time with this distributed language, you'll see why. Erlang makes designing concurrent, distributed, fault-tolerant applications much easier than you could have ever thought possible.
Clojure. Another JVM language, this Lisp-dialect makes some radical changes in the way we think about concurrency on the JVM. It is the only language in this book that uses the same strategy in versioned databases to manage concurrency. As a Lisp dialect, Clojure packs plenty of punch, supporting perhaps the most flexible programming model in the book. But unlike other Lisp dialects, the parentheses are greatly reduced, and you have a huge ecosystem to lean on, including a huge Java library and widely available deployment platforms.
Haskell. This language is the only pure functional language in the book. That means you won't find mutable state anywhere. The same function with the same input parameters will give you the same output, every time. Of all the strongly typed languages, Haskell supports the most widely respected typing model. Like Prolog, it will take a little while to understand, but the results will be worth it.
.... Those languages that I picked are not necessarily the best, but each one is unique, with something important to teach you.
I just finished Ruby - Day 1, which I'll blog about shortly. I get a good sense that I'm really going get a lot of out it. Based on the first set of self-study questions, Tate really asks a lot of the reader; it's basically like you get homework assignments with every day of teaching. Very exciting! As a kid, homework was lame; but as an adult, the idea simply rawks!
Stay tuned for seven levels of awesomeness!