3 ms·
I have the exact opposite experience going from working primarily with Java to Clojure. I worked with the former for nearly a decade, and I haven't contributed
by yogthos 8y ago
I have the exact opposite experience going from working primarily with Java to Clojure. I worked with the former for nearly a decade, and I haven't contributed to a single library or project I used in that time. Every time I'd see a bug or a feature I'd like to add, I'd check the source see thousands of classes each with its own semantics and behaviors, and give up. The amount of effort needed to familiarize yourself with a non-trivial Java codebase is herculean.
Meanwhile, I've contributed to many Clojure libraries, and lots of people contributed to the ones I maintain. I can open a Clojure project and figure out what's going on much easier than with a Java one. The code tends to be much more direct. It's primarily written using pure functions that you can reason about independently. It's focused on the data, so I don't have to learn hidden behaviors. And I have a live environment with the REPL where I can run the code and see what it does immediately.
My team has been working with Clojure for nearly a decade now. We have many applications in production that have been developed and maintained for many years. We've hired many new devs during that time, and we've never had problems onboarding.
A language being expressive and flexible does not preclude it from scaling to large projects. And when the language is not expressive, you end up with huge amounts of incidental code because you're forced to map your problem domain to the language as opposed to the other way around.
I think that community practices for using the language are far more important. Clojure community started discouraging heavy use of macros early on, and a small set of common patterns tends to be used to solve problems, and codebases across projects tend to have a similar style to them.