Something I’ve really started to enjoy is working through software katas.
In karate, katas are exercises the student repeats many, many times. Each time through, the student will (hopefully) improve little by little in order to develop their technique and skill.
Similarly in software, katas are small, well-defined problems that are useful to practice software design techniques.
Inspired partly by Magnus Holm’s timeless repo, I’m going to post these kata here as embedded gists, so as I update them (and make more attempts at solving them) we’ll be able to see how my thoughts on software design grow and change.
I’ll keep the full list of kata up-to-date here :)