Learning any programming language requires a significant investment in time and resources. Of all the languages I’ve gained proficiency in, Clojure has by far yielded the largest benefits for my life. Some of these benefits have been surprising and have only become evident with time. I want to share these less-obvious benefits because they’ve had such a positive impact on me, and I want other devs to benefit, too.
Clojure’s core team is committed to the language’s stability over time so that code you wrote years ago will almost always work with the latest version of Clojure.
By unfortunate contrast, some other languages introduce significant, breaking changes like a friend declaring that they’re DONE with carbs and are going PALEO thank you very much. This imposes a cost every time you sit down to do some work. Say you want to spend some time on a side project that uses the language blub v1.0
but you want to use a library built for blub v1.1
. You are in for a night of pain and horror.
Let’s play this scenario out over time. Say you only have 30 minutes to work on a side project. You run into a “language overhead” issue like the one above. Solving this kind of problem is chaotic, meaning it’s hard to pick up where you left off between programming sessions. If you don’t solve it the first time, you’ll retread a lot of ground the next session. Heaven help you if Life Happens and you can’t pick up your project for a couple weeks. It’s hard to make actual progress.
What does this have to do with your lifestyle? I’ll use this job board as an example. I recently re-built and re-launched this job board, and since then revenue has quintupled (!!!). This has provided more income, which obviously helps on the financial end. But what’s interesting is that Clojure’s stability has let me consistently make real progress on my passion projects without neglecting other parts of my life: making art, spending time with loved ones, etc. I can work less for better results because I’m not bogged down by the overhead costs imposed by the language.
I get to build this business at a sustainable pace without sacrificing my personal life because Clojure lets me focus on actually building instead of traversing the seven circles of language hell. I built some parts of the site eight years ago. The fact that I can figure something out and it’s still useful to me nearly a decade later is the definition of a good investment.
There’s another way that Clojure’s stability improves your lifestyle: it reduces your stress. The quality of your life is the quality of your day-to-day experience, and if a significant portion of that involves meaningless struggle with your programming language, well it’s hard to not end up feeling kinda lousy. And in this economy??
I realize I’m probably giving off strong “wow this guy is straight up mainlining the kool-aid” vibes here. Clojure, ultimately, is just a tool, right? Yes. And if we’re going to talk about building a satisfying and rewarding life, we need to talk about tools, and Clojure is an exceedingly good one.
Clojure has provided a gateway for me to learn more programming techniques and concepts, including:
There are other domains I want to explore, and great Clojure libraries for them:
You might look at this list and object that plenty of other languages offer libraries that let you explore other programming domains. In fact, some of the Clojure libraries I linked above are wrappers for Java libraries. So what makes Clojure special here?
Clojure has three properties that make it a superior language for learning programming concepts:
Its focus on a small core set of data types and abstractions reduces the amount of non-essential learning you have to work through. In other languages, libraries introduce their own bespoke types with their own bespoke APIs, and the result is that you continually have to revisit the questions of “How do I represent data?” and “How do I transform it?”
By contrast, 90% of the time the Clojure libraries you use represent compound data with vectors (which are like arrays), maps (like dictionaries), and sets. Even when they don’t, the data types they introduce likely participate in Clojure’s core abstractions, allowing you to use Clojure’s core functions. You don’t have to learn a new API for dealing with something like a LogicProgrammingSet or DiscreteEventMap.
More than other languages, Clojure lets you focus on what’s essential about the domain or concept you’re trying to learn.
Clojure was designed from the beginning to be platform-agnostic, and the result is that is that it’s made its way beyond the JVM to browser programming via ClojureScript, and to shell scripting via babashka. Being able to transfer your programming language experience from one environment to another like this means that you get to spend more time solving real problems.
It is hard to overstate how powerful this is. There are two complementary ways to think about this:
Generally, when you spend time gaining deep expertise in a programming language you’re necessarily limiting yourself to only building certain kinds of applications. Most languages are intimately tied to the kind of environment they target; when you spend time learning Go, you’re limiting yourself to server-side apps. When you learn Swift, you’re limiting yourself to iOS applications. If you want to start building a different kind of application, you have to learn a new language, with its attendant build tools and architecture ecosystem and paradigm and quirks. On top of that, you have to learn about the environment itself: its resources, its interaction modes, etc.
When you invest the time to learn Clojure, you gain leverage instead of limitations. Learning any language involves more than just the basics of syntax and build tools. It includes deeper topics like how to structure an application for maintenance and evolution. Taking the time to develop Clojure expertise will pay dividends when you switch from backend to frontend development.
I expect this situation will only improve over time, especially thanks to the unstoppable force that is Michiel Borkent, aka borkdude. I am very excited for what the future holds!
Are you ready to invest in Clojure? Then these companies are ready to invest in you. These businesses are successfully leveraging Clojure’s power, and they hire people without Clojure experience: