Language for 2010

I’ve been a computer language geek for a long time. Even before I read the excellent book “The Pragmatic Programmer”, I would try and learn a new language every year or two – or at least look at new languages to get ideas. This year I added C# to my repertoire and made a return to learning Erlang, which was supposed to be my original choice for the year until the demands of needing to deal with .NET forced a more pragmatic change.

Even if you never use a new language long-term, just taking a look helps sharpen skills, bring about new insights or even create a renewed appreciation for your current language of choice.

My choice for 2010 is quite tricky, so I need some help in deciding from you, dear reader. The short list is as follows:


My Smalltalk knowledge is all read and no write, so time I actually learnt the language properly and wrote some code because it looks like such a simple and elegant language. I don’t think knowing and enjoying some Objective-C quite counts, somehow!

Squeak feels like the right way for me to learn Smalltalk. I even downloaded the software a while back, but am ashamed to say I just haven’t installed it yet.

Common LISP

LISP has been on my list (no pun intended) for years. I’ve done a tiny bit of EMACS LISP programming and the Amiga Installer uses a LISP dialect, but neither are really sufficient for me to say “I’ve done LISP”. Eric Raymond (I believe) said LISP was probably the best programming language to learn that you will never use, and I think he’s right. LISP featured things like garbage collection and dynamic typing back in 1958, features that some might believe are relatively new additions to programming languages.

I will, however, say that I don’t agree with people like author Neal Stephenson who insist LISP is the only programming language that can be described as beautiful.


I made a brief look at Java (1.1) in 1996 thanks to a foresighted university lecturer, and again in 2005 when I was unemployed after returning from a season snowboarding. The JVM is pretty cool, but Java has changed a lot since the early days and not always for the better in my opinion. Apart from those two little forays, I’ve avoided the Java ecosystem as an area of interest. Now, however, things are changing. Non-Java languages on the JVM are gaining ground, including Jython and JRuby, but also new languages like Clojure and Groovy are appearing and revitalising the Java world.

Groovy seems to have quite a bit of interest from people in the Python community and, from what I’ve seen, I can understand why. It simplifies a lot of the complexity / boilerplate of Java, adds the power of dynamic typing that smug Pythonistas such as myself take for granted, and the name is suitably non-Enterprisey for me to take notice.

Clojure, on the other hand, is a dialect of LISP for the JVM. This would allow me to look into the JVM ecosystem while learning LISP. I also note there is CLR / .NET support as well, which is interesting – though I doubt I will be able to use it to interact with legacy .NET code at work.


Not strictly a new language for me, but I briefly looked at Ruby on two occasions (notice a Java-like pattern here?). The first time was in 2005 for a possible Ruby developer job. They couldn’t find Ruby programmers so were looking for people with Perl and Python experience – I hadn’t heard of Ruby at the time, but it sounded interesting so I had a quick play with it. The second time was in 2007 when I read the “RESTful Web Services” book.

I must admit, I found Ruby terribly disappointing on both occasions. Please don’t flame me! A language that blends elements of Perl and Python, with some LISP-like tweaks, should be pretty cool, but it just felt syntactically awkward in places. Despite my disappointment, I can see why some people like it and it’s making more of an appearance in places I wouldn’t expect a dynamic language to be mentioned. I should really give it another go.

Now your turn…

So, what language from the list do you suggest I look at and why?


2 thoughts on “Language for 2010

  1. As far as Lisp vs. Smalltalk is concerned, I think that Lisp is the better language, but Smalltalk provides a nicer environment. Also, I would say that in Lisp it’s possible to write working code faster, whereas in Smalltalk it’s easier to dive in and explore the System and complex Software packages.

    Sooner or later, I’d take a close look at both of them, maybe starting with Lisp.

    As far as Squeak goes, I’d suggest that you should also consider, which is basically a Squeak overhaul, and Smalltalk/X, which is a mature commercial Smalltalk (free as in beer, also for commercial projects) which lets you embed C directly and compiles Smalltalk to C code (you can create stand-alone apps including an installer rather easily).

    As far as Common Lisp vs. Clojure is concerned, I can recommend both. I’d say that Clojure is more or less still a moving target, but one of the most interesting projects happening around Lisp these days. Compared to CL, it leans much more towards functional programming and has an interesting approach to concurrency. Common Lisp, on the other hand, is a stable mature language, with warts and all, which lets you freely choose in which paradigm you want to code. It includes one of the most interesting OOP-systems (CLOS), a mighty condition system (errors down the chain of function calls are restartable from calling functions using a system of signals+handlers+restarts), and it can be really, really fast. Like in Smalltalk, but to a lesser degree, you can also “live” in a long-living image, which may be dumped and resumed.

    As I said, I’d take a look at all of them, maybe starting with Common Lisp.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s