Literature states that there are particularly difficult issues with introducing programming, and that many of the issues are still not well understood. But some results indicate that these are some effective methods:
- Presenting worked-out examples in lecture
- Providing partially worked programs for lab exercise
- Asking for an explanation of a complete example in tests
These methods reduce cognitive load, so that the students can focus on the relevant ('germane') details while learning or demonstrating proficiency. Other details and distractions cause 'noise' which make the cognitive load too high. Another factor is that methods that work for beginners are inappropriate or hindering to more advanced students, and in a classroom with varying abilities it can become difficult to structure material or present it properly.
Perhaps the biggest variation is in student's predispositions towards problems solving. This quote points to a major obstacle to most programming learning:
A weakness of worked-out examples is that they may not engage the learner enough to induce germane load. The effectiveness of the examples is negated if the learner does not study them attentively and explain the given solution to themselves. The literature suggests that many learners are not naturally inclined towards effective spontaneous self-explanation of worked-out examples.
Self-explanation is a skill or tendency which is thinly distributed in the population. Can it be promoted somehow?
What methods have you found most effective with beginner programming students for showing new material and having students practice it?