|
Sure, my go to editor for Clojure is Emacs with prelude and few major modes (CIDER, Clojure mode, paredit, smart parens, helm, etc). I use the CIDER-nrepl to jack into a REPL process within Emacs, so I can evaluate buffer's with C-c C-k. It creates a very fast feedback loop. Clojurians don't tend to like frameworks and stuff. They're less frameworks, and more toolkits, a collection of popular libraries with config out of the box. Popular ones are Pedestal, Luminus, Edge, Compojure+ring. I started with Compojure, and I've played with luminus, Juxt's Edge, but lately I almost always bring together Reitit (a router) and Ring (jetty adapter for Clojure). Front-end frameworks are a different story though. There are two big contenders: Reagent and Re-frame. Reagent is a Clojurescript wrapper around React that uses Hiccup (an http DSL for clojure) syntax to define components. Re-frame extends Reagent by providing a side-effects-under-the-hood framework for building single page applications. Recently, I've taken to really liking re-frame, especially with the Material-UI Reagent wrapper to ship fast. clojure.test is the core testing library, and it's pretty robust out of the box with assertions and macros for testing conditions like Exceptions being thrown. By default it provides diffs when the test fails. There are libraries to help with testing/mocks and stuff, but I almost never use them. It's also possible to use clojure.spec to create data generators for generative testing; however, the caveat of using clojure.spec for generators is typing your functions/type/etc too much, you'll lose the benefits of a dynamically typed programming language and probably spend more time writing the specs instead of the code. I typically use spec, or a competitor like Malli, to validate input at the system boundaries and critical code pathways. There is so much to the Clojure ecosystem, this really only scratches the surface. I hope this helps though. |
PS: my email is in my bio, and this is concerning the near-ish future