now… the overall theme of this entire topic is “what do beginners strugge with” and i have already pointed out the shortcomings of the clj-doc-approach in a previous post.
having said that, i think a more fundamental difficulty for beginners arises as a consequence of clojure’s quintessence, namely, being a HOSTED LISP.
what do i mean? well, first of all, it is always easier to learn / master something new, if you are already familiar with something akin to it. for example, if you do already speak
italian venturing into spanish will be much much easier for you than tackling japanese.
why? well because much of what you find in the spanish language is somewhat similar to what you already care and know about.
with japanese on the other hand everything!!! would be alien to you! instead of left-right-top-bottom people often write top-bottom-right-left, in addition to roman characters you get hiragana, katakana and last and most challenging chinese characters, instead of “normal” word order alla -bob likes lisp- you get -bob lisp likes-, no real grammatical number / gender…, counting… lets face it… counting is just a bloody mess, honorifics etc. etc.
…so… ultimately it really does come down to a different way of thinking… very much
how imperative programming and functional programming is much more about different ways of thinking, rather than any specific programming language.
so:
What’s in a name? That which we call a rose
By any other name would smell as sweet;
-----> no! global state and mutation reeks!?
anyway…point is… learning about any lisp will be a major challenge, because of the unfamiliar syntax and programming concepts.
but it gets even worse! not only is clojure a lisp but a lisp hosted on the jvm!
the difficulty here is that, whenever something is hosted on something else… or providing an abstraction over something else, i am convinced that this really requires you to know about the host also… the abstraction alone does really not suffice!
for example, i have always found that the biggest problem with ORM is that people are using it without a proper understanding of the basic underlying RDB concepts.
so what i am saying is this: if you wanna learn about clojure you’d probably do well to learn some other lisp and java beforehand. ( same goes for js and cljs )
now if you look at my youtube channel you will find a programming tutorial consisting of 200 ( or so ) episodes discussing first emacs lisp, then urging the viewer to check out
some java ( “effective java” etc. ) on her own… and ONLY THEN… ( having established those crucial foundations ) do i start discussing some basic clojure.
bottom line, getting to grips with clojure is super tough, but perhaps that’s also what’s making it fun… kinda
anyway… i am still struggling with clj myself,… but far from giving up!!! in fact i got myself a sweet deal on the living clojure book… which has been recommended by seancorfield,… should arrive any day now
final remark and coming back to spoken languages,… obviously… - really this goes without saying -… obviously one can never fully / really master any language… native speaker / programmer or not… what with the infinite and ever evolving universe of subtleties, connotations, dialects, idiolects, idioms etc. etc.
p.s. not everything in life needs to / should gravitate around efficiency, pragmatism, practicality and ( sadly looming all too large all too often ) expediency!!!
We’re losing about one language a week, and by some estimates, half of the world’s languages will be gone in the next hundred years.