When you choose to adopt Clojure (and its learning curve), you’re selecting an implementation, a platform, and a set of features. You’re also accepting certain limitations, some cultural baggage, and a peer group. Most important, you’re learning to think in Clojure. This can be especially challenging if you’re coming from an object-oriented language.
A clear understanding of the foundations of Clojure’s design will help align your thinking with Clojure’s implementation (see Appendix 1, Roots). If you keep these guidelines in mind, you’ll find yourself swimming with the current, rather than against it:
Make reasoned choices
Build just enough
Use what works
An explanation of each ...