Books

Books : reviews

Bruce A. Tate.
Seven Languages in Seven Weeks: a pragmatic guide to learning programming languages.
Pragmatic Bookshelf. 2010

rating : 3.5 : worth reading
review : 19 October 2019

With these seven languages, you’ll explore the most critical programming models of our time. Learn the dynamic typing that makes Ruby, Python, and Perl so flexible and compelling. Understand the underlying prototype system that’s at the heart of JavaScript. See how pattern matching in Prolog shaped the development of Scala and Erlang. Discover how pure functional programming in Haskell is different from the Lisp family of languages, including Clojure.

Explore the concurrency techniques that are becoming the backbone of the next generation if Internet applications. Find out how to use Erlang’s “Let it crash” philosophy for building fault-tolerant systems. Understand the actor model that drives concurrency design in Io and Scala. Discover how Clojure uses versioning to solve some of the most difficult concurrency problems.

It’s all here, all in one place. Apply the concepts from one language to find creative solutions in another—or simply discover a language that you haven’t seen before. You never know—it might even become one of your favorite new tools.

The ideas here is you get to learn enough about a language to understand its key properties by programming certain tasks in it. Do this seven times over seven weeks, and you have a much deeper understanding of several important computational concepts. Tate advocates putting in the hard graft, and warns that If you simply read this book, you’ll experience the flavor of the syntax and no more. That is not entirely true: I indeed simply read the book, and feel I got more than mere syntax. In fact, I usually skimmed the syntax sections, and properly read only the sections on the conceptual underpinnings.

These concepts include side-effect-free functional programming, and how that helps concurrency. Most of the languages have support for the actor model of concurrency. There is also a language that uses prototyping, the description of which makes me think this is a recipe for something much worse than spaghetti. Erlang’s "let it crash" feature is most interesting of all: a concurrent language combining monitoring code, and restarts, allows for a different approach to achieving robust code: rather than lots of defensive programming and exception handling, just watch for crashes, and start the objects up again when they fall over.

If you do want to do the hard work, you will need much more than this book. Tate overviews the concepts, sets the problems, and points you off to the web to get the detailed information you need for the tasks. I assume doing the work does reap the rewards: where code is concerned, doing is better than reading. But I prefer doing tasks that solve problems I want to solve, rather than exercises.

The style is brisk and to the point, mostly. I could have done without all the analogies to movies I mostly haven’t seen. But if you want to learn about some fundamental programming principles, and how they occur in a range of programming languages, this book will give you a good head start.