Official Clojure Documentary page with Video, Shownotes, and Links (clojure.org)

by adityaathalye 121 comments 362 points
Read article View on HN

121 comments

[−] slifin 28d ago
Looking back Clojure has been the best thing to happen to me in this industry

I doubled my salary using it and changed industries to much more stable industries

I've been to a lot of conferences and meet ups in my career but the feeling of joy and inclusivity at Heart of Clojure was unreal

The community is still alive and well, my favourite passionate sub culture in the Clojure community at the moment is the Jank community, building a Clojure Dialect for low level work an incredible amount of work but they're doing it anyway

The problem is businesses aren't really interested in stability integrity or joy when it comes to their languages they want to commodify their developers by forcing them to write the most popular and replaceable languages possible

Then they're surprised when the quality of developers they're able to hire drops and the quality of their software drops it's all just a race to the bottom - emboldening companies to try and replace developers with AI and destroy their own companies in the process

What surprised me the most in working with Clojure commercially is how many commercial developers did not get the ethos of the language or have watched the rich hickey talks or use the REPL, all they see is restrictions and unfamiliarity I don't know how these people got hired without a passion for the language - lots of them get promoted to run Clojure codebases

[−] embedding-shape 28d ago

> What surprised me the most in working with Clojure commercially is how many commercial developers did not get the ethos of the language or have watched the rich hickey talks or use the REPL

Yeah, this continues to stick out. The amount of people I've come across who do Clojure development and restart the application (really, the JVM process, kill it and launch it again, over and over!) is way too high, considering the first "real" reason I had for moving wholesale to Clojure was a shorter feedback loop. If that's not one of your goals when moving to Clojure, I'm not sure what you're up to really.

[−] eduction 27d ago
I'm probably not the sort of person you're referring to, but I do regularly restart the REPL because

1. multimethods, if you change the dispatch fn you can't get it just with a recompile, there are tools to help with this but i'm not yet in the hang of using them after several years. (Many people don't hit this because they don't use multimethods. I love multimethods for the use cases I've hit so far with clojure.)

2. interceptors (pedestal) - I love this pattern and lib, and they've made moves toward improving repl friendliness, but I find I need to recompile two NSes typically to get a true reload even in dev mode (the one where my routes are defined and the one where a particular interceptor chain is defined). sometimes i lose track of what i've reloaded, and I dont know if a bug is "real" or just an artifact of forgetting to recompile - "f it, just restart the repl"

[−] jgalt212 28d ago
Yes, but without a clean REPL you can't easily be sure that your var definitions are what you think they are.
[−] embedding-shape 28d ago
Sure, so once a week or so you need to restart the process if you end up like that.

What I've seen people do, is restart the process after each change like you typically do in other languages, rather than evaluating the current form...

[−] cfiggers 28d ago
The thing that happens to me is that I'll get something working in the REPL, then try to deploy it and it breaks—because unbeknownst to me, I had gotten my REPL into some state where everything was working, but a cold start doesn't look the same.

Is this a skill issue? Absolutely. Do I still restart the REPL frequently (not after every def, but often) just to make sure I'm working with the same environment my program will be experiencing at run time? Yes I absolutely do.

[−] embedding-shape 28d ago
Ah yeah, been there, and probably the first time was when renaming a function but missing to update callers, so callers keep calling the old function, and you have no idea why the changes you made in the new function aren't working.

I have a this little function for clearing the current namespace that I call every time I rename any var inside a namespace:

  (defn clear-ns []
    (map #(ns-unmap *ns* %) (keys (ns-interns *ns*))))
Not a perfect solution, but personally I also don't know a better solution that doesn't involve loosing out on other (non-negotiable for me) benefits.
[−] Folcon 28d ago
Couldn't you have one test that requires your -main and runs it?

Just fire that off every now and then?

Basically the same thing, but you don't lose repl state

[−] mvc 27d ago
Once a week?! Aren't you killing the repl at least to run a full test suite without any stale leftover developer state before deploying?
[−] TacticalCoder 28d ago

> Yes, but without a clean REPL you can't easily be sure that your var definitions are what you think they are.

vars and functions too. It's the biggest issue: the inevitable mismatch after a while.

As soon as I've got any doubt there might be a stable cache or a mismatch, I'll just "nuke the current CIDER buffers and relaunch cider-jack-in-clj&cljs". And it takes 1.3 seconds.

I'll also regularly spawn, from a terminal next to my Emacs, all the unit tests related to what I'm working on, in its own JVM / process(es). I'm not talking about running tests on commit (which I can do too). I'm not talking about running tests when I modify a function.

I was there 3000 years ago when Java 1.1 was using green threads on Linux and using Java on Linux required a serious leap of faith (but I knew... I knew it'd take the world... And I knew great things like Clojure would then come).

Now a JVM starts and exits in 40 ms.

Emacs starts and exit, with 4 000 lines of elisp customization I created over the years, in 1.1s.

I cider-jack-in-clj&cljs spawning both a CLJ and a CLJS REPL in 1.3s.

Clojure devs definitely should modify vars and redefine functions at runtime and use the REPL etc.

But there's no need to let a REPL live for one week like GP is suggesting. I can launch my entire app, including Emacs and two REPLs, in 2.5s. While at the same time having all my unit tests being launched in another process.

At 2.5s to "restart the world", there's no reason not to do it more than once a week.

P.S: also stale caches are a thing in this world. It's sad but it's simply how it is. How it's always been. Restarting the whole world, while in dev, helps also deal with a great many stale caches issues that may not be related to Clojure but to other things (e.g. I didn't invent the "disable cache" button in browsers' developer tools and there's a reason it's there).

[−] spopejoy 27d ago
Been over a decade since I used Clojure in anger, but at the time it really seemed like IDEs made it hard to use a REPL with a large codebase -- they seemed more to want it to be like a javac/maven stack. I assume that got better?
[−] ouraf 27d ago
Guess you could say it helped you find some clojure
[−] jwr 28d ago
I am so thankful for Clojure. It enabled me to run a solo-founder business for the last 10 years in a sustainable and maintainable way. It allows me to manage a large complex codebase (client+server) because of low incidental complexity and the fact that the server and the client share most of the business logic code.

Also, thanks to the focus on stability and practical usage, I don't get my rug pulled out from under me every couple of years, like with so many other languages and environments. This is incredibly important and not immediately visible when "choosing a language to use", because the new shiny and the warm fuzzy are irresistible pulls. Clojure is not the new shiny and it's not the warm fuzzy, but it is your stable long-term companion for building complex software that is maintainable.

[−] mkw5053 28d ago
In a previous life, I wrote Clojure every day and still look back fondly attending Clojure/Conj and sitting next to Rich Hickey and other Clojure greats at dinner.

My first startup was all Clojure. AWS only had a dozen or two products and I think we must have been the first to compile Clojure to JS and run it on Lambda in production (the only runtime was Node.js 0.10 at the time).

Anyway, I cannot wait to watch this

[−] TacticalCoder 28d ago
Incredible: I had not idea NuBank discovered Datomic first and that it's Datomic that led them to Clojure, 100 million+ customers, and eventually acquiring Cognitect.

Good to see David Nolen (aka "swanodette") is in the documentary too.

As a bonus here's a recent talk from David Nolen about Clojure/ClojureScript and using DOM morphing instead of React.

If you don't want to watch it all, just take two minutes to watch from 23m15s to 25m15s. He compares a behemoth slurping all the browser's CPU and RAM resources versus a 13 Kb of JavaScript + Web components and DOM morphing:

https://youtu.be/BeE00vGC36E

His talk is presented from Emacs, gotta love that too...

[−] boriskourt 28d ago
I’ve been using Clojure since 2013, and can say that it has been an enormous positive force in my life. I’ve been a very unorthodox user, most of my artworks were built using Clojure in some way. But I’ve also worked in industry, and there I think Clojure helped me avoid burnout on more than one occasion. Especially when running a startup built half on it :)

It’s also been a privilege to participate in the community. From Clojure west to the Conj, to the online discussions. Huge thanks to everyone that’s made this possible over the decades.

[−] pjmlp 28d ago
Clojure is my favourite alternative language on the JVM, besides offering what Lisps have provided for decades, their philosophy of embracing the host platform, instead of all the talk that the next JVM will be rewriten in it like some others do, makes being around Clojure folks much more appealing.
[−] christophilus 28d ago
Excellent. The only thing I wish they had added was borkdude.
[−] mark_l_watson 28d ago
Clojure is a great language and ecosystem. I donated a little money to Rich's efforts in the early days (I loved his older Common Lisp - Java bridge so his Clojure project was immediately interesting) and I have been paid for a few years of Clojure development.

I like maintaining the history in one place, nicely done.

I don't use Clojure much anymore, but two hours ago I updated two chapters in my old Clojure book because the examples had 'gone stale' and that was fun.

[−] ajdegol 28d ago
didn't know datomic was free of licensing fees - I didn't use it back in the day because the cost was prohibitive... interesting
[−] Unsponsoredio 28d ago
the "stable long-term companion" framing from jwr's comment is the part that sticks with me. every company I've worked with that chased the new shiny ended up spending more time on migrations than on the actual product.

stability is boring to talk about but it's the thing that actually lets small teams survive long enough to win.

[−] bachmeier 28d ago
I've always enjoyed using Clojure. Unfortunately, most of the things I do require interacting with the C world, so it has never been a real option as my primary language.
[−] zerr 27d ago
Interesting, how many ex-users of Clojure are in the comments. Everyone is praising it, but also everyone moved to something else?
[−] agentifysh 28d ago
is clojure still relevant in the post agentic coding reality that opens up pretty much all esoteric languages to everyone ?

back in the day used to use clojure to write a fintech app but not sure if it is still relevant has uses vs other langs that have emerged

[−] kevinten10 28d ago
[dead]
[−] kevinten10 28d ago
[dead]
[−] ares623 28d ago
[flagged]
[−] malindasp 28d ago
The double belt buckle is a pretty classic diffusion model artifact — it struggles with symmetrical accessories because it's essentially pattern-matching textures rather than understanding "this person is wearing one belt." Same reason you see six-fingered hands.

The repeated code on the steps is actually the more interesting tell to me. An artist would vary that deliberately for visual interest. A model just tiles what it learned looks like "code."

That said, the pencil sketch theory is compelling. Hybrid workflows where a human does the composition and an AI handles color/rendering are increasingly common, and they produce exactly this kind of uncanny result — strong underlying structure with strange surface artifacts.

Whether it is or isn't AI, the irony of a documentary about a language whose community deeply values craft and intentionality potentially using generated art for the thumbnail is at least worth a raised eyebrow. Not outrage-worthy, just... a little incongruous.