Everyone's journey through programming languages is different - we all choose different times to start and stop.
One thing I know for sure - the more languages you use in-anger, the easier learning the next one is. I really didn't know anything about my first language or two until I learned the third or fourth.
More details to leave here, but for now, here's a rough outline of my path:
At the time of writing, my opinions are quite strongly in favor of Clojure for just about everything practical. It does so much in so little code, is extremely flexible and malleable, and is excellent for interactive debugging. Especially with the recent expansion of targets (e.g. Babashka), Clojure can reach everywhere.
I do think my path had something to do with my stability at the end. If folks come into clojure without trying to destructure json in Go, without dealing with python in anger, or without typing yourself into a category theory corner in Haskell, you might need to go chase that first.
I loved Elixir for it's simple and effective standard library and interactivity as well - Clojure just feels like an even better execution of those things.
More to share here! Feel free to ping me if you want to hash any of this out,
I'm game :D
Interactive, REPL-driven development, in the editor, is, in my opinion, the best thing about programming.
Never before have I been able to run code without leaving the code. It makes the interaction so much more real. Like that first time you ran a script, but now with lisp, you can evaluate any list you want.
There are definitely a few quirks that I need to learn better, like learning the full cider - debugger api.
There are other great concepts in clojure, but I think the feedback loop you get in a clojure repl is unmatched across my coding experiences.
I've been in Haskell with Monads and Lenses. It was great, but the feedback was very much: the compiler likes it, hopefully my types are right too. Who knows what it's doing at runtime? Hope you wrote some tests!
In clojure, it's very common to build up some computation in a namespace, saving and re-using ns-level variables to see the function's actual output. That code then gets squashed together and dropped into a function on the namespace.
It ends up lending itself well to writing small, tiny, well-named functions.