[x^2 for x in lst]

Seven Languages in Seven Weeks

Author: Bruce A. Tate

Review created: 2016-01-18

Seven Languages in Seven Weeks was a very exciting and a very demanding book to read. It was the first book that I read (or rather finished reading) in electronic format, which has both advantages and disadvantages.

The book contains, as one might surmise from the title, introductions to seven different programming languages. Each language has a chapter of its own that comprises somewhere between 30 and 40 pages. Each chapter is divided into fixed sub-chapters Introduction, Day 1, Day 2, Day 3 and Wrapping up <programming_language>.

The introduction usually gives a very short background of the language and the wrap up summaries the main content of the chapter. The Day-subchapters contain the main material. Usually, the day 1 subchapter presents how to perform basic stuff in the language: run programs in the programming environment, print messages to standard out, define functions and such things. The day 2 subchapter often builds on the material from day 1 and expands it with a little more advanced concepts like list comprehensions and higher order functions. Day 3 finally often presents the specialties of the language, e.g. monads in Haskell, transactional memory in Clojure and metaprogramming in Ruby. Day 3 very often also contains a discussion on how concurrency is handled in the language, if it supports any other concurrency model than threads that is.

In the end of Each of the day subchapters, there are some exercises that the reader is encouraged to solve. The exercises are of two types: regular questions ("Find a IO user group on the net") and programming exercises. The questions are all fairly easy, the programming exercises have variable levels of difficulty.

I think that doing exercises is generally a good idea when working through a book teaching a programming language, but it is even more important when reading this book because text on each language is so short so that the author does not have to space to explain everything in the level of detail that one might be accustomed to from reading other books. Doing the exercises forces one to search the net for info that is needed to solve the exercise, but that is not presented in the book. I think that this helps you understand the topic better.

The amount of info available on the net varies between the programming languages. For most of them, there is a lot of info on the net. The only exception is IO. For IO, the available info on the net is quite limited, which also limits the usefulness of the language a bit, because it will be harder to learn the language and it will be harder to solve problems that one runs into.

The languages presented in the book are:

  • Ruby
  • IO
  • Prolog
  • Scala
  • Erlang
  • Clojure
  • Haskell

As you can see the list contains a wide variaty of languages spanning several different programming paradigms: object oriented, functional, logic and so on. Both statically and dynamically typed languages are present. All of them, I believe, are strongly typed however.

I've worked through the book during 2015 and studied the languages in order. It has been quite an experience. Some of the languages (Ruby, Prolog, Scala, Erlang) I've had come across before, and some (IO, Clojure, Haskell) I'd never coded in before.

I think that the author made an excellent selection of languages to include in the book. The languages i really different. Sure, some features that are included in one language most often are included in one or two other languages, but seen as a whole, the languages represent a very wide range of programming languages.

It was really interesting to study new languages and especially such languages that I probably wouldn't have bothered to look into if I hadn't read the book. It is also interesting to compare similarities and differences between the languages. Like that if clauses are rather similar in IO and Clojure, list comprehensions are included in both Erlang and Haskell. And that Prolog is...Prolog.

As mentioned above, this was the fist e-book that I finished. I liked how easy it is to search in an e-book and that I could read it on both the mobile, the tablets and the laptop and that the reader program, at least on the mobile and tablets, remembered where I finished reading the last time. Also, the lower price of an e-book compared to a regular book is nice.

What I don't like with reading an e-book is...that I miss the feeling of a real book in my hands. I also like to make notes in the margin and to underline important text. Doing so makes it easier to find the important sections in the book if I want to skim through it some time later. As it feels right now, I will go not buy another e-book for a while but go back to buying paper versions of the books I want instead.

So how much do you really learn from reading a chapter about a language in Seven Languages? The answer to that question I think is: as much to get an idea of if you want to study the language any more or if it is not your cup of tea. You learn about how to perform basic things, if-clauses, loops, recursion and such things but also what the main features of the language are. This is nice, but is it enough to speak the language fluently. No. It is not. You will need to study other sources like books and online tutorials, to be able to do that. It is not, however, the purpose of the book that you shall be able to speak seven languages fluently after having finished the book, so I don't think this is anything negatively. If you want to learn seven new programming languages: buy seven programming books, one for each language you want to learn. If you want to try out seven programming languages to find out which of them you like and would want to learn: buy this book!