Learning New Languages

I’ve been programming in Java for the past 8 years. While I enjoy Java I think it’s important to keep your mind flexible and open by learning new languages where you have to think in different ways.About a year ago I decided to learn Haskell, which led on to an interest in CAL, a functional language which targets the JVM. (I find it hard to leave all the libraries available to Java behind.)The functional style is a bit of a revelation, and I fell in love with type inference—strong typing without the typing (of class names) so to speak! I have never been a fan of runtime-typed scripting languages like Ruby and Python, although they have many attractive features. I’ve found myself appreciating immutability much more, and being aware of reducing the amount of mutable state in my Java code.I’m still following functional languages in general and CAL in particular, (I wrote a very slow, but correct Endo DNA decoder in CAL for the 2007 ICFP contest, and plan to write a faster one) but I think it’s time to move on to a new language. Here’s my short list, for my next language and the future:

Prolog: A different paradigm, plenty of books and on line resources. I’ve installed SWI Prolog to play with.

Mercury: Mercury is a logic/functional programming language, with most of the logic programming capabilities of Prolog, but a Haskell style type system (Type inference, type classes). It is under active development right here in Australia.

Scala: Now that I’ve immersed myself in the functional paradigm, perhaps it’s time to try Scala, which supports both OO and functional programming and targets the JVM, which means that interfacing to Java libraries is easy. I have looked at Scala a couple of times and have always had the feeling that I wasn’t quite sure where to start—there seemed to be too many ways of doing the same thing. I’m sure a few hours of dedicated work would get me over that hump.

Erlang: Another functional language, Erlang would be worth learning for its approach to concurrency alone.

Inform 7: Out of left field comes Inform 7, a language for writing interactive fiction, aka ‘text adventures’. Amazingly English-like syntax, I’d like to find out more about it.

Objective C: I have a copy of Brad Cox’s original book on Objective C, written in 1986. That was the bad old days, when interesting new languages like Objective C and Eiffel cost thousands of dollars—all the languages I’m mentioning here have open source implementations. When OS X 10.5 arrives, Objective C will have ‘normal’ garbage collection, so it might be time for me to write a Cocoa application…

Scratch: Scratch is a very neat visual programming environment. It isn’t open source yet, although it is promised to be soon. It is geared towards little animated games, but can also interface to hardware. I think it is written in Smalltalk.

One Comment

  1. chris
    Posted September 3, 2007 at 3:43 am | Permalink

    Nice list!

    I have a similar one :)

    Scratch I can tell you is a lot of fun. It’s also frustrating because it has some severe limitations, and limited tool support, however it is amazing what you can do with it.

    It’s really great for kids (my kids) most probably because it has severe limitations and limited tool support, so to speak.



Post a Comment

Your email is never shared. Required fields are marked *