Clojure is amazing and i can't recommend it enough. I wish more people looked past the unfamiliar syntax and understood why it exists and how it makes you achieve more with simpler code.
Clojure is amazing and i can't recommend it enough. I wish more people looked past the unfamiliar syntax and understood why it exists and how it makes you achieve more with simpler code.
I think Clojure will be fine. It is slowly and steadily growing. I honestly think it has reached well beyond the point where it can fade away. People always bring Common Lisp as an example and mention so-called "Lisp curse", etc. but if you follow and analyze the history of PLs - you'd probably realize - Clojure is a natural next evolutionary step of Lisp.
The industry desperately needs languages like Clojure and Haskell. Haskell being somewhat more "academic" and a bit "impractical" (I should emphasize the double quotes: Haskell in the right hands can be extremely, dangerously practical) never going to reach the status of a mainstream language, whereas Clojure just might. Realistically, it probably won't ever become top ten in TIOBE (or whatever similar) index, and that is totally okay. But it is pretty good already, and it is arguably better than Python and Ruby, Java, Javascript, Go, C#, etc. Clojure is Haskell's "worse is better".
And look: it already has more conferences and meetups (more than Elixir, Elm, OCaml, Haskell, Groovy, maybe even Scala) around the world (almost every European country now has its own seasonal Clojure conf.), it has over a dozen of books (and more coming), more podcasts. Clojure is a niche, but it is slowly become more popular.
Likewise, each function page (if you scroll down) has a "See Also" which lists similar functions, which helps discover other functions in the standard lib.
Beyond the Standard Library, I find the Luminus Project [2] an excellent source of real-world code and documents for problems around web development. Further along these lines is the Clojure Cookbook [3] as well.
[1]: https://clojure.org/api/cheatsheet [2]: http://www.luminusweb.net/docs [3]: https://github.com/clojure-cookbook/clojure-cookbook
> "lightbulb moments" for a dev steeped in C-like languages?
I'm from C++, so I feel what you mean when moving from Imperative to Functional. I have two insights that helped me:
* Despite the huge type systems, languages like C have "Raw Memory" as the universal data structure. Think about pointer magic or the `union` type. Clojure does something similar; Despite the different data structures, the universal structure is `seq` which allows iteration over a data structure in the same way pointers iterate over any memory.
* Clojure's immutable data structures eliminate the Pass-By-Reference and Pass-By-Value dichotomy. As such, you aren't so much (with functions) altering memory as transforming data. It feels much more like math (especially Linear Algebra) where you are transforming data. Seeing my code as a series of transforms greatly helps my understanding of a piece of Clojure code.
The main example I work through is in JavaScript so that Clojure's syntax doesn't get in the way (I love s-expressions, but they're not the point of the talk).
[1] https://www.braveclojure.com/clojure-for-the-brave-and-true/
Using let can also be a decent crutch, if you're just not used to doing things with functional composition and (occasional) macros.
I truly doubt many professional devs are put off by the syntax. This is the least of the hurdles facing any (post-beginner) programmer learning a new language. It wouldn't even make it to the bottom of my list of criteria.
But also unfamiliarity in general is a hurdle. Clojure is unfamiliar in a multitude of ways and it takes some effort to realize how all these things Clojure is different in actually have great synergies.