It's also clear (see Hickey talk Effective Programs, 10 Years of Clojure, where he surveys the room) that Clojure programmers tend to be senior (real senior not 5 years experience "senior") and a little grumpy about the state of the art, opinionated, and don't want to be cogs. This may also explain the allergic reaction among people who manage programmers/engineers. Managers as a rule (especially at certain orgs) tend to want people who are more compliant and less free thinking and likely to push back.
Anyway I think you make a good point except I disagree about its survival long term. I think there's something to be said about the value of being more popular among older more seasoned programmers vs PMs. How many PMs in the 90s foresaw the rise of Linux (vs proprietary unix and Windows), how many go overboard on "agile", how many were into ruby on rails before it picked up among programmers, etc. Managers tend to be a lagging indicator (speaking very broadly).
So for every weird, cool innovation you see, the productivity is immediately lost because people equally care about how you deal with state on app startup, or routing, or database interaction. And since none of those other things move the needle much in how you compete in your business domain, competitors who are not concerned wind up eclipsing you. While you're arguing integrant vs. mount, people are just running dotnet new and bikeshedding over things closer to the business domain.
PMs/EMs/QAs/etc. may not have technical knowledge, but they smell something off about programmers arguing about what library to use for routing. Why didn't people complain about this at their past jobs? Surely if it was important, it would have come up. They just perceive you as having hired a bunch of senior people who are incredibly slow relative to their past companies. It really breeds resentment.
I have seen clojure-first companies creatively hive off parts of their engineering org to have a separate org that is allowed to use a different stack. They're not super transparent about it to avoid a big exodus of people, but I've personally seen it happen more than once.
To me it seems people typically like Clojure because of its simplicity, stability and productivity with the REPL. There are innovations in Clojure (its data structures, transducers...) but overall it is a pretty conservative and minimal language with laser focus on pragmatism.
Also in terms of slowness it seems the opposite is the case from my limited knowledge. OS authors and contributors seem to be extremely productive and creative. There are some notable Clojure shops (see: OP) that have been growing at an incredible pace.
Maybe I see this differently because I come from a [insert two very popular languages] background where everything breaks every couple of months and the culture is severely fad driven. To me Clojure is refreshing, calming and more powerful on top.
(Though I don't think Clojure is really "innovation in programming languages" stuff, it's a rather straightforward Lispy language and has changed much less than eg Java, C#, JS in the last 15 years, and is simpler too)
This is a very pompous, pretentious, self-serving, statement.
How about Rust? C++? Kotlin? F#?
You find people interested in these things in all languages, and people not interested in these things in all languages.
Bringing Rust or C++ or anything else into it doesn’t shed light on the truth or otherwise of the original statement.
P.S: I like it a lot, but either I do golang or ror for web dev, or python/pytorch for data sciences/AI stuff, C# for game development. I don't think i can get more productive with Clojure in any scenario, that I'm exposed too, what I'm missing?
Frontend development is simply awesome in ClojureScript. Give me Reagent + Shadow CLJS over plain React (or React Native) any day.
Is that still tied to that google closure abomination ? I've not been in CLJ ecosystem for >5 years now but last time I used CLJS I remember they went all in on google Closure and it was a major PITA to use the rest of JS ecosystem because of it.
Every time I use React I think how it would be great to use Clojure for that, but last time I tried the tooling overhead just killed it for me.
This has been solved now--there's a blessed CLJS solution[1][2] as well as a third-party compiler with NPM support[3] which many prefer.
[1]: https://clojurescript.org/news/2017-07-12-clojurescript-is-n...
What about servers-side, any equivalent Django or FastAPI?
For backend there is luminus (https://luminusweb.com/) or Kit (https://kit-clj.github.io/). They are basically project templates that wire together a ton of popular solutions for various things - database access, migrations, security, html templating, etc. Also includes frontend frameworks like re-frame if you want.
edit: forgot to mention fulcro (https://fulcro.fulcrologic.com/) which is an interesting full stack solution. I haven't used it though so can't comment, but it sure seems documented well!
The choice is between Leiningen and deps.edn AKA the official Clojure CLI. Personally, I switched to deps.edn back in 2020 and haven't looked back. I like that it's simpler/does less out of the box and I also use the Git dependency feature all the time (you can reference a git sha as a dependency, not just Maven coordinates).
Something like 90% of it is just listing dependencies (the same packages as it's all just Maven anyway) and for the remaining 10% of configuration there's plenty of resources available for both. They can also interop to some extent.
Other ecosystems have it much worse than Clojure in this regard.
I especially like how easy shadow-cljs makes it to utilize both clojars and npm pacakges. I have been using JS/TS for a long time and feel like any webdev without npm packages would not be worth my time, especially for projects at work.
Re-frame has a very robust api for dealing with events, side effects, and state. Once I got used to the concepts in the documentation, very good docs but a little goofy, It has quickly become the most efficient and fun tool I have ever used to prototype complex frontend interfaces :)
Glad to be using cljs at work, but I'm not sure I would use this stack for non-internal tooling though.
> Give me Reagent + Shadow CLJS over plain React (or React Native) any day.
So that is for heavy js based applications, not for something light like rails + stimulus.js, right?
What do you feel is missing? Certainly there are options (something as frameworky as Fulcro, something as barebones as a React wrapper like Reagent), so there must be some itch you can't scratch?