I stand by my finding a small project — in my case processing and creating csv data for address verification — in order to plunge me into learning Clojure. However, there is something to be said for solving problems for which there are already higher-level Clojure functions like distinct and flatten.
One of the most successful courses I ever took was a C language course taught on Unix. That course was heavy into the project immersion theory. We wrote a make utility as one of the projects. To solve one problem, I wound up using sed, and had never heard of it before.
It was not until I was writing production software in PL/I that I learned the notion of writing “stub” code, small little test applets. There were no REPLs in our world then; Python had not been invented; and Perl was and still is tested from the command line.
Those stub code samples were analogous to writing code at the REPL, and the kinds of tasks engaged in were so-called pablum, “scales”, or exercises. I’m going through that now with Clojure. Of course I want to use distinct and flatten, but I also want to learn more about the origin of those functions.