Kata, loosely, are forms practiced over and over. The term comes from the martial arts (Japanese, mostly). In The Pragmatic Programmer (same source as Rubber Ducky Debugging), kata is a term given to programming exercises to focus and hone skills and concepts. Kata are not intended to be a ‘one and done’ exercise, but repeated multiple times. This is not to say you write the same thing over and over again. Instead, each attempt at a kata should be made from a different angle or perspective than previous attempts. In other words: to look at a the kata problem a different way and try a different solution.
Practice, practice, practice
For our purposes, kata are exercises to try skills and concepts learned in class. Many kata posted will have variations or levels of complexity to challenge different skill levels. Submitted kata receive XP that is applied towards the grade total. The higher the kata skill level attempted, the higher the associated XP. Kata may be attempted multiple times for more XP. However, kata submitted for more XP much each have a different solution. Kata submitted with the same solution are treated as resubmissions and do not receive more XP.
Here’s an example: Kwaqs the hacker duck completes a kata and submits the attempt and receives 25 XP for the attempt. Kwaqs learns some new stuff and decides to make another attempt at the kata, this time with a different solution. Kwaqs receives 20 XP (out of a possible 25) for the second attempt because the 2nd attempt didn’t work correctly. Kwaqs discovers the bug in the code, fixes the code, and resubmits the kata. Kwaqs doesn’t receive another set of 25 XP for the fixed code–just a few more points for fixing and resubmitting (the full 25 out of 25 for the second attempt).
Clear as mud?
When submitting kata, be sure to indicate which level (if multiple levels offered for the kata) is attempted. Provide some details about the solution attempted: How did you approach the solution? What was different from the last submission (if making more than one attempt)? How well do you think your solution worked? What would you change to improve the solution?