« Code Kata Fifteen -- A Diversion | Main

January 30, 2007

TrackBack

TrackBack URL for this entry:
http://www.typepad.com/services/trackback/6a00d83451c41c69e200d834df0fce53ef

Listed below are links to weblogs that reference Kata, Kumite, Koan, and Dreyfus:

Comments

JazzB

really tho.... endless studies on how music students naturally do better in math..... many studies. Ive seen 40% in some groups. With just 15 minutes a WEEK in music. scary to think what would happen if we had our students play an instrument (of there choice) EVERY MORN........ those who wanted to draw or paint............ well hell yes...lol

I am proud to paint and make recorded music ... often within the same hour. After these moments I have known such detachment from even the idea of math so it intrigues me, these studies.

Dave Thomas

I find Conzar's comments very sad—what a bleak view of the world.

I do code kata primarily for the same reason my black-belt son does his kata—for the pleasure of doing them. And, each time we repeat an exercise, we learn something.

The existence of guns doesn't make martial arts obsolete, any more than the existence of sequencers obsoletes the concept of a group of friends getting together to make music.

In martial arts, music, and programming, the doing gives as much pleasure as the outcome.

CodeKata is simply an excuse to do coding.

Conzar

I agree with Woof. Katas also known as "forms" in the kung fu world are done in repetition. Also, a good kung fu master will explain the moves within the form while teaching you the form.

Its only in America and other places where master's don't properly teach their students the form because they want to protect their knowledge and ensure a paycheck.

I also think that exercising a language is a waste of time. Eventually, the language that one becomes proficient in will become obsolete. We already have tools that generate code.

Its only a matter of time before formal programming will be completely replaced.

Its the whole notion that repetition is something that humans don't like to do and that machines are good at doing.

As the gun has made martial arts obsolete, auto-generated code will make programming obsolete.

Ralf Westphal

Excellent idea to introduce the notion of kata to software development to instill a habit of constant practicing!

As for bringing together Dreyfus and the eastern way of learning you might want to have a look at the "shu - ha - ri" stages of skill development: http://www.aikidofaq.com/essays/tin/shuhari.html

-Ralf

Jerng

Yeah. It's all practice. Breaking up human experience into component signals is the same way.

Grey

Most of what you said is reflected in Shuhari: http://en.wikipedia.org/wiki/Shu_Ha_Ri

Woof

Kata. Meh.

I'm familiar with both the concept and meaning of kata ('form', or 'elements'), and I've heard the word used in the context of code practice here and there for awhile. But it's just the wrong word to use.

First off, kata is form repeated, and a terminal mode of practice in itself. Kata are a way to mastery, but a main point is 'becoming' the kata as it is being practiced, in a way. It doesn't usually help to get too metaphysical here, because the benefit, no matter what spiritual or mental take you have on it, is simply making the movements a part of your natural responses.

Fine. But kata don't change up, really. I mean, you'll see improvised portions of kata in competition, as well as free forms and other modes of kata, but in traditional practice, you don't go messing with kata too much because the point is conditioned response. It's especially relevant to full-body practice of movements, since movement training is, generally, especially challenging even for those who are gifted.

Music practice is a better analogy. You *do* go ahead and change up scales, for example, to a degree. You play arpeggios, permutations of patterns, different positions, etc., you get them under your fingers. But that's not kata, which would be playing the same exercises over and over until they're more than second nature, like Hanon for the piano.

Practice is really all you're talking about here, but you're dressing it up for some reason with a word which isn't really accurate. Opinions will vary, I'm sure, as to the appropriateness of the word, and no one will really mind, probably, one way or the other. But developers do seem to get a little bent when other developers use the words 'closure' or 'continuation' inappropriately.

I would never want to do a code 'kata'. I will never be interested in coding, for example, quicksort over and over and over again until quicksort and I are one. There may even be a huge benefit in doing this, but I'll die of boredom long before I reach a quicksort epiphany.

I do, however, practice quite a bit, with Project Euler, or the ACM judge at UVa, or TopCoder. Is this nitpicking? I'm sure most people will think so, yes, but everyone has their nits to pick about certain terminology, and there's something to be said for choosing the correct words. I will 'woodshed', or 'practice', or 'spar' or 'hack' or 'hammer' -- all fun and, more or less, accurate words within the context they're usually used. But 'kata'? No, not for me, unless I'm wearing a uniform and Sensei is shouting "ICHI!", "NI!", "SAN!", "SHI!".

Sam

**To quote from Andy’s talk, "Experience comes from practice".**

I picked up a saying in the last couple of years that I really like: "Good judgement comes from experience. Experience comes frm bad judgement."

You just hope that you're not gaining that "experience" on the job, but from what you say, it seems that's the way things work.

I'm just getting started down the programming road at a ripe age, but I'm very motivated and your explanations are aligned with my other interests as well.

Thanks!

MikeBlake

Great stuff Dave. I've been thinking about the similarities between studying music and programming, and It seems our field lacks enough Katas.

In learning music we practice things like scales , arpeggios, and study pieces called Etudes. Forunately in the music field there are hundreds of years of great exercises that we turn to when we are studying.

So I'm looking forward to more Kata's, Kumite and Koans.

Paulo Neves

The link to Andy's presentation is broken (in the word avaiable).

Michael

I think you're dead on. For those wishing a head start, there are tons of resources online for ideas. Programming competitions generally post all of their problems for past competitions (usually requires advanced algorithm and math theory, though). Sites like RubyQuiz.com offers regular challenges (which can really be done in any language and vary in complexity), and often post reviews of everyone's solutions afterward. Any site that lists standard programmer interview questions is a gem of kata-like material that I personally practice all the time (but especially when picking up new languages).

If you want to master your craft, you must attain a broad base of experience and always seek deeper understanding. If the only coding you do is during your day job on assigned tasks only, then mastery is out of your reach.

HS

Nice essay.
Is it JAOO or JOAA ?

The comments to this entry are closed.