I was in Sheffield, UK at XP2005 this week. My favorite event was
Laurent Bossavit's Coding Dojo. Apparently it's based on some of the
ideas from Pragmatic Dave Thomas' blogs. PragDave? talks about simple
coding exercises that one would work over and over again, the same way
that martial artists repetitively practice their moves in forms
called: kata.
In Laurent's workshop, one of the presenters, Emmanuel Gaillot, used
TDD to build a tiny bit of Conway's game of life. He wrote in Ruby.
The beauty of this was that most of the attendees did not know Ruby,
but they were able to follow what Emmanuel was doing, and make
recommendations regarding the design. Most of us learned a little Ruby
too.
Now I have been doing one particular Kata for several years now. I've
done it hundreds of times. I do it at conferences, customers sites,
trade shows, etc. It's the BowlingGame?. I've done this so many times
I can do it in my sleep. The funny thing about it is, though, that I
still make tiny little improvements. This doesn't happen very often
anymore, and the improvements are not significant; but they are there.
I was a martial artist for several years. Most recently I studied Jiu
Jitsu. The experience of repeating and repeating a single set of moves
is intrinsic to the way any martial art is taught. Beginners learn by
doing, not through lecture. They practice and practice, and practice.
They practice with their peers and with their seniors, and with their
juniors. And over time they can gain a level of skill that's quite
respectable. And yet, even at the pinnacle of (my) skill, I found that
I was making tiny little improvements from time to time. I would
experience tiny little aha! moments - just like when I do the Bowling
Game.
Recently we brought three new apprentices in to the office. I started
them out with a simple exercise (I might call it a Kata now). I had
them write a simple algorithm to compute the prime factors of an
integer. I gave them the initial test cases, and asked them to make
each one pass in succession by making the simplest possible change. I
advised them that if they did this carefully, they should arrive at a
general solution that is no more than three lines of code in it's core
algorithm. (You can see this Kata here.) Each of the apprentices did
this exercised, and learned a lot about TDD, and simple design. Next I
had them do another exercise to add a !timeofday widget to FitNesse,
and then convert it into a plugin. They each did that too. That gave
them the necessary knowledge and skill to begin working on the next
project.
Now, I think I am going to drive these apprentices to repeat these
exercises as Kata. And I think I'll introduce new kata for them.
Imagine a kata for recursion, a simple tree search. Imagine one for
tail-recursion, a factorial program. Imagine a simple Kata for
sockets, or multithreading, or regular expressions, or ... You get the
idea. By repeating and repeating these same exercises, we sharpen our
skills, we train our bodies and our minds to respond to the
disciplines of TDD and simple design. We wire, and rewire, and rewire,
and rewire our neurons to react in the right way.
As you can see, I think this is very powerful.
I have put several Kata up on my blog: blog.objectmentor.com. Take a
look at them and let me know what you think.
-----
Robert C. Martin (Uncle Bob) | email: uncl...@objectmentor.com
Object Mentor Inc. | blog: www.butunclebob.com
The Agile Transition Experts | web: www.objectmentor.com
800-338-6716
"The aim of science is not to open the door to infinite wisdom,
but to set a limit to infinite error."
-- Bertolt Brecht, Life of Galileo
Davor
On Fri, 24 Jun 2005 12:49:47 -0500, Robert C. Martin
<uncl...@objectmentor.com> wrote:
> Now I have been doing one particular Kata for several years now. I've
> done it hundreds of times. I do it at conferences, customers sites,
> trade shows, etc. It's the BowlingGame?. I've done this so many times
> I can do it in my sleep. The funny thing about it is, though, that I
> still make tiny little improvements. This doesn't happen very often
> anymore, and the improvements are not significant; but they are there.
Why would I waste my valuable time and brain power practicing solutions
the bowling game when I just use yours :). Ditto for all the other problem
areas you mention.
Paul C.
> In such sports, what training consists of could be compared to writing
> 1000s of "for loops", writing 1000s of printf statements, and so on,
I see your point. Too many programmers already waste time writing for
loops or printf statements over and over... in "real-life" projects, so
called. :)
The Dojo has been running in Paris weekly for over 20 weeks. Past Katas
have included maze walking, Conway's game of Life, counting commented
lines of code, and something we call the Harry Potter Kata.
In 20 weeks' time we have touched on topics including binary searches,
recursion, graph exploration, functional style, network programming, bit
masks, optimization, parsing, combinatorics, OO design...
Rather a richer set than many developers are exposed to in 20 weeks at
the day job; and we only meet for 2 hours each week. Several attendees
voiced the opinion that they learn more at the Dojo than on the job.
Laurent
> Why would I waste my valuable time and brain power practicing solutions
> the bowling game when I just use yours :)
Yeah, maybe we should just let Bob (and Ron Jeffries) have the Bowling
Game. They've done it so many times it's kind of spoiled it for everyone
else. :)
As for the others, though:
Why would a musician waste time and brain power practicing a piece when
she can just buy the CD ? (Or get the MP3 from P2P networks.)
Same reason - to build the chops.
Laurent
> In 20 weeks' time we have touched on topics including binary searches,
> recursion, graph exploration, functional style, network programming, bit
> masks, optimization, parsing, combinatorics, OO design...
>
> Rather a richer set than many developers are exposed to in 20 weeks at
> the day job; and we only meet for 2 hours each week. Several attendees
> voiced the opinion that they learn more at the Dojo than on the job.
in the martial arts world they would probably call it a seminar.. what
I have observed though is when boxers for example attend such a seminar
and learn flying kicks, iron fist, and so on, they say "wow, it's
awesome... I learned so much" and then go back to jab, cross, left hook
to put food on their table...
Back to just Katas, I feel like Robert has raised the issue of
repeating and tailoring one particular complex set of "things" to a
perfection (that's what katas are about). Is it beneficial in our
field? If yes, what exactly should be practiced that way? What should
be our Katas? Writing 1000 printf statements? - I doubt. Writing 1000
binary search functions? - Maybe? Writing 1000 composite patterns
within a particular context? - Again maybe? I just know that I would
hate doing it :-) - I would prefer much more attending such a Dojo that
you described where I do one Kata only once or twice and then move to
the next thing :-) (though in this case Kata would not have meaning and
purpose it has in the martial arts).
Davor
Patience! Grasshopper.
>Back to just Katas, I feel like Robert has raised the issue of
>repeating and tailoring one particular complex set of "things" to a
>perfection (that's what katas are about). Is it beneficial in our
>field? If yes, what exactly should be practiced that way? What should
>be our Katas? Writing 1000 printf statements? - I doubt. Writing 1000
>binary search functions? - Maybe? Writing 1000 composite patterns
>within a particular context? - Again maybe? I just know that I would
>hate doing it :-) - I would prefer much more attending such a Dojo that
>you described where I do one Kata only once or twice and then move to
>the next thing :-) (though in this case Kata would not have meaning and
>purpose it has in the martial arts).
Whether you would hate doing it or not is irrelevant. The question is
whether there is much to learn by the intense study of minutia.
Take the Bowling Game kata for example. I put a few explanatory
comments in there, and left out a few of the tinier steps. Can you
walk from pane to pane in that kata and very thoroughly describe the
my rationale for each step? Can you make a subtle improvement?
Isn't this what an artist might do? Might he not paint a picture that
was painted by his teacher? Might he not try to replicate the brush
strokes, the shadings, the reflections? Might he not do this over and
over until his master's teachings have become second nature? And
*then* might he not add his own refinements and styles, and possibly
revolutionary ideas?
To learn the technique. The solution is not the goal. The technique
is the goal. When a student artist copies a painting from a master,
he is likely to discard it once done. The goal was not to create a
copy of the painting. The goal was to grind the technique into his
bones.
Bad schools = do your kata, now get in the ring.
Better school = do your kata, learn some common variations, insertions,
common counters,
do your kata with a partner who will offer
a continuum of resistance, problem solve the sticking points in applying the
kata,
learn to recognize the early signs of a sticking point, limited scope
sparring (your
partner has only 1 or 2 attacks, you always respond with the kata), point of
view
sparring where your partner is free-form and you always respond with the
kata
(at speed, from funny positions, as attack, as defense), both free-form and
see if
you can tell when to use and when not to.....
>I'm
>always somehow for having techniques and ways that will allow novices
>achieve the same and consistent results as the masters in our field.
Golden fleece. No such technique exists other than having the novice
take the time and effort to become a master.
>This is what I believe we should be striving for - predictable and
>consistent solutions.
Agreed, but not by hunting for the non-existent silver bullet that
will make novices program like experts.
> Golden fleece. No such technique exists other than having the novice
> take the time and effort to become a master.
I did not mean "silver bullet" technique, but rather an optimized way
of capturing experts knowledge... For example, in the case of your
katas, I think the main benefit is neither in the goal (as you referred
earlier in a reply to another person) or in the particular techniques
that you are using, but in the way you encapsulated expert knowledge in
that kata and the clarity with which you transfered it to a student.
So, the ideal kata would be the one that would transfer a chunk of the
expert knowledge, which you intended it to transfer, in just one shot.
That's also why I mentioned you could have maybe had a better analogy
if you compared your stuff with controlled sparring - a pragmatic way
to improve one particular thing in a fighter - as opposed to, for
example, karate katas which are kinda supposed to help you achieve
ultimate enlightenment or something...
Davor
> Bad schools = do your kata, now get in the ring.
>
> Better school = do your kata, learn some common variations, insertions,
> common counters,
Interesting description, seems all these schools wary quite a bit...
I'm aware only of shadow boxing, bag training, controlled sparring,
sparring, and fighting. Actually, when I think better about it, I feel
like Robert would have had better analogy with his examples to
*controlled sparring* rather than katas.
Davor
> Whether you would hate doing it or not is irrelevant. The question is
Agree, though for learning purposes something that gives you pleasure
and keeps your interest high will probably have better results...
> whether there is much to learn by the intense study of minutia.
Indeed, but question is also *what minutia* (if any, or maybe all)
should be learned and practiced that way in our field?
> Take the Bowling Game kata for example. I put a few explanatory
> comments in there, and left out a few of the tinier steps. Can you
> walk from pane to pane in that kata and very thoroughly describe the
> my rationale for each step? Can you make a subtle improvement?
>
> Isn't this what an artist might do? Might he not paint a picture that
> was painted by his teacher? Might he not try to replicate the brush
> strokes, the shadings, the reflections? Might he not do this over and
> over until his master's teachings have become second nature? And
> *then* might he not add his own refinements and styles, and possibly
> revolutionary ideas?
Most likely... Supposedly, in many martial arts the culmination of the
practice is the abandonment of the master's style through a transition
to your own unique style :-). Not sure if we want this though... I'm
always somehow for having techniques and ways that will allow novices
achieve the same and consistent results as the masters in our field.
This is what I believe we should be striving for - predictable and
consistent solutions.
(Side note, it seems that in software community, a huge number of
people are somehow involved in martial arts - at least a lot of the
ones I talked to where involved)
Davor
> So, the ideal kata would be the one that would transfer a chunk of the
> expert knowledge, which you intended it to transfer, in just one shot.
Donadl Finkel's book "Teaching with your mouth shut" revolves around
this important quote by John Dewey:
No thought, no idea, can possibly be conveyed as an idea from one
person to another. When it is told, it is, to the one to whom it is
told, another given fact, not an idea. The communication may
stimulate the other person to realize the question for himself and to
think out a like idea, or it may smother his intellectual interest
and suppress his dawning effort at thought. But what he directly gets
cannot be an idea. Only by wrestling with the conditions of the
problem at first hand, seeking and finding his own way out, does he
think.
I susbscribe to that. The only way to acquire expert knowledge is to
work at it. And it's a messy process - one with false starts, dead ends,
thrills and disillusions.
Coding Kata involve repetition because only through repetition can one
make the many (stress *many*) mistakes which inevitably accompany true
learning. Better to make these many mistakes on Kata than to make them
on the day job.
Laurent
Nice! It seems that this is also backed up by the NLP maxim that the
meaning of what I say is /defined/ by it's effect on the listener...
Cheers,
Kevin
> Coding Kata involve repetition because only through repetition can one
> make the many (stress *many*) mistakes which inevitably accompany true
> learning. Better to make these many mistakes on Kata than to make them
> on the day job.
Sure, I agree with both you and Robert on the essence of the ideas and
like them quite a bit. It will be great if you share your future
experiences on using this educational technique (most likely some stats
already exist for other disciplines?!)... Also, I believe the majority
of your work will have to be on designing and optimizing these katas in
order to maximize the return on investment, which is my main concern...
Davor
OK, Sorry for the misunderstanding.
Our industry is beset by "get smart quick" schemes. There aren't any.
Some people have a natural instinct for software design. Others learn
it through hard experience. Some (many) never learn it at all. Even
for those to whom it comes naturally, there is no quick path. It all
takes time, effort, and dedication.
> Also, I believe the majority
> of your work will have to be on designing and optimizing these katas in
> order to maximize the return on investment, which is my main concern...
Most definitely a design effort. I have a healthy respect for the amount
of work it must take to design a curriculum for a "standard" education
process, I ought to be daunted by the prospect of designing one for
something new like the Dojo. Foolishly or wisely, I'm not...
Laurent
> On Mon, 27 Jun 2005 22:21:56 +0100, "paul campbell"
> <paulc@.o.b.je.ct.vis.sion.co.uk> wrote:
>
>>
>>
>>
>> On Fri, 24 Jun 2005 12:49:47 -0500, Robert C. Martin
>> <uncl...@objectmentor.com> wrote:
>>
>>
>>> Now I have been doing one particular Kata for several years now. I've
>>> done it hundreds of times. I do it at conferences, customers sites,
>>> trade shows, etc. It's the BowlingGame?. I've done this so many times
>>> I can do it in my sleep. The funny thing about it is, though, that I
>>> still make tiny little improvements. This doesn't happen very often
>>> anymore, and the improvements are not significant; but they are there.
>>
>> Why would I waste my valuable time and brain power practicing solutions
>> the bowling game when I just use yours :). Ditto for all the other
>> problem
>> areas you mention.
>
> To learn the technique. The solution is not the goal. The technique
> is the goal.
Yes but the "technique" of solving a problem is only put into practice
to a significant extent the first time you do it on any given problem.
After that there is very little "solving" going on.
I will counter your dodgy analogy with one of my own - I am amatuer
musician that plays in pub/bar bands. One of the most valuable skills
in this game is being able to learn new songs by ear quickly. This
ability can only by improved by practice i.e. by learning songs that I
dont already know how to play. Once Ive learnt any given song once Ive
gained 90% of the potential benefit to my play-by-ear ability.
Having learned a song once I will have gained permanent insights into
it that I will never lose even if I dont play it for years and
have to re-learn it. I never ever get anything like the same
sensation of solving a mystery after that first time. I dont get
the same sensation of having racheted up my ability by another notch,
or at least not to anything like the same degree.
When solving and resolving software problems I get simmilar sensations.
> When a student artist copies a painting from a master,
> he is likely to discard it once done.
Ill concede that solving a problem already done by somon else can
by instructive THE FIRST TIME YOU DO IT - but how many art students
learn by copying the same piece over and over again ?.
Paul C.
>On Tue, 28 Jun 2005 17:16:11 -0500, Robert C. Martin
><uncl...@objectmentor.com> wrote:
>
>> On Mon, 27 Jun 2005 22:21:56 +0100, "paul campbell"
>> <paulc@.o.b.je.ct.vis.sion.co.uk> wrote:
>>
>>>
>>>
>>>
>>> On Fri, 24 Jun 2005 12:49:47 -0500, Robert C. Martin
>>> <uncl...@objectmentor.com> wrote:
>>>
>>>
>>>> Now I have been doing one particular Kata for several years now. I've
>>>> done it hundreds of times. I do it at conferences, customers sites,
>>>> trade shows, etc. It's the BowlingGame?. I've done this so many times
>>>> I can do it in my sleep. The funny thing about it is, though, that I
>>>> still make tiny little improvements. This doesn't happen very often
>>>> anymore, and the improvements are not significant; but they are there.
>>>
>>> Why would I waste my valuable time and brain power practicing solutions
>>> the bowling game when I just use yours :). Ditto for all the other
>>> problem
>>> areas you mention.
>>
>> To learn the technique. The solution is not the goal. The technique
>> is the goal.
>
>Yes but the "technique" of solving a problem is only put into practice
>to a significant extent the first time you do it on any given problem.
>After that there is very little "solving" going on.
There are a zillion little problems being solved in the Bowling Game.
Each step solves a few more. For example, the way the rollMany method
was extracted by first parameterizing the loop, then extracting the
method, and finally eliminating the parameters.
The first time you do the kata, you might ignore that particular
technique. It may be that you don't really recognize it *as* a
technique until the third or fourth time you do the kata.
>
>Ill concede that solving a problem already done by somon else can
>by instructive THE FIRST TIME YOU DO IT - but how many art students
>learn by copying the same piece over and over again ?.
I wonder. I would imagine quite a few.
Mike Ed
> Yes but the "technique" of solving a problem is only put into practice
> to a significant extent the first time you do it on any given problem.
...on any given problem *that can be solved only one way*.
Work on a problem that has more than one solution. (That includes most
programming problems.) Solve it one way. You may find that relatively
easy. Now the challenge: solve it again, in a different way. Reflect on
how easy (or hard) it was to come up with an alternative solution. Now
solve it a third way.
One of the first few Kata proposed by Dave "PragDave" Thomas, whose
writings contributed to inspiring the Dojo, consisted of implementing
the humble binary search... in five distinct ways.
This builds skill on many levels. At one level, you learn to consider
the trade-offs inherent in solving the problem - maybe you can use more
space and be faster, or be much more concise but require tail call
optimization, etc. You learn what languages or programming paradigms
best suit a given kind of problem.
At a higher level, you learn to systematically consider more
alternatives than the first to pop into your mind (or the first two, or
the first three, and so on).
Laurent
> By repeating and repeating these same exercises, we sharpen our
> skills, we train our bodies and our minds to respond to the disciplines
As well as taking the opportunity to thank you for the kind words,
there's one thing I should add, that your post and the ensuing thread
(while valuable to me) haven't touched on.
Take all the arguments put forward so far in favor of Kata, and add
this: in the Dojo, coding Kata (and what we call Randori) are performed
in public, in a group of your peers. (We use a video projector for that
purpose.)
This plays an important role in maximizing "return on investment", to
use Davor's terms. You get to see people code. And when you're at the
keyboard, you get to have your coding processes scrutinized by others.
This includes everything from your use of arcane Eclipse keyboard
shortcuts, to how frequently you refactor, to whether you code top-down
or bottom-up (or bass-ackwards) - all aspects of your coding style.
There's a much higher degree of self-awareness, of attention to all the
relevant aspects of the coding process, than if you were programming on
your own. Consequently, you're much more intentional about your practice
of this or that aspect of coding. If you have weaknesses in one area,
you'll be working harder to shore them up. If you have strengths, you'll
be learning to lean on them.
Laurent
Thanks,
Kevin
> In the weekly Paris meetings, how many folks show up?
Typically 5-6, not everybody is there each time - there's a group of
about 15 people who've been there at one time or another.
> Does everyone get a turn on the public display?
Yes, in the mode we call "Randori".
> Do folks work alone at the kata, or in pairs, or only as a whole group?
We only code in pairs (the group's decision - many of us are also keen
on XP; other Dojos might do different).
We work at different companies mostly, so people tend to do their
homework solo.
> (Guess I should come along sometime - only a 1-hr flight...)
You'd be very welcome. :) Or maybe there'll be an opportunity to take
the Dojo on the road again.
Cheers,
> Paul,
>
>> Yes but the "technique" of solving a problem is only put into practice
>> to a significant extent the first time you do it on any given problem.
>
> ...on any given problem *that can be solved only one way*.
>
> Work on a problem that has more than one solution.
Yes but this is where I have a problem with the kata analogy.
A kata is a specific "solution". What you describe would be more like
asking
a student to come up with different defenses against the same attack rather
that practicing a preset move.
Paul C.
> > Work on a problem that has more than one solution.
>
> Yes but this is where I have a problem with the kata analogy.
I wouldn't push the analogy beyond the point of usefulness. :)
> What you describe would be more like asking a student to come
> up with different defenses against the same attack rather that
> practicing a preset move.
That's correct. I acknowledge that this may not be suited to students at
all levels. A novice student may have to be supplied the solution, and
told to practice it as given.
The Coding Dojo is not defined solely by the Kata metaphor, nor by a
narrow interpretation of that metaphor. It is defined by a larger set of
characteristics, which include the following:
- it's a physical place
- a group of people meets there
- the meetings are on a regular schedule (weekly)
- the object is to improve our programming skills
- we expect to improve by *practicing* rather than, e.g. talking
We use the metaphors Dojo, Kata, Randori etc. as inspiration for how the
whole thing should be structured, from the large scale patterns of
organization down to the tactics of conducting exercises. When we
started out, I had a fairly precise image in mind of how things would
go. That initial conception turned out to be completely unworkable in
practice, and we had to invent new processes on the spot. The metaphors
were a valuable aid in doing that. But we don't let them get in the way.
Laurent
Attempting to speak for Robert (which will probably make him spin dizzily),
I think he *means* kata. Further, I think he means it in a way that I would
relate
to terms like 'drills', 'skill drills', and some other varieties.
One of the people I train with is fond of pointing out that athletes do
drills for training,
skill and conditioning, cops drill for the same reasons as do the military,
why wouldn't
a martial artist do the same? For the record, I employ the same concept with
project managers
that I'm either training or mentoring.
'Controlled sparring' is another step along the continuum.
--
--- Nick Malik [Microsoft]
MCSD, CFPS, Certified Scrummaster
http://blogs.msdn.com/nickmalik
Disclaimer: Opinions expressed in this forum are my own, and not
representative of my employer.
I do not answer questions on behalf of my employer. I'm just a
programmer helping programmers.
--
"Laurent Bossavit" <lau...@dontspambossavit.com> wrote in message
news:MPG.1d2f27253...@news.noos.fr...
> This is a great idea. I'd like to know more about the mechanics of this
> kind of effort. How do you prepare?
That's one of the things that changed between envisioning and realizing.
What I had in mind at first was that people would form pairs, and each
pair would work on a Kata during the weekly session.
Feedback from early sessions changed that a lot. Most of us wanted to
have one single thing to concentrate on, not N discussions going on at
once. And several wanted to be given time to prepare for an upcoming
Kata.
We settled on the following pattern: we have a set of "active" Kata that
we feel can still be improved upon (compared to the last time someone
had a go). From time to time we introduce a new one. (We also have a
backlog of aspects of coding skill that we intend to find or make up a
Kata for.) Each week, we work on one, more rarely two. We kick ideas
around for what we might do next week.
At the start of most sessions we ask "Who's prepared something ?" If one
of us has done homework on a Kata and feels ready to have a go, they ask
for a pair; the rest of us watch.
If no one has prepared anything, we do Randori, described here:
http://bossavit.com/dojo/archives/000799.html
> What kinds of things are you leading people through?
So far, things like binary searches, recursion, graph exploration,
functional style, network programming, bit masks, optimization, parsing,
combinatorics, OO design...
Early on we decided that the Dojo's first year would be exploratory,
there would be no fixed themes; the idea was to have a more specified
curriculum next year. We're planning to hold a whole-day session (normal
sessions are 2 hours) during august, for a Retrospective of the first
year and brainstorming the next year's curriculum - and processes.
> What kind advice do you have for someone to start this up on their own?
Fly me in to facilitate the first one or two. :)
Well, anyway, feel free to get in touch privately for discussion if you
have concrete plans for starting one up.
Other than that, I'd just say be a little crazy - that should help. I'd
never have thought I'd find other people interested in doing this. We
got together, tried some things, reflected on what was worthwhile and
what needed changing. That worked well enough.
Maybe some more practical advice: it's incredibly easy to get bogged
down in technical set-up and find that eating up most of the time
planned for the session. Have the IDE, the video projector, all that
stuff installed and ready beforehand.
I found that the hardest thing to do was to keep to the timeboxes. We
have two-hour sessions. My inclination would be to have 10 minutes at
the start of that for discussion, deciding what to do next, and all
that. It never takes less than half an hour. I've learned to respect
that people need that much time. At the end of the session, we're always
in full swing, and we want to keep going - it's hard to stop. But stop
we must - that Sustainable Pace thing.
Laurent
I have no objection to others creating different solutions to the
Bowling Game kata (for example). I would presume that such different
solutions would elucidate different techniques and design decisions
that would be instructive for students to drive into their brains
through drill.
Kata is a word that can also be translated as "pattern." We learn certain
patterns and continue to refine our ability to execute those patterns. In
shiai and randori (tournament and light competition), we learn to watch
for patterns and take advantage of them.
In software practice, patterns have always been important. One might suggest
that writing a for loop a hundred times is useless, writing a three-level
control
break report program many times over is a waste of time, or coding quicksort
multiple times in different languages is boring. However, the experience of
doing
this kind of thing makes it easier for us to identify new patterns, see
similarities
of form in new software designs, and frees us from having to actually think
deeply about the ordinary chores that confront us in creating new software
products.
One could think of kata as a form of software reuse where we are reusing
our knowledge of software practice rather than some pre-coded component.
So, the idea of kata (patterns or known forms) in refining our software skills
is not a bad one. From time to time it is probably useful to write quicksort
from memory, as a kata exercise, just to see if we still remember how to
do it. There are other software kata that are more challenging, represent
greater complexity, and enhance our skills even more. But perfecting our
ability with the simple kata is necessary before moving on the more
difficult kata -- just as it is in martial arts.
Good metaphor, Robert.
Richard Riehle
paul campbell schrieb:
> On Tue, 28 Jun 2005 17:16:11 -0500, Robert C. Martin
> <uncl...@objectmentor.com> wrote:
[snip]
> Ill concede that solving a problem already done by somon else can
> by instructive THE FIRST TIME YOU DO IT - but how many art students
> learn by copying the same piece over and over again ?.
No, it can be instructive every time you solve it. You can solve the
same problem in different languages, paradigms. You can vary the data
structure, the class hierarchy or in general the abstraction used.
Trying different ways to solve the same problems will deepen your
knowledge or relative pros and cons of each approach.
On the other hand, cognitive science tells us that the brain needs some
time to integrate new ideas. Therefore, you might have new insights when
you try to solve the same problem with the same general approach a
second time.
Best regards,
Jean-Marie Gaillourdet
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.5 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org
iD8DBQFDCZgJNIUNP/I5YOgRAl9JAJ4ugNPBS1YUTHwePoSoHzn9apmpjQCfQqdt
LeT802ykfAzlJxasH47u1pA=
=gSmh
-----END PGP SIGNATURE-----