I have been programming primarily–for long stretches, almost
exclusively–in Perl for the last 17 years or so. I seem to remember
starting to use it around mid-1995, with 5.001–during that long,
awkward time between when Perl 5 came out and when the 2nd edition of
Programming Perl finally arrived in late 1996.
I've kept with it because I'm fluent in it, I am productive in it, and
at this point, I can make it do some fairly absurd things (ask me about
writing event-driven servers in Perl, I dare you). In fact, I like the
language. I understand the complaints people have about it, but the
subset in which I write these days is pretty clear while remaining
concise and expressive, and the ecosystem that exists around it is
simply unparalleled.
Nonetheless, I think the time has come to move on. The downsides of the
language–speed, largely, and lack of good language support for
expressing things like parallelism–have started to wear at me. I'm
tired of the hoops I have to jump through to do the things I want to do.
So for the last 18 months or so, I've been reading a lot about a number
of languages. I don't think I've rejected any out of hand except PHP,
though I certainly have some biases. For instance, I am looking for a
mainstream language–something like IO,
though interesting, does not qualify.
But mainstream isn't everything–I want something that is going to open
up new options, that's going to be fun to get immersed in; so I'm not
considering things like Ruby or Python because for the most part I think
they recapitulate most of the problems I have with Perl (speed,
concurrency support) just with different syntax.
In the end, I came down to three options. Node.js, Scala and Haskell. I
find that as I've been sitting with the question for the last couple of
weeks, though, I've stopped thinking about Node.js as a real option.
Though it's fast, and it's got a great ecosystem of software surrounding
it, raw event-driven programming doesn't really engage me any more. It
was fun for the first year or two I did it, but the idea of moving to an
environment where Everything Is A Callback leaves me cold.
So it's down to Scala and Haskell, I think.
As a consequence, I've spent the last week reading Programming in
Scala: A Comprehensive Step-by-Step Guide, 2nd Edition by Odersky,
Spoon and Venners, and before that I got most of the way through Learn
You a Haskell for Great Good by Miran Lipovaca (though I'm going to go
back through it now and finish it).
I intend, over the next couple of weeks, to post about my experiences
working on using each to write a couple of short (but non-trivial)
programs with both of them–ones that, incidentally, I have implemented
in Perl already, so I can do a real comparison of code.