This site offers a collection of code kata. With rare exception, they can be done in
nearly any language you like. If you are learning a new language, a kata can be a great
starter project. If you are practicing a language you already know, some of these kata may
not be sufficiently challenging. Mastery is, after all, about dedicated practice. That
means not just doing something over and over again but pushing yourself. Dedicated practice
should be difficult if not uncomfortable.
Each kata contains instructions which provide the requirements for the code you will
write. Some kata have special features which you will want to take note of before you
start. These may be suggested test cases or even existing code repositories you will
download and refactor as part of the challenge.
More involved kata, like Monopoly and Enigma include the concept of releases. In these
kata it is best to tackle each component of problem as presented rather than reading ahead.
Part of the challenge and lesson is learning to live with or refactor your early design
decisions.