The features I am looking for are
1)enjoyableness
2)practicalness
3)alternativeness
with a decent nod to
4)not so long a learning curve (hey, I'm from the TV generation; I need instant kicks).
Of the top of my head, these are some of the languages that I've got listed to play with at some point in time, or have played with previously (note that I've no production level experience):
Lisp - got playing with this on a very boring business trip (there's an online interpreter somewhere, google for Lisp tutorial). Pros
- you can do pretty much anything with it (the tutorial leads you through writing your own mini-language for an old school adventure game, it was an eye-opener how easy it was).
- lots of other languages take ideas from Lisp, so learning Lisp is a good way to expand your knowledge overall (it'll help in many many other areas - again based on my limited exposure)
- I think from your list it covers 1,2 and 3 (but only in my opinion)
Cons
- notoriously alternative
- wierd keywords (car?)
- braces everywhere!
- not so easy to learn (not 4 in your list)
ML (Ocaml, New Jersey ML, SML, whatever ML) - spent 3 years with one version of this at uni, an interesting and wonderful language
Pros
- it's so easy to do stuff that takes a lot of C
- functional so completely different from mainstream procedural and OO (though I think Ocaml has an object system, the version I learnt on didn't)
- 1 and 3 from your list covered
Cons
- not very practical (the version I used had no elegant way to do IO, I guess that's been fixed now, but I haven't looked at it in a long time)
- learning the language is easy, but the shift to a purely functional style of programming is hard to get at first. I remember being asked to do some stuff in C after 1 1/2 years of SML and thinking, "It's like 3 lines of SML, why the hell is it so much trouble in C", so
Boo (statically typed, .Net language similar to Python), I've only looked at it, I've *never* written a line of Boo code, so these are my initial thoughts
Pros
- like python, but access to .Net libs
- very practical
- very alternative
- looks pretty easy to pick up
- Pacman ghost as logo!
Cons
- not much documentation (like most codehaus projects I've got to say)
Erlang (can't remember who makes this, Siemens, Samsung or someone involved in telecommunictaions)
Pros
- looks very powerful for when you need high availability in your code
- thread management model is very very well thought out
- extremely alternative
Cons
- maybe not so practical for all domains
- I'd imagine a steep learning curve (so far I've not had chance to do more than scan the most basic of docs - not even a hello world sample)
- may not be enjoyable
Eiffel - played with this for the first time about 6 years ago, keep meaning to return to it, but never have the time or motivation
Pros
- practical (there's even a .Net version so you can access the .Net libs)
- alternative (ish)
- can produce very fast code (compiles to native code)
Cons
- not the most enjoyable experience I've ever had learning a new language
- quite a bit to learn (different terminology etc)
If you know Java, I'd also suggest looking into the extensions that are becoming available. AspectJ is very cool and as a long-time Java developer, AspectJ was a breath of fresh air to play with. I've got quite a bit of experience of it and I think it's a very useful thing to learn (at the very least the tutorials show how much cleaner you can make your code). XJ from IBM also looks interesting, it's an embedded XML in Java extension, wierd and makes the source code look funky, but I think it may have potential too - currently only works on 1.4 (no generics etc).
Please note I'm not in any stretch a 'rubyist', I'm still learning how ruby works myself, so take all the above with a large pinch of salt.
Kev
···
from my experience, once you get it, it's amazingly powerful and enjoyable