Structuring Clojure applications
I love Clojure and also Common Lisp (basically, Lisp in general). But I also observed every single corporate Clojure project I had any connection with to fail spectacularly. Typically as a complete unmaintainable mess. Some as unmaintainable mess that is very slow and unreliable.<p>My theory is that this is result of no guardrails on how to structure your application. Clojure to be productive must be used by people who absolutely know what they are doing when it comes to structuring your app.<p>When it comes to Java you get hordes of devs still producing passable results. The structure is largely imposed by the frameworks (mostly by Spring/Spring Boot) and available help, literature. Even some antipatterns at the very least achieve some level of convention/predictability that is needed to be able to find your bearing around the codebase.<p>I would say, if you have a normal-ish project, care about productivity but don't have really stellar and mature developers -- skip Clojure.<p>Choose Clojure if you know how to use all that additional power, have need for it and understand what your added responsibilities are.<p>If you don't know how to wield Clojure's power there is very little you can gain by choosing it but a lot to loose.