It may surprise some people to hear that computer science and coding are hobbies of mine. It’s particularly amusing since so many people who buy my* records and see me* in concert are programmers and computer scientists, who play music for a hobby. It’s kind of a nice mirroring, I think.
This is not to say I don’t get paid to code. I’ve run a number of websites, in whole and in part, over the years, so I’ve written my share of code – but that no more makes me a “professional coder” than the fact that I’ve written quite a number of contracts makes me a lawyer. It’s just one of those things you have to do when you run your own shop.
This past month or two has come very close to damaging my enjoyment of coding… security breaches will do that. Having to spend my time rebuilding stuff I’ve already built is about as much fun as having to re-record an album whose masters were destroyed. Not that I’d know anything about that… Ugh.
But it did get me thinking about what I enjoy about programming, and what I don’t enjoy about it. I enjoy the interesting, experimental parts of it – I dislike the parts that seem like work. No surprise there! Software engineering – bleargh! Trying to get someone else’s CMS or framework doing what it’s supposed to do, but doesn’t? Ack. Wrestling with libraries and documentation to try to find the exact syntax for someone’s stupid code? Yigh. Looking at needless boilerplate? Barf. If I’m going to do something that other people get paid for, I might as well have fun with it!
In some ways, what I enjoy is broken down by language. Java, PHP, Perl, C#, .NET? These all feel like languages & environments I should be paid (handsomely) to read, let alone write. PHP gives me hives. Perl makes me run for my flamethrower. Java & .NET make me think of Office Space. I’d rather write TPS reports than do that. No, really, I would. Ask me some time about the TPS reporting system I had to design for Canadian Tire. Argh. Yeahhhhhhh, I’m going to have to ask you to go ahead and kill me now.
But Python can be fun, for quick and dirty sketching of things, and writing occasional little utilities. JavaScript has its good parts, even though for the most part it feels like I’m sitting in a room full of hipsters trying not to punch them. C? I actually enjoy C, for some godforsaken reason (probably because Kernighan and Ritchie are such fabulous writers). Assembly language is fun, in a psychotic way, and I never felt like I “got” computers until I wrote my first boot loader & primitive operating system for a 386. (Until then I had no reason to believe it wasn’t just magic and imps in a box). And there are domain-specific languages that are fun – Max/MSP, PureData, Processing, CSound, LilyPond… there are obvious reasons why I like them.
But the one language (language family?) that I’m actually passionate about is Lisp. I remember the first time I found a copy of “ANSI Common Lisp” in a library. I looked into it and it looked like the code wasn’t even code, like it just said
ย (do stuff (stuff)
ย ย (do-it now
ย ย ย (do-it right-now)))
And since the only programming language I’d used at that point was BASIC, my brain said “That’s not even possible! Where’s the code?” I was hooked. I love the elegance of the language; I love the syntax – or lack thereof – because I find I can never remember the niggly details of a language’s syntax; I love the feeling of taking a problem that would take hundreds of lines in another language and solving it in a handful of concise, easy-to-read lines of lisp. I’ve tried Clojure – which seems to me to be Java dressed in lisp clothing – and Scheme – which is super fun but not quite perfectly aligned with my way of thinking. For the moment I’m mostly working with Common Lisp, which has some rough edges (but then so do I) but is all around an amazing language. I’m trying to resist the temptation to re-implement everything in Common Lisp. Including WordPress…
I’m a tinkerer by nature. None of my instruments are stock, they’ve all been modified in one way or another. I like everything to be just the way I want it… and I never know what that will be, or whether it will change in a second. As a result, OSS, emacs and lisp are a natural fit for me. Besides, I’m a middle-aged recluse with a long greying beard, what the hell do you expect?
(*Obviously I mostly mean “me” in the sense of “me with the Heather Dale Band” and “my records” in the sense of “records I make with Heather”)
(**Dear gods my habit of parenthetical writing is getting worse the more I use Lisp (although of course it was pretty bad before (before what, you may ask!))).