For the past year, I’ve been using Clojure as my go-to hobby language.
I tried thinking back to my first lisp experiences. It must have been eight years ago, finally sitting down and doing some Lisp programming.
I’d seen this XKCD before, or maybe this one, but read passing comments connecting it with AI. It had parentheses. It was an old language that refused to die. People were passionate about it. And it had parentheses. And more parentheses.
I was a C++ programmer at an electronics startup at the time. I’d been there around a year, I’d settled on Emacs as my editor of choice. I’d learnt some Tcl, because that was a standard language in the electronics design industry at the time. And then I decided that I should probably learn what this Lisp thing was.
- I devoured Paul Graham’s ‘Beating the Averages’.
- I dabbled in the Emacs lisp manual, before giving it up.
- I played around with some of the Common Lisps, marvelling at some of the language appendices that it still had – the extreme string formatting functions and the support for long dead file systems. I then put them aside.
- I played with Racket when it was still PL/Scheme. (An interesting language and project, which deserves its own post.)
- I fell in love with the clarity of the schemes. I even wrote a few work utilities in Chicken.
- I worked through writing a basic scheme interpreter. (I forget which one.)
- I checked for ‘Lisp in Small Pieces‘, in a number of bookshops, but never got around to ordering it on Amazon.
- I took out a copy of ‘Programming Clojure‘ from the library.
- I giggled at Jennifer Aniston’s programming advice.
What had I learnt?
That Lisp at its root is simple. That it is powerful with unique macro features. That many modern implementations were weird and sometimes arcane. That there were a few famous examples of it’s use, such as Emacs, Autocad, Paul Graham.
That the Space-Cadet keyboard was a-fricking-mazing.
That languages didn’t have to be essentially un-parseable, like C++.
That people who studied Computer Science at university generally suffered through a term of lisp, (or maybe even SICP), before joyfully pursuing Java, or C, or C++, or Python. I’d studied Mathematics, I’d missed out on that.
So I moved on from the Lisps, the books went back to the libraries. I toyed with the idea of one day writing a DSL around a scheme interpreter. I came back, briefly, to Racket when I was looking for alternatives to PowerPoint. But generally I put Lisps out of my mind as intriguing but impractical.
I knuckled down on the C++.
Years later I moved onto a C# job. I kept learning other languages, because if there’s one thing that I think a professional programmer needs to be, it’s multi-lingual. Not to widen your job pool, but the vast benefit to be gained from appreciating the different idioms in different communities.
I learnt my weaknesses, and then worked on my weaknesses as a programmer. I learnt the naivety of believing that a language is a silver bullet. And I learnt that a choice is still important.
And I rediscovered Clojure as one of my favourite languages. What had changed?