Coming from C#, Clojure was definitely a shock to the system. I originally chose the language for a side project because I wanted to learn something fully functional. It definitely took me a while to get running with the language, and there was (and still is) a lot of documentation reading on my part to see how functions are used. I stumbled over IDE choices (emacs or cursive?), lazy sequences, the idea of everything being a map or list, updating tree structures with 'assoc-in` which actually returns new trees because it's all immutable, and so on and so on.
It was tough going to begin with, but now I can look back and be happy I made the effort. It's definitely opened my eyes as to what can be done with a dynamic language. I never thought that a language without an explicit type system would actually be easier to reason about, but now I realise I was just scarred by Javascript. The functional nature, and the immutable data structures that all fit together so well, not to mention the STM, make Clojure a joy to work with.
Not that there aren't some warts still, mainly to do with debugging and error messages. But you learn to work round these problems.
I was hoping for an explanation a little more concrete.
I mean, we already knew Lisp is the language of of the Gods (https://xkcd.com/224/); listening to the same hymn over and over again won't bestow enlightenment.
It was tough going to begin with, but now I can look back and be happy I made the effort. It's definitely opened my eyes as to what can be done with a dynamic language. I never thought that a language without an explicit type system would actually be easier to reason about, but now I realise I was just scarred by Javascript. The functional nature, and the immutable data structures that all fit together so well, not to mention the STM, make Clojure a joy to work with.
Not that there aren't some warts still, mainly to do with debugging and error messages. But you learn to work round these problems.