tl;dr: doing the same thing repetitively only improves your skill to a point after which you need to increase the difficulty of the task if you are to continue to improve.
The author tries really hard to suggest that when you work on a "code kata" you will not improve.
But there is no drill instructor yelling: "GIVE ME 100 CRUD-WEB APPS, RIGHT NOW!"
"code kata" is just a fancy name for a computational problem that has limited scope but still provides lots of room for creativity.
tl;dr: "code katas" were never intended to be mindlessly repeated but to deliberately think about what can be faster, better, more elegant, expressive (name you favorite)
I believe martial katas were invented as a means for one teacher to teach lots and lots of students at the same time. Like a lot of things of oriental origin, they tend to get romanticized in the west.
True, and also relevant: We solve so many different problems that changing the difficulty is only a start. Changing the actual task is as, if not more, important.
Coming from a martial arts background, kata are about learning very specific motions -- more than one at a time -- by performing them repeatedly in sequence. This does not mean that kata are an end in and of themselves. They teach you what to do, not why to do it. They train your body to do something. The why comes later, when you have the how as a basis; this is a fairly fundamental difference between learning a physical skill and a mental one, where the latter can be mastered without at least some of the conditioning necessary for the former.
Doing the same thing in code will train you to solve a single problem, whether in one way or in more than one way, and the difference really doesn't matter. It's trivially different from training you to solve problems, which is what good programmers do as a matter of course.
Effective ways of improving skill x are not necessarily applicable to learning skill y. I believe this is one instance of x and y being so far removed from one another as to be totally unrelated, and the application of training methods for x just don't matter at all for y; one man's garbage is another man's treasure, and this to me epitomizes that.
"Effective ways of improving skill x are not necessarily applicable to learning skill y. I believe this is one instance of x and y being so far removed from one another as to be totally unrelated, and the application of training methods for x just don't matter at all for y; one man's garbage is another man's treasure, and this to me epitomizes that."
Well said.
ime, people who try to 'exoticize' their programming by abusing martial arts/zen/taoism etc terminology never seriously practiced a martial art (or zen or taoism for that matter) in their lives.
In the martial arts, playing an instrument, etc you are improving body movement/memory which does take repetition and hence you need katas/etudes. The value of repeating the same problem in a mental activity like programming or math (imagine writing the same proof a hundred times) is dubious. Which is why so called "kata" often degenerates into optimizing the physical components - learning key combinations on an IDE/editor (which has some value, but can probably be undertaken without the martial arts mumbo jumbo). Timing a "kata" just adds to the craziness.
There's got to be pretty much zero benefit in solving the same programming problem in the same way. However I have found considerable benefit in solving the same programming problem in different ways. So using different languages, programming different styles (I once wrote a program strictly following the Law of Demeter just to see), implemented a games rules system as a bunch of Command objects and then doing it again as a stack base DSL. This kind of "kata" (I join you in hating on the co-option of the word) has helped me expand my programming skill set.
Just doing something isn't going to improve your skill; doing it mindfully and being aware of what you're doing, why, and how you could do it better will improve your skill.
To use his analogy -- walking every day won't help you be a better walker. But being aware of how you walk and how you respond to obstacles and improving your reactions will.
tl;dr: doing the same thing repetitively only improves your skill to a point after which you need to increase the difficulty of the task if you are to continue to improve.