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!
Glad you're doing this as a series, Ben! We get to be armchair explorers as you do the hard work. Thanks.
Ben - this is very valuable. I'd love to teaching programming using this "buffet" approach. "All you can program."
So far, it's a lot of fun! At the very least, Ruby was easy to install on Windows and was already installed on my Mac.
I'm hoping it will give me some great perspective on the world of programming. I'm currently working my way through Ruby - Day 1 exercises and I'm simply floored at how *many* ways there are to solve the most simple of problems. Not to mention that the syntax is like 50% optional :) Of course, I'm adding all the extra syntax I can!
When I saw the title of the blogpost I thought, "wow that sounds awesome!". Then I read along to what languages were involved and was more like "huh?!?!"...
If it were me I'd probably have to cut out about 5 weeks.. :)
I think the point of the book is to explore languages that very different than the ones you might be used to. The fact that you'd cut out five weeks is probably all the more reason that the book would hold value :)
As much as I love ColdFusion, I don't think I have enough code monkey in me to want to get into more languages.
Especially cause I don't take well to reading; I'm more of a visual person. Used Lynda.com's video library to teach me Photoshop; would have never made it through a book, but hey, more power to ya!
I know what you mean. It can also be very frustrating going from a situation where we know a lot of info (ColdFusion) into one where we know nothing! At that point, you know concepts, but have no way of implementing them. And, what's even more frustrating is when Googling yields no results - is that cause the language doesn't support the idea.... OR, more likely, that you're just not searching for the right thing.
Lynda.com is good stuff. I'd like to get down with that for some Fireworks videos.
Today, as I write this, you've only gotten as far as Prolog day 2. You still have Scala yet to go before you even reach Erlang. So I suppose this should wait. But today a book review of Erlang and OTP in Action was published on Slashdot:
If it turns out that you like Erlang, you might want to read the book review.
I bought the print and ebook versions of Erland and OTP in Action and I've switched entirely to ebooks now so if you do decide you want to dig into Erlang more than Seven Languages allows, I'd be happy to mail you the In Action book... let me know via private email.
Thanks for the link. Moving onto Day 2 of Scala as I write this. I've heard good things about Erlang. I believe it is the language that powers CouchDB if I remember Mark Drew's presentation correctly. Should be good when I get there.
Thanks a lot for the offer. I'll let you know after I've had a taste of Erlang... we'll see how happy or sad it makes me.
eBooks are cool things. I recently read my first ePub book on the iPad and really really enjoyed the experience - way more than I thought I would. Once I highlighted something, I was sold :) I'm hoping to move more books in that direction as well.
Just some news: 2 days ago, Dr. Dobb's Journal made this book one of 6 finalists for their Jolt Excellence Award.
Oops. It isn't just a finalist. It's a Jolt Productivity Award winner, meaning that it finished in the top 3 books of the year.