Woot! I'm at the seventh language of my seven language tour, and since I skipped one language from the book, I now have a choice to make, which language do I finish my little tour in? I've been noodling on and off as to what language that would be. Since I started this little tour way back when there have been 3 other languages on my radar that I'd be interested in checking out, and they are all fairly pragmatic languages:

Mirah: Apart a general curiosity about programming languages, one of the reasons I was drawn to this book was that I was looking for a language to 'complement' ruby in my day to day work. While I love Ruby, at times I am unsatisfied with its performance. There are tasks for which I would just like something faster. Mirah, a language created by JRuby creator Charles Nutter, is a statically typed JVM language with ruby inspired syntax, but  no runtime library. It compiles down to JVM bytecode (like Java) and depends entirely on the JVM  for its runtime library

CoffeeScript: Essentially a distillation of "Javascript: The Good Parts" created by Jeremy Ashkenas. I  really like the little things it adds to the language (destructuring assignment, everything is an expression, string interpolation!, etc), and some of the JavaScript warts it covers (though I have also become much more comfortable in javascript since this last popped on my radar). I've had an opportunity to write a few scripts in CoffeeScript as well, and enjoyed the succinctness of the result.

Go: A relatively new statically typed, compiled, garbage collected language out of Google with some well known names behind it. A language that aims to be simple and fast, with strong support for concurrent programming and a well rounded standard library. It looks pretty interesting (in a very pragmatic sense) and the Go code I've seen looks clean and sensible. I am also intrigued by the idea of just statically linking everything into a single binary with no dependencies, seems like it would make deploying programs super easy.

drum-roll please...

And the winner is, Go! I'm drawn to this one because it is

  • a) Statically typed and compiled (and I mostly work with dynamic, interpreted langs at the moment)
  • b) Designed to be fast/efficient  (both in compilation and program execution).
  • c) Has an interesting concurrency model I'd like to explore (goroutines and channels)

Of the options above it probably has the most to teach me as well, and lives outside of a couple of ecosystems that I'm already somewhat familiar with (Java and JavaScript). All three of these languages look like promising options for my main side-project lang,but at the moment I'm probably most excited about looking at Go.

Plus they have a super cute mascot!

Look Ma, no hands!

Since there is no book chapter with introductions and exercises, I'm going to have to take a different approach to experimenting with this language than the others in the series. My plan is simply to set myself one mini-project (not trivial but not too involved), and try to implement it; learning how to do so along the way (i.e. they typical way I pick up a new language). I have something in mind, but I'll save that for later posts and once I've made some progress.