I have been, for about the past month, exploring some different languages, looking for one that I may want to invest time into learning. I thought that I’d do a comparison of the different languages I’ve looked at and what I think of them so far.
Haskell
I’ve messed with Haskell before, and I do enjoy it quite a bit. It’s a really cutting edge language, and there are so many neat things that you can do with it, that it would take too long to mention them all here. It’s main features are its functional purity, and its laziness. Combined, these can do some really amazing things, in very little code.
The problem with it is, of course, its abstractness. Wrapping your head around its higher order types takes lots of work and lots of time. I don’t have a particularly good understanding of it myself, but I do plan on messing with it some more in the future.
Lisp/Scheme
I really want to learn lisp. It is the quintessential meta-programming language, and it can more or less do anything. The trouble I’m having with it is getting started. I like the looks of Scheme more than Common Lisp, and I plan to pick up The Little Schemer when I find it in a book store. I’d also probably want to use Clojure, because the Java libraries are great.
Ocaml
Ocaml is neat for a couple of reasons. It’s absurdly fast, faster than C++ in lots of cases, and it’s functional. It doesn’t force you into Haskell’s level of purity which is good, because you can get lots of stuff done without resorting to Monads. I’ve not invested a lot of time with it yet.
Scala
Scala is kind of neat. It runs on the JVM and attempts to blend both functional and object oriented programming. Overall it seems to achieve its goals, but the syntax just seems extremely complicated to me. It has everything, and the syntax reflects that.
Smalltalk
This one is a bit different than all of my previous explorations, because it’s OO rather than functional. Smalltalk is probably the best object oriented language out there. Everything is an object, there is no other syntax in the language besides that of a message send, and everything is accomplished like that. Even if-statements are just method calls to boolean objects.
It’s really pretty amazing, and there are some really nice libraries out there for it. The one that most caught my eye is Seaside though. The day I spent messing with Seaside was probably the most exciting experience I’ve ever had with a web platform. The only issue I have with it is that its URLs are really ugly.
The only big issue I have with Smalltalk is the environment. As neat as the image based approach is, the environments for it are kind of awkward. Squeak is neat, but it feels like a toy. It’s amazing to be surrounded by the very objects you’re working with and creating, but for the most part it’s annoying, and ugly.
For now I’m sticking with FScript for OS X because it’s more or less Smalltalk, is integrated with the OS, and is able to interact with pretty much any running program.
All of these languages are pretty neat, and I wish that I had more time to explore them with. In the meantime though I think I’ll work with Smalltalk and Scheme.
Addendum: I’m also looking at Erlang, but I’ve gotten even less far into it than I have with any of the above.