On becoming more mainstream…

I’m realizing that 17 years ago turns out to be a pretty pivotal time for me professionally. In addition to being the time period when I found what has been my primary programming language ever since, it is the time when I threw caution to the wind and embraced Linux as my primary desktop OS.

As out-of-the-mainstream as that decision has been–and it was far more radical back in the ’90s before KDE, Gnome, Ubuntu and what-have-you–I have often constructed my desktop out of components that were considered outre even by Linux standards. I ran FVWM 2.X when people were still thinking that 1.x was the way to go. I ran IceWM when a lot of people were embracing Enlightenment or one of the NeXT-step based WMs. Even when I was using components of Gnome on a daily basis, and even trying it out from time to time, I never committed to it, figuring out how to use those components from within whatever unusual setup I was using.

For the last three years or so, I’ve been using the “Awesome”:http://awesome.naquadah.org/ WM to construct my thoroughly idiosyncratic but highly-efficient desktop environment.

No more.

I’ve always run something more mainstream on my desktop machine, because Anne uses it occasionally to work with GnuCash. Which meant that I was also using it fairly regularly, since I try to keep up with our finances on a daily basis. And six weeks or so ago, I decided to “upgrade” it to Gnome 3. I knew that if it didn’t work out–and I didn’t really expect it to, Gnome 3 having been pretty thoroughly reviled when released–I could always fall back to Xfce, which is what it had been running.

Much to my surprise, I found I kinda liked Gnome 3. It got rid of a lot of the clutter that had annoyed me about most Gnome 2 setups. In fact, except for the fact that individual windows had titlebars, the default presentation was almost as minimalist as my Awesome setup. And I found having the ability to hit the Mod4 (AKA Windows) key and then just start typing to start an application, well, that was actually more convenient than the Mod4+F1 that I was doing with Awesome. And so forth. Basically, it seemed like with a little tweaking, I might be able to be happy and productive.

So late last week, I installed all the Gnome 3 stuff on my laptop, and started tweaking. And yesterday, I uninstalled Awesome and the things I had been using with it.

Now I’m not embracing every aspect of Gnome life. There’s no way I’m going to try and manage my email in Evolution, whose interface I find awkward and slow. And I’m not likely to trade Chromium for Epiphany just yet–not until it’s got equivalent JS speed, at least. And I installed a few gnome-shell extensions, and intend to install a few more. And I totally remapped the window manager keys.

But right now, I am working more within the Linux mainstream than I have, well, perhaps ever.

Choosing a new language

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”:http://iolanguage.com/, 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.