Circling back to HtDP, though organized as an introductory text, a more experienced programmer might benefit from working through it as a way of developing a discipline for functional programming. That is, when HtDP is the only exposure to programming a beginner has, programming == functional programming. On the other hand, an experienced programmer has programming habits which must be set aside when learning functional programming and that may be a harder task.
Both the language and the community bear resemble my experience with Ruby. Like Ruby, the language is relatively beginner-friendly, and the community is very welcoming and helpful.
The language is probably my favorite so far. For me it hits the pragmatic sweet spot between enforcing functional programming without being needlessly strict/pedantic about it, or overwhelming me with FP concepts. That can be considered a downside too, of course, but in my case it really helped me ease into functional programming in a way that other languages did not (Haskell was a bit too much, and Clojure felt too alien, for example).
The friendly community matters a lot when you're in the 'stupid questions' phase. More than once my undoubtedly very silly questions were answered promptly, often even by the creator of the language. My experience with quite a few other 'functional' communities is that there's an unfortunate tendency toward condescension, or a kind of academic elitism that made me avoid asking what I thought might be stupid questions.
Furthermore, people actively try to teach functional principles, and in particular the Phoenix web framework is great even just to see how things are done (I often add it to my projects just for reference). Dave Thomas, who is an excellent and prolific teacher/language enthusiast, has more than once expressed his affection for Elixir as a language to teach functional programming.
Another advantage is tooling. One of the explicit goals set by the creator (Jose Valim) was to make the language 'friendly'. So very often error messages give hints on how to do things instead, and there's an automatic formatter that 'fixes' stuff for you (proper indentation, idiomatic code style, etc.). The documentation for the language, packages and functions are probably my favorite ever, and it comes with other goodies like a testing framework, interactive code shell (REPL), a really nice package manager and probably some other stuff I forgot.
And finally, even though it's by no means a very popular language (yet), it's well on its way to being a 'mainstream' functional language, and it's something you can actually use for a lot of stuff (backend development, scripting, or to start a telephony company ;).
Btw, if anyone else is already playing around with Elixir, I can highly recommend searching for Dave Thomas' articles and videos. They're an excellent way to learn FP as well 'why' FP is interesting/important/worthwhile.
'Expert F#' by Don Syme et all is a fantastic reference.
Real World Functional programming by Tomas Petricek is very good as well.
'Programming language concepts' by Peter Sestoft is fantastic as well, as programming languages are perhaps the most obvious domain where functional approach shine, and the concepts are needed everywhere even though one was not implementing an interpreter.
https://fsharpforfunandprofit.com/
And his talk on functional "design patterns":
Graham Hutton’s programming in Haskell is a really great book and will get you up and moving in no time.
If you’re new to programming, id suggest Haskell Programming from first principles by Chris Allen And Julie Moronuki. It’s a very large book(1000+ Pages) but teaches you functional programming concepts from scratch in Haskell without assuming any previous exposure to the language
Professor Frisby’s mostly Adequate Guide to Functional Programming by Brian Lunsdorf is great[1]. A pretty solid book meant for beginners that introduces functional programming in a simple manner without over burdening you with all the math. It uses JavaScript, and helps you create a lot of the functional programming patterns yourself.
Learn You a Haskell For Great Good [2]. This book is pretty light hearted and an entertaining read. It’s for beginners. I’ve heard a good follow up to this one is Real World Haskell, but I’ve also heard the code for it is outdated, but I’m not certain whether it is (I’ve never read it.)
There is a course on egghead.io that is free by Brian Lonsdorf the author of the Mostly Adequate guide [3]. I hesitate recommending this one as it’s got a pretty different approach and uses stop motion that can take some getting used to and the voices can be somewhat annoying, but overall great content wise and covers many of the things in the Mostly Adequate guide. He also does a course on Frontend Masters which is just him giving a workshop in person so no stop motion or weird voices.
Lastly I haven’t actually read this one even though I believe I purchased it when I first saw it announced by the author and it is, Functional Light JavaScript by Kyle Simpson [4]. Great author that always takes a r ally great approach to explaining things he wrote the You Don’t Know JS series that he released through O’Reilly and also put up on github. Kyle Simpson also has a course on Frontend Masters modeled after his book Functional Light JavaScript.
[1]: https://github.com/MostlyAdequate/mostly-adequate-guide/blob...
[2]: http://www.learnyouahaskell.com
[3]: https://egghead.io/courses/professor-frisby-introduces-compo...
It's a podcast which focuses on teaching FP "to the working programmer". One of the authors was a novice when the podcast started, and he asks questions "keeping the discussion grounded" (most of the time). It's not centered on one particular language or framework. I've been listening to them while doing menial tasks like cleaning up my kitchen and I can understand some concepts now that I could not before.
Apprenticeship is invaluable. If you can, find an adept functional programmer to learn from.
I was fortunate enough to get a job at a place using Elm and Elixir, and I had the opportunity to learn from another developer with a lot of passion for FP. It was incredibly helpful for learning.
Good luck! FP is a great tool for your tool belt and teaches a lot about good code design.
[0]: https://m.youtube.com/playlist?list=PL0zVEGEvSaeEd9hlmCXrk5y...