It’s time to learn a new language, and I decided perhaps I should ask the lazyweb what I should learn. This happens to me about every couple of years, though this time I really intend to do it.
I’ve done a fair amount of Python, Ruby, C, C++, Perl, Lua, and Java. At times, my programming in Ruby and Perl got to be fairly functional, so some FP language is probably on the list. I like Python a lot, it’s practical and also efficient, but also not highly exciting. Ruby is shinier, but has annoyances in the same way Perl does. Anyway, in this quest for exploration there are many candidates, most of which I haven’t really explored beyond “Hello World” yet:
Scala and Clojure are both newish JVM based languages. Of which Clojure looks more appealing (to me) do to similarity with Lisp. Scala’s performance doing a compile on my Fedora 11 laptop, however, was dog slow — and I was unable to get Clojure to even work (“Can’t find clojure.main… or something”) — perhaps I’ll try on a different OS using a different JVM — possibly even my Mac, or hammer at it a bit more — I see the Fedora version isn’t the 1.0 one. With both of these the ability to slurp onto Java’s standard library would be nice in that you could avoid languages that didn’t have a good standard library, however, which is a frequent problem. I am not sure what options for C bindings exist or whether you need to go through something like JNI (or what do the cool kids do now)? I hate Java with a passion so having a language to use when you have to use java libraries could be interesting — I have nothing against the JVM, just unproductive languages. Yet sometimes you have to interface with them, so, you know, can’t beat them join them? They are both kind of immature though, which leads me to not want to invest tremendously in their future. Groovy and other similar things are out because they are too similar to things I already know.
O’Caml and Haskell are almost always in the running when I think like this — though I usually don’t end up picking up either — not sure why. The rjones factor puts some points in favor of O’Caml seeing there’s a good share of things in Fedora for it (libvirt-bindings and such) and it doesn’t seem to have craziness like “IO is supposed to be complicated”. OCaml syntax seems better. Haskell is guilty for being involved with Perl 6 so that’s one strike against it
And yes, Perl 6 is right out. Just say no!
My esteemed former college Kevin is clearly in the Erlang camp. Erlang has the concurrency thing going for it, and so apparently do some of the JVM languages. However, I’m not really sure the JVM is that awesome at concurrency either… not that I’m informed, I just didn’t think it was. No doubt it is worth a look and there are apparently some frameworks and such for it.
There’s also Objective-C, in case I want to make my living on iPhone apps
. I don’t, of course… but it’s something I haven’t had any experience with. It also looks unproductive though, which is enough to make me stay away from it. I’m also not sure anyone takes this seriously on platforms other than OS-X.
Anything that would require Mono/.NET is clearly out — Microsoft’s trojan horse exists to make it socially acceptable to code to that on Windows by saying there is a compatible variant existing that they do not control — yet it’s still inferior to the Windows version and has been for a LONG time. Basically saying”we like Open Source” when they don’t really mean it. We get things like missing Windows Forms support and “embrace and extend” through things like Silverlight and questionable Novell exemptions. Spooky.
Or I could just say screw it and do something completely different. But not intercal. And certaintly not Brain**** or Ug Ug or Whitespace (thanks for introducing these to me, Dave).
Ideally whatever I play with is going to need some nice hooks into graphics/sound and other bits (or somewhat easy C bindings) to keep it interesting, Hello World, Network Applications, Systems Management, and ATM simulators can only get one so far. Or shaving money off finance transactions. That also would be a good project. (Kidding)
Ada
http://smarteiffel.loria.fr/
http://www.iolanguage.com/
http://www.complang.tuwien.ac.at/forth/gforth/
http://www.php.net/
You could combine language interests and try something like Reia:
http://wiki.reia-lang.org/wiki/Reia_Programming_Language
It’s a ruby/python like language running on the Erlang VM.
What about Jython? I know, is basically the same as python, however it can gain access to all the java std libraries, so doesn’t sound so bad. Windows.forms have been available for mono for a while now iirc, don’t know for sure since I don’t do mono. You can always try coming back to C, C is the new C!
Just kidding, ruby seems to be gaining a lot of momentum lately and there are enough cool features to keep you hooked, so I’d say go fot it.
The point of learning new languages for me is learning how to think differently, not the same way.
I already know Ruby, Jython is too close to Python (and also quite downlevel relative to Python in terms of what it supports)
Just for fun, you could try Shakespeare:
http://shakespearelang.sourceforge.net/report/shakespeare/shakespeare.html
How do you mean that “Haskell is guilty for being involved with Perl 6″?
What makes you say “Perl 6 is right out.”?
Personally this is about me, not which is the best language, so I gain little by learning something so similar to Ruby and Python and Perl 5. Personally I feel Python has kicked
Perl’s buttocks thoroughly (esp in terms of ease of maintaince), so there’s not much reason to want to invest in Perl.
I mean, I had a very good time with Perl back in the day. It was fun. However, that was because I was at a Java/C++ development job and it was a fun diversion to learn the dark corners… and having seen Python and Ruby take off, I don’t really have a want to go back. I just don’t think it has the buzz, even if Perl 6 is all magically readable and simple, it seems to be too late in a field of a lot of other similar languages.
So, basically — (A) I don’t learn that much by learning it, and (B) I think it’s dead, Jim.