These aren't necessarily sorted by difficulty.
I just come up with a challenge every day that fits my current level. I've also accounted for varying motivation, so any new Elm code or knowledge counts.
Hi! My name is Kristian.
The next 30 days, I'm going to teach myself the basics of Elm by making something new every day with Elm. Even the simplest things count. There's no structure or plan.
I was inspired to do this project after seeing Lars Lillo Ulvestad do 100 days of Haskell: https://twitter.com/larsparsfromage
30 days seems good enough to begin with, 100 would also be cool - I'm happy either way.
In the hands of more skilled developers, most of the errors I've gotten wouldn't have happened, or they would have been fixed much faster than I did, but I want to avoid them altogether.
Elm avoids runtime errors by design. Its error messages are really well written, its ecosystem seems cohesive, and I keep hearing good things about functional programming in general.
Even if I don't end up continuing with Elm, I think this will be a fun and educational experience that will make me a better developer.
Motivation and focus vary every day, knowledge gains happen in bursts, cool ideas come out of the blue.
Why am I setting the bar so low every day? Saying that "even the simplest things count" may not sound ambitious, but consider the following scenarios:
High motivation + setting the bar too high:
Even if I learn a lot, I can still end up viewing it as a failure because I didn't reach my goal.
Low motivation + setting the bar too high:
There's no success in sight.
High motivation + setting the bar low:
I continue - not because I have to, but because I want to, and I usually end up raising the bar in the process.
Low motivation + setting the bar low:
Although I don't want to, I understand that I can succeed just by getting one tiny thing done. This is better than outcome 1! Also, this often produces enough motivation to keep going a bit longer than first anticipated.