We can learn a lot from doing the same thing again attentively.
Why do I do the same thing again? Because I can learn a lot more. If you have a second chance of doing the same thing, you have the chance to do it better than before. Moreover, you can see your first experience somewhat objectively out of the "tunnel." You know why you didn't do it well or do it well that time, and how you can do it better next time. You can get the power of solving all the similar problems of the kind.
One of the key point I learned from my teaching experiences was "the same problem differently approached several times". One of my recent seminar went on like this:
- students solve the problem in their way as solo.
- a few students show their process and the solution in front of the other students.
- I show my way of solving it with my protocol. like...: "Hm... I'm carefully reading the problem statement. Now I feel like this problem could be somewhat complexed. I'll think about my plan solving this problem. ........ Oops. I missed class A should get connected to class B....."
- students solve the same problem again as pair
- let them compare their designs -- group discussion
- give them somewhat different but still the same kind of problem and let them solve as solo
Every student in the class has solved the same problem at least three times and watched others' process of solving it several times when the class ends. (I don't say which one is "absolutely right" or best. I encourage them to evaluate and compare themselves. I let them experience the quality of their own design - as I later modify the problem requirement, for example.)
A friend of mine told his friend about this. And he tried programming a problem about 7 times in a week. He had never known why OOP is good though he'd been programming in one of the most popular OOP languages for years; he'd been programming in seemingly-OOP-but-actually-procedural-way. And he's now a different person after just a week. His code is now different. It looks something like a good SmalltalkLanguage
code. He'd done procedural-with-OO-syntax programming for years but just one week of doing over changed his way of programming. I suspect this wouldn't have happened if he'd worked on seven different problems.
On doing the same thing over and over again:
- In my own experience of designing difficult algorithms, I find a certain technique most helpful in expanding my own capabilities. After solving a challenging problem, I solve it again from scratch, retracing only the insight of the earlier solution. I repeat this until the solution is as clear and direct as I can hope for. Then I look for a general rule for attacking similar problems, that would have led me to approach the given problem in the most efficient way the first time. Often, such a rule is of permanent value. ...... The rules of Fortran can be learned within a few hours; the associated paradigms take much longer, both to learn and to unlearn. -- Robert W. Floyd from The Paradigms of Programming, 1978, TuringAward lecture
- Even fairly good students, when they have obtained the solution of the problem and written down neatly the argument, shut their books and look for something else. Doing so, they miss an important and instructive phase of the work. ... A good teacher should understand and impress on his students the view that no problem whatever is completely exhausted. -- GeorgePolya? from HowToSolveIt
I, as a teacher too, learn a lot from doing the same thing again. Though I say doing "the same thing again", what I actually experience is very different each time, no matter how many times I redo it. Actually, I learn more as I do it again more.
Try solving a problem for ten times, attentively. Your solution might differ slightly each time. You might learn something each time though you are doing it over and over. After ten times of doing it again, you might experience a very zen-like enlightenment, or at least a whole lot of learning, as I did.
I believe that KentBeck
has done the Money example more than a dozen of times and he's learned quite a lot from it.