TIP 4 : Know the sub-skills and practice them.
Paul Curzon, Queen Mary University of London
To learn a complex skill you need to practice, and so master, the right things a little at a time. That means you need to break it into sub-skills that you can work on separately. This is the idea behind deliberate practice too. What sub-skills have experts mastered? Practice those.
What are the sub-skills to practice to learn to program effectively? It is not just to write programs. For a novice there are a whole series of sub-skills that matter and that you can practice separately:
- Being able to explain the basic programming concepts (like variables, loops, etc).
- This matters as it is closely linked to the idea of mental representations of deliberate practice. This is building the basic mental representations.
- Being able to compare and contrast related concepts is a useful extension to this.
- Being able to read / trace simple programs and program fragments using each concept.
- Reading a program doesn’t just mean read the words but being able to work out what the program does.
- This helps ensure you have the right mental representations the skills are based on
- Being able to think logically and focus on detail
- This is actually a foundation to all the others
- Being able to debug a program. There are two completely different skills here:
- Being able to interpret compiler messages and correct compile time errors
- Being able to find and correct run-time errors.
- Being able to choose the right programming concept to do a task.
- Being able to modify a program to do something slightly different, including
- using the same constructs in a slightly different way, and
- incorporating a new programming construct into an existing program so that it has a little more functionality
- Being able to take simple problems and write simple programs that solve them using the appropriate concepts.
Bearing in mind the need to do things a little at a time, and the need to practice a lot, you should practice all these sub-skills on fairly small bits of code to start.
This does NOT mean that you shouldn’t be writing programs at all. It is in writing programs that you get the motivation to do the practice. Its also where you practice putting it all together. A tennis player still plays matches, but in between they practice serves, and hitting the ball to precise places, as well as general fitness, and so on. Similarly a programmer needs to both practice and write interesting programs.
It’s a bad idea to start on a large, complex programming project though, that may then be way beyond your current skill level. Instead master the skills for individual constructs and then build a small program gradually in to a larger project as you master each level of skill.
Once you have mastered the basic concepts and skills, then there is another level of skills to master. These are essentially what people talk about as computational thinking. There are lots of sub-skills involved (which is why academics argue a lot about what it actually is) but here is one list used:
- algorithmic thinking
- generalisation including pattern matching
Much of this is applying advanced versions of the earlier set of skills, and you certainly do need to practice more complex versions of the original set including:
- Reading real programs
- Writing more complex programs
If you are a:
- As a novice, practice all the above novice skills separately, focussing on one construct at a time.
- Exercises to trace programs are especially important to practice.
- Set exercises that practice each of the skills separately, for each programming construct.
- Exercises to trace programs are especially important to provide.