Has anyone ever encountered list(s) of recommended projects that one should build in order to learn particular programming or computing concepts, in increasing complexity & dfificulty? E.g. (I’m making stuff up)
“Make a to-do list => learn front-end UI stuff, also back-end database persistence.
Next, make a multi-blogging platform =>…” etc.
When I started learning Clojure, I made the decision to force myself to use Clojure for all my programming and automation tasks.
Basically a variation of the Total Immersion strategy for learning a new language.
If there was a common web browsing task I did, I automated it with Clojure (see etaoin).
For services I was using regularly (for example, I use YNAB for budgeting, Vultr for hosting, Reddit for browsing, Wordpress, Cloudflare), I checked if there was an API, and then worked out how to access the API in Clojure (see clj-http).
If I couldn’t find an API for a website or service I used regularly, I used etaoin and played around with it until I could get the information I wanted (for example, Amazon, my bank)
Anytime I would normally reach for writing a bash or python script, I rather forced myself to use the Clojure repl via a scratch.clj file.
Anytime I would normally reach for a calculator, I rather forced myself to use Clojure.
Same for Excel - if there was a task that I would normally use Excel for, and I didn’t need to share the resulting sheet, I rather did the calculation in Clojure instead
If there was a task I needed to do regularly for work, like generate a report, I figured out how to do that in Clojure instead
In the beginning it will slow you down, but it is an exponential process - the more you use Clojure, the more places you’ll find that you can use it.
As you build up these little functions to help you with your daily tasks, future tasks become easier. You’ll start building up your repository of functions that you can combine in different ways. And you’ll learn while working on things that are actually important to you and make you life easier.
Here are some more tips for this:
Set up a Clojure project (here’s how) - only do this once, and put everything you do into this project, so give it a generic name (for example, fatmonky). For example, I have namespaces like mjmeintjes.ynab, mjmeintjes.amazon, mjmeintjes.wordpress.
Start up the Clojure REPL when your computer starts, and always leave it running
Create a scratch.clj namespace - this is for experimentation and playing around. Never type directly into the REPL, write in the scratch namespace instead.
When you run into a barrier, or you don’t know where to start for a specific task, then use books or ask here on Clojureverse. That way you are getting specific advice.
Answering my own question, I came across this recently:
This is not just a simple list of projects, but a collection that describes each project in enough detail so that you can develop it from the ground up!
Each project has the following features:
A clear and descriptive objective;
A list of User Stories which should be implemented (these stories act more as a guideline than a forced list of To-Do’s. Feel free to add your own stories if you want);
A list of bonus features that not only improve the base project, but also your skills at the same time (these are optional and should be attempted only after you have completed the required user stories)
All the resources and links to help you find what you need to complete the project