First published: 2018-09-08 Sat
Last updated: 2020-11-14 Sat
Leverage, new paradigms, and a rich ecosystem
Note: I think this figwheel for ClojureScript development demo by Bruce Hauman is reason alone to learn Clojure(Script)!
Learning a craft rather than getting a thing
Programming and building software is my favorite hobby, and I use it a lot in my scientific work. But I am not currently being paid anything to write or learn code. This makes me a little lucky in that it frees me up to pick what I want to learn based purely on how much value I think it brings to the table and how much enjoyment it brings me to use it, rather than based on what my company uses or whatever is popular now.
A lot of thought went into the design of Clojure and it has a lot of power behind it (immutable persistent data structures and all of the JVM ecosystem among other things). It is not exactly simple or intuitive when you first pick it up like Python is, but the reality is that most skills worth learning require a lot of time and effort to acquire. Rich Hickey articulated this point well in one of my favorite talks when he said: "Musical instruments are not made for beginners". He explains instruments are made for professionals because you are only a beginner for a really short period of time, and a designed-for-beginners thing is inevitably going to impose simplifications that will limit the flexibility or power of it as you inevitably improve. There is not a shortcut for becoming an excellent piano player, but there is also no limit to the depth and complexity of the music you can create with that instrument. I am not a musician, but I love writing code so any language that gives me the kind of leverage that Clojure does is definitely worth my time.
A lot of cool stuff has been written about the power of the Lisp programming paradigm as well. One of my favorite essays is "The Lisp Curse" by Rudolf Winestock (http://www.winestockwebdesign.com/Essays/Lisp_Curse.html). If that doesn't inspire you to learn Lisp then I don't know what will. A bit cliche, but Paul Graham's essay also drove this point home http://www.paulgraham.com/avg.html.
Everything I have read about the amount of time and thought put into designing the Clojure language and the amount of power you get from lisps in general makes this an extremely attractive language to learn. By learning Clojure I'm not getting a big, flashy car or an expensive power tool. I am getting a set of extremely versatile, battle hardened hand tools (another of my favorite talks is Tim Ewald's Programming with Hand Tools https://www.youtube.com/watch?v=ShEez0JkOFw). As Tim Ewald explains in that video, with those hand tools I can do anything you can do with your power tools, but I will have a much deeper understanding and appreciation for what I am doing and I will be making things simpler and likely a lot more reliable, as opposed to gluing big complicated junk together.
I want to build tools that help me do my work and will hopefully be useful to others, and I want to enjoy doing it. Python is great for this– it was my first real programming language and will always hold a special place in my heart and toolbox. But Clojure is my current interest and the more I learn and practice the more I can do, the more I understand, and the more I love this tool.
Favorite Clojure talks
The talks below have had a big influence on me. I learned a lot from them and return to them often.
- Tim Ewald's Programming with Hand Tools https://www.youtube.com/watch?v=ShEez0JkOFw
- Rich Hickey's Design, Composition, and Performance https://www.infoq.com/presentations/Design-Composition-Performance
- Rich Hickey's Hammock Driven Development https://www.youtube.com/watch?v=f84n5oFoZBc
- Rich Hickey's The Value of Values https://www.youtube.com/watch?v=-6BsiVyC1kM
- Rich Hickey's Simplicity Matters https://www.youtube.com/watch?v=rI8tNMsozo0
- Stuart Sierra's Homoiconicity It is what It Is https://www.youtube.com/watch?v=o7zyGMcav3c