Over the last +2 years I had a chance to talk to a lot of fantastic, kind, and generous people from Clojure community mainly about webdev — everything recorded at ClojureScript Podcast -https://clojurescriptpodcast.com
Here are some things I learned
A lot of people think that programming languages are syntax that you just learn and use, yet a lot of people forget that languages apart from syntax give you certain boundaries and affordances that are idiomatic for a specific language. You can write Clojure in OO fashion and you can write Java in FP — both of them will feel unnatural and unidiomatic. Not saying that FP is better than OO, or OO is better than FP; they are just different.
Manage your app state
The state of your application is where most of the complexity comes from; Clojure is very disciplined about how you manage your application state. More in the Out of the Tar Pit paper by Ben Moseley and Peter Marks - https://github.com/papers-we-love/papers-we-love/blob/master/design/out-of-the-tar-pit.pdf
Try to leverage as much infrastructure as possible:
Clojure is hosted on the JVM — so you can access all the libraries and get amazing performance of the JVM on the backend.
In the same fashion ClojureScript is hosted on the JS platform, so you can leverage the same language (Clojure) in the browser and access NPM (thank you @thheller for shadow-cljs) on the frontend.
Use libraries and not frameworks :
Libraries, just as frameworks, come and go and it should be easy to compose and swap them; no lock-in . If you end up in a framework situation it’s hard to move away from and your codebase become more rigid.
Don’t break things💔
If you publish a library don’t make any breaking changes. If you need to depreciate things by all means do but don’t assume that people will move at the same pace as you do; you can always move the depreciated code no a new namespace and make an alias.
I still have tons to learn about so many things, yet if you would have any questions feel free to ask. I’ll do my best to answer.