My two favorite ways to learn are to make little toy apps and write. Below are some of my tinkerings where I've brought those together. Hopefully they'll be useful to you in some fashion as well.
Ideally, they're small. Likely, they exist because I wanted to learn something or illustrate a concept on its own. You may laugh at why I even bothered to make them. But, I had fun.
I was reflecting on The Unix Philosophy and it struck me that
wc (a command-line utility that can count words, characters, and lines)
would be interesting to replace. But, unlike
wc, I would only do one thing. Count lines. In writing my own utility, I could learn how to read input from the command line.
But, even better, I could rewrite the same utility in a few languages to get a sense for how various languages compare with a problem that is trivial but useful.