9 ms·
I love clojure, but it's really lost a lot of the momentum it had as many imperative languages have adopted parts of functional programming (and much for the be
by drpossum 2y ago
I love clojure, but it's really lost a lot of the momentum it had as many imperative languages have adopted parts of functional programming (and much for the better) over the last many years.
On the other side I've felt a lot of the ecosystem work that was done has a more "timeless" quality. Coupled with java interop I haven't ever felt wanting when I do reach for it for some hobby projects I keep up with.
One thing I will say, since it takes a different tack and philosophy, I think any programmer learning some of it benefits from the different perspective.
- d4mi3n 2y agoIn my experience, the subsets of the community around clojure were one of the biggest problem with it. It's gotten better over the years, but circa 2016 - 2018 it had a spike in popularity despite being very hostile to newcomers. There was an almost apologist attitude towards rough edges or failure modes folks new to the community would fall into. I managed to work with it for a time despite that, but it left me with a bad taste in my mouth. It's really important to make your ecosystem and communities welcome to new users or they're destined to fade.
- bunderbunder 2y agoA somewhat similar thing I ran into is that existing Clojure code can be incredibly difficult to grok if you don't already know the language very well. Some of this comes from lisp's minimalist syntax, which makes it hard to even know what kind of thing you're looking at when you're encountering a new thing for the first time. But the problem is also compounded by some of Clojure's more distinctive (and powerful) features such as ad-hoc polymorphism and using maps to pass function arguments. The closest analogy from imperative languages that I can think of is another language that's famous for being incredibly productive in the hands of a skilled user, but whose code tends to feel kind of write-only: Perl.
- kazinator 2y agoIn Perl you have the dynamism, and the syntax. Evidently, 93% paint splatters, when OCRed, are valid Perl programs: https://www.mcmillen.dev/sigbovik/2019.pdf https://www.mcmillen.dev/sigbovik/2019.pdf I doubt that a similar thing is true for Clojure. Here, the only problem is that you don't know what the symbols and some of the notations mean. You can look at the unfamiliar syntax and know what is a child of what. Most operators are words you can search for.
- deleted 2y ago[deleted]
- slifin 2y agoIf I can get clojure storm running in my project then I find a lot of code incredibly straightforward Because there's a preference for just passing immutable data around the time travel debugger really helps me understand complex interactions
- crispyambulance 2y ago> ...had a spike in popularity despite being very hostile to newcomers. To be fair the community itself, as humans, was very welcoming to newcomers. Really super nice and helpful folks. If anything was "hostile" it was the dominance of emacs and very limited options for other tooling. That, and the horrifically unhelpful leaky abstractions in the stack trace when something went wrong. It's a big step, if you don't already know emacs to learn emacs (at a fairly advanced level) AND a new very different programming language. I see now there's a vscode option with Calva. I haven't tried it. Might do that someday. Really wanted to like this language!
- gleenn 2y agoCursive plugin for IntelliJ is a fantastic option, it's not free but it is excellent.
- aeonik 2y agoit's nice, but I used to write Java, and even getting IntelliJ setup on my laptop took a lot of fiddling with JVM versions and getting it to recognize my Clojure install. To this day, I will still have weird issues where Cursive won't run a project, and Emacs will. All that being said, I do really like Cursive.
- cess11 2y agoI use https://sdkman.io/ https://sdkman.io/ to manage JVM versions, have you tried that? I haven't used Cursive, maybe it does something weird, but in general IntelliJ seems to accept it just fine in my everyday work.
- ARandomerDude 2y agoclojure-lsp and clj-kondo work with any editor and are both excellent. https://github.com/clojure-lsp/clojure-lsp https://github.com/clojure-lsp/clojure-lsp https://github.com/clj-kondo/clj-kondo https://github.com/clj-kondo/clj-kondo I've always used (Neo)Vim with Clojure.
- 2y ago
- kimi 2y agoYMMV. I always found it very welcoming and full of interesting people.
- bunderbunder 2y agoI may be wrong, but I think the parent poster was talking more about the language and ecosystem than the community. I, too, have found the community to be amazing. But the language itself used to be quite frustrating to learn. It's better now, but I think that by the time it got fixed many companies and teams had already been burned. Clojure is particularly vulnerable to that because it really is an enterprise applications language. That makes it more vulnerable to learning curve problems than a language like Rust whose most direct competitors are other languages with comparably steep learning curves.
- kimi 2y agoYes, I agree with you, learning is complicated, because it's mostly un-learning habits you had for 20+ years. Stack traces suck, but after a while you grok them. The clojure/core is full of niceties, but it's so big you need a map just to know what's in there. And still...
- deleted 2y ago[deleted]
- wredue 2y agoThat is basically every functional programming language in existence.
- calvinmorrison 2y ago> many imperative languages have adopted parts of functional programming nailed it. I don't know much about functional languages other than a haskell course back in the day, but I don't want to do functional all the time. It plays great in some situations and I am happy to use those language subsets in my daily coding, but I don't need my entire application to be written in an esoteric language
- grumpyprole 2y agoThis is of course a popular opinion and pretty much the C++ philosophy. Unfortunately a lot of the benefits of functional programming cannot be fully realised unless you are "all in". The paper "The Curse of the Excluded Middle" is somewhat blunt but it makes some good points: https://queue.acm.org/detail.cfm?id=2611829 https://queue.acm.org/detail.cfm?id=2611829
- macintux 2y agoProgramming without immutability is so painful to me, no matter how many functional features a language adds.
- grumpyprole 2y agoIt's painful for the compiler too, it has to turn the parents imperative code into SSA (essentially A-normal form) so it can optimise it!
- wredue 2y agoYou guys can make all the baloney claims about this you want. The day that Haskell stops being 10x slower than languages providing mutable data is the day we can start to seriously entertain your claims.
- grumpyprole 2y agoThere's nothing baloney about SSA form. I'm sorry to say it, but C is just not close to the metal any more. Even if you are able to hand optimise something so it works well on one architecture, it likely won't be optimal for another. As for Haskell, it does pretty well being 100 times faster than Python with 100 times less the number of people working on it.
- elamje 2y agoShould have maintained a python interoperable runtime. Less and less people use JVM languages for things like web apps, data eng, data science, ML, etc.
- refset 2y agoGive https://github.com/basilisp-lang/basilisp https://github.com/basilisp-lang/basilisp a try
- jayemar 2y agoBriefly looking through this it reminds me of hy
- puredanger 2y agohttps://github.com/clj-python/libpython-clj https://github.com/clj-python/libpython-clj has deep support for leveraging the Python ecosystem and it works great.