4Clojure is really fun! Reading just the book by itself got boring for me and I thoroughly enjoyed working through the problems side-by-side! Thanks to everyone who contributed to it.
Another thing that I found great for practice was Advent of Code[0]. The exercises are more challenging and most of them lend themselves really well to the conciseness and elegance of Clojure collections. The reddit community[1] is also helpful and even if you can't crack the algorithm, porting someone else's solution to Clojure is a valuable & fun exercise.
In addition to 4Clojure, I found the Brave Clojure book (https://www.braveclojure.com/) helpful for understanding how to structure programs in a "Clojure-y" way, e.g., to a greater extent than OOP representing data in lists and maps instead of structured classes, or using the "nil" value effectively when chaining functions together, almost like the Maybe monad.
I found 4clojure great when starting out as well. I am definitely more of a 'hands on' learner, so these exercises were great for me. However my absolute favorite language agnostic tool for learning, like you, is Advent of Code. I try to go through all 25 whenever I'm learning a new language, and sure enough by the time I get to the last one, I pretty much know what I need to know.
I agree. For someone with a math background and not much algorithms training, the 4clojure exercises were just the ticket for me when i worked through term in 2013. Whoever wrote them put a lot of effort into breaking them into informative chunks.
4Clojure empasizes non idiomatic solutions way to much imho.
"Now solve this without using the standard way of solving it." doesn't seem like a good idea when you want people to write good readable code in the end :/
I disagree w/ this comment. The types of problems where it disallows using built-ins are typically those that have you re-implementing a function for purposes of learning. The implementation of that function, in my experience, is still fairly idiomatic if you are following the right users. Particularly those functions that force you to build a lazy implementation. I found the exercises (and more importantly comparing to more experienced user's solutions) incredibly helpful not just for clojure but FP concepts generally.
It's supposed to make you understand the language, how it works, and why it works the way it does, not how to write it professionally. It exposes you to patterns you'll run into.
Another thing that I found great for practice was Advent of Code[0]. The exercises are more challenging and most of them lend themselves really well to the conciseness and elegance of Clojure collections. The reddit community[1] is also helpful and even if you can't crack the algorithm, porting someone else's solution to Clojure is a valuable & fun exercise.
[0] - https://adventofcode.com/
[1] - https://www.reddit.com/r/adventofcode/