Paul Curzon, Queen Mary University of London
Here is the next in our series of tips about learning to learn (to program).
TIP 3: Master skills a small step at a time
Working hard, putting in the time and effort is important … but it is NOT enough. You could jog every day for years and NOT get any faster or be able to run ever further. Similarly, you could spend hours trying to write programs but not get any better. It isn’t just putting in the hours. You have to put in the right kind of hours.
You need to do the right kind of practice. The ideas behind deliberate practice suggest you should aim to master skills a small step at a time – but make sure you do master them before moving on.
(Sometimes you also need help to correct misunderstandings or just help you understand something critical. We will look in more detail at that in a later tip.)
Hours of jogging won’t improve your speed because you are not stretching yourself. Switch to interval training where you run as fast as you can for a short distance and then recover for a short time, then do that again and again and again. Each session you are pushing yourself to your current limit… and you will improve. You are pushing your muscles and your brain just beyond what they can comfortably do at the moment. That’s the secret to improving.
Programming is the same. If you just spend hour after hour writing similar programs that you already know how to do, and never anything new, then again you won’t improve even if you do it for 10,000 hours. You need to practice what you are already capable of, but also push yourself to the things that you just can’t comfortably do (yet), programs you can’t comfortably write (yet). However this comes with a big BUT!
Don’t push too far beyond what you can do to quickly or you will just get hopelessly stuck and dispirited (the equivalent of collapsing on a run when you are a long way from home).
This is a mistake many students learning to program make. They are so keen to learn, that having written a program that works, they rush straight on to the next concept. They are trying new things before they have actually mastered the current ones. You do need to write lots of programs with the simpler concepts to master them. If you move on too quickly you will start to struggle as you get more and more out of your depth, and the practice you do will be less and less effective.
There is no point trying to write programs that use while loops if you have not mastered the simpler if statements and so understand boolean expressions. And don’t move on to boolean expressions before you have mastered simple integer expressions and variables…
If you are told to try harder, don’t. Instead try smarter. That might mean stepping back to something simpler and make sure you have mastered it.
We will look in more detail what the right kind of practice is in future tips.
If you are a:
- Practice lots, but master simple things before you move on to harder ones.
- Do push just out of your comfort zone in your practice once you have mastered something.
- Identify something just beyond what you can currently do and practice that until you can do it easily. Only then move on to the next thing.
- Don’t think that doing it once means you have mastered it!
- Set activities that gradually increase in difficulty with lots of exercises to practice at each stage.
- Identify a progression in concepts to introduce.
- Don’t let students rush on to writing ever more difficult programs to write before they have fully mastered the concepts in the previous ones.