Saturday, 19 April 2014

Full Circle

While I enjoy my post-MBA career as a organisational consultant and project manager (mainly because as a programmer I was never consulted when it came to strategic business decisions, and saw fewer opportunities to move up in the organisation), I miss programming. Programming was my hobby since I was a boy, and doing it for a living was (as I often said), pretty much the equivalent of getting paid to play video games.

Now, even when one is not working full time as a programmer, the ability to program still constantly comes in handy at work, whether it's gritting your teeth and putting up with VBA ugliness to perform some wizardry in Excel, or banging out a perl script to extract data that nobody else seems to be able to find by any other means. But recently the bug has bitten me again to return in earnest to programming for fun, and it's been fascinating getting back into serious programming after three an a half years away from it, to see how things have evolved. What's really exciting is that things seem, to me, to be evolving in an extremely positive direction.


I wrote a sort of programmer's autobiography some years ago, but the gist of it is that, after exploring a number of languages in the nineties, I fell completely in love with Common Lisp (via Scheme), and bemoaned that language's fall from grace in industry (following the AI winter, which wasn't Lisp's fault), even as I adopted it with enthusiasm for my own increasingly larger personal projects. At university, most of my online life was lived in Emacs.

When I unexpectedly found myself needing a new career, and decided to turn my computer skills into something employable, the realities of the market meant setting Common Lisp aside and embracing the world of Java. .NET was never a consideration for me as a Linux enthusiast, and the PHP/Python/Ruby third option did not appeal to me, probably because Common Lisp had instilled in me enough of an industrial approach to make me averse to languages that can easily get messy with large codebases, or which when pushed to handle large scale tasks have to resort to complex workarounds that undermine all their initial elegance. (In fact it was a 10k-line Scheme program collapsing under its own weight that had moved me to CL in the first place, fairly or unfairly I thought the mainstream scripting languages belonged in the same boat.)

Though I fully intended to keep using Common Lisp for personal projects, the constant need to evolve my Java skills meant that it gradually took over, and Lisp fell to the wayside. I also found myself using Emacs less and less, proud that I knew how to use it but also resigned to the fact that it was destined to be a relic of the past.

I always viewed Emacs as the software equivalent of Led Zeppelin or Monty Python: Products of the seventies that are pretty much perfection when it comes to doing what they do. They could still be recognised as the pinnacle of something by the following generation (mine), but the march of time is already starting to make them less intelligible to the following generation, and they seem destined to become so dated as to become inaccessible one day to all but a few.


Given my history it should come as little surprise that, if a guy like me decides he needs to update his skills, he doesn't need to hesitate long, looking at the current lay of the land, before zeroing in on Clojure. Lisp is back in vogue, and I can leverage all of the libraries I'm already familiar with through the Java platform? Yes, please!

My aim is first to master the language through a few practice projects (starting with a dashboard web app showing some of my server stats, since the existing version uses outdated JSF components and is really getting long in the tooth). Along the way I want to work through my O'Reilly Clojure Programming book cover-to-cover, both because it's excellent, and because back in the late 90's O'Reilly was always pushing back about publishing a Lisp book, saying that it wouldn't sell. (In those days, an O'Reilly book would have been serious enough exposure for the language that it actually would have boosted the mindshare significantly. I know that's not really true any more today, but now that O'Reilly finally have published a major Lisp book, I'm sure as heck going to read it!) Then I'll probably look for an open source project to contribute to, or perhaps write a game.

So, recently I upgraded my Eclipse from Galileo to Kepler (that will tell Java devs how long I've been out of the game). I've kept my Emacs current at 24 but I installed CIDER, and have found that to be superior to Eclipse (contrary to my expectations). Emacs seems to have picked up momentum, in fact. I'm sure it's still another world to the uninitiated, but it no longer feels like 'old software' to me.

Some things are still not where I'd like them to be. My first impressions of setting up a project classpath are not good, this could be an area where the tools might need improving (and maybe I could do that), or I just haven't learned the right way to do it yet. DB2 isn't one of the supported clojure jdbc databases, which is surprising, though I think it's likely it will work anyway, and I still know jdbc well enough to fix anything that might be broken.

But sitting there, looking at my Emacs running an inferior lisp just like I would have done fifteen years ago, realising that that inferior lisp also just happens to be the JVM, really felt like the merger of two worlds.

I can't wait to start hacking!

Posted by jon at 10:55 AM in Programming 
« April »
Older articles
Non enim id agimus ut exerceatur vox, sed ut exerceat.