Clojure is a functional language on the JVM built around immutable data: values do not change underneath you, which removes most of the reasons concurrent code goes wrong. NUZM uses it for data transformation, rules engines, and systems whose logic changes more often than their structure.
What this includes
- Data modelled as plain maps and vectors rather than a class hierarchy, so new fields do not require new types.
- Specifications on the important boundaries, giving both validation and generated test data from one definition.
- REPL-driven development, which shortens the loop between changing a rule and seeing its effect on real data.
- Access to the Java ecosystem, so a mature library is used rather than reimplemented.
Is this the right choice for you?
Right when the shape of the data keeps changing, when rules are revised often, and when the same pipeline has to handle several sources that disagree with each other.
Wrong if nobody on your side can read it. Clojure is the hardest of these four languages to hire for locally, and a system your team cannot maintain is a system you will pay someone to replace.
Worth knowing before you commit
Immutability is the point, not a detail. Because no value is modified in place, a function cannot change something a different part of the program was relying on, and that single property removes most concurrency bugs before they can be written.