Re: Repetition = practice
"And finally the whole programming thing: if people did not learn by practice and repetition then they would not need a computer: they could just read the description of the programming language and that would be enough. And they would also never get better: you'd teach them how to program (from a book) at which point they would be the best programmers they could ever be."
That's not really what I argued. In fact, it's close to the opposite of what I've argued. When you learn programming, there's relatively little repetition. Once you learn what a function is and how to make a recursive one, you don't need to learn it again. You do need to use it. The people who most espouse repetition will do that by making people write twenty recursive functions, but that's not really efficient. Instead, have them write a few recursive functions until they understand what recursion means. Then give them actual problems where recursion can solve the problem and see how they deal with it. It's sort of repetitive in the sense that they're using things they learned before, but it's new tasks which don't take the form of a litany of exercises. This is better than the exercise method because it makes the student think through the solution, whereas exercises already tell them what the solution will be and they just have to do implementation steps. Those teachers who use repetition in a way I dislike tend to focus on basic things and force a "really firm understanding" of those things. Unfortunately, in my experience, that translates as a "really good understanding of how to answer the test question". It results in people using similar code to things they've seen before without understanding why they're doing it; it worked before, so it will work here, and it probably does, but that's because the problem they're working on is limited and performance isn't critical.
Practice isn't repetition and repetition isn't practice. You can repeat an action and memorize results without getting better at it if you're repeating something which doesn't require enough lateral thinking. You can practice by doing a lot of different things, therefore understanding multiple options for completing a task, which involves doing a similar thing but relatively little repetition.