My take on "What Beginners Struggle With"

Just starting with clojure, my main struggles so far have been:

There’s kind of a lot of… everything. Big standard library, many keywords / built in macros, and libraries. With libraries/tooling it’s hard to see the differences between om, reframe, uix, reagent, etc… should I be using lein, clojure cli, boot, shadow-cljs, cljsbuild, etc… I’m starting to sort out the answers, but definitely has been a source of friction. But I suppose that’s kind of part of the learning process, isn’t it.

Big standard library

As compared to Lua, maybe, and C. :slight_smile: It’s actually quite small compared to any other language I know, in large part due to carefully chosen abstractions. JS, Java, Python, C++ - they all have a much larger standard library, a much larger set of keywords (assuming you mean reserved or special in some way symbols, and not just some :i-am-a-keyword keyword literals), and the amount of syntax is not even comparable.

With libraries/tooling it’s hard to see the differences between om, reframe, uix, reagent

That would also happen in any other language where there’s any choice for a particular task. Here, I’d say Om should not be used at all (it’s not under development anymore), Reagent is a thick layer on top of React that provides a bunch of nice abstractions and Hiccup syntax, re-frame is a library on top of Reagent that enables nice global state management, and UIx is a very thin layer on top of React, without any abstractions.

should I be using lein, clojure cli, boot, shadow-cljs, cljsbuild

Definitely not Boot, it got pretty much phased out by other tools. I prefer Clojure CLI, with shadow-cljs for CLJS - I find Lein too cumbersome and any other CLJS tooling lacking.

But I suppose that’s kind of part of the learning process, isn’t it.

Absolutely.