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:

  1. Presenting worked-out examples in lecture
  2. Providing partially worked programs for lab exercise
  3. 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?

  • $\begingroup$ I doubt this is specific to adult-education actually. $\endgroup$
    – Buffy
    Commented Aug 30, 2017 at 18:35

2 Answers 2


I think you have left out two essential elements here. Your first two points leave the students passive consumers. The last is about testing. But there is no guarantee of any learning in between.

In some ways, the two most important pedagogical ideas are

  • Active Student

  • Constant Feedback

You need to ask your students to create things and you need to give them individual feedback on how they did. The fraction of students who learn by listening to lecture is actually quite small. Taking notes (by hand) makes them more active, but using the face-to-face time to work with them in artifact creation is much-much better.

But students are unlikely to get everything right the first time and each student will need individual direction, whether they are struggling or excelling.

Note that teamwork is an attempt to combine these two things. The team creates something and give each other feedback as they go along.

My constant mantra while teaching was "It isn't important what I (the teacher) do. It is only important what you (the student) do." Focus on their activities, not yours. Perfect their exercises, not your lectures.

I'm not sure how relevant this is to CS, but one of the most important and memorable courses I had in my first year of college was a writing course. The prof never talked about the process of writing, but pointed us to a lot of good writing. However, the crux of the course was that we wrote a theme for every class (3 per week). We spent quite a lot of the time in class reading these aloud and getting feedback. His particular trick was to pick out the best ones in his judgement for review, not the ones that needed the most work. We also got detailed feedback in writing. No lecture at all. Lots of activity, lots of feedback. He did his job.

  • $\begingroup$ I love the last paragraph. I feel like I will be a better teacher because of it. @nocomprende I think that buffy is not saying that the teacher therefore does nothing, the teacher is a conductor. Everything the teacher does should be to perfect the students doing. $\endgroup$ Commented Aug 30, 2017 at 18:57
  • $\begingroup$ Well, not the last paragraph any more, since I updated to answer the OPs concerns. But thanks. $\endgroup$
    – Buffy
    Commented Aug 30, 2017 at 18:59
  • $\begingroup$ @nocomprende yes, but the only ones the instructor can control are the ones that the instructor controls. $\endgroup$ Commented Aug 30, 2017 at 20:36

As well as what you have already mentioned: Provide working code, and have them modify it (top down as opposed to bottom up). I also see an opportunity to reduce time between students actions and receiving feedback.

Automated feedback

(this is not a substitute for teacher or peer feedback)

Use a visual language, such as scratch or snap. This reduces cognitive load as pupils can see the possibilities, they just have to drag them in. (Note: Visual basic is not a visual language.)

Create a program with visual output, such as python turtle, or scratch/snap. This way they can see what the effect of there change is. This can be augmented (kinaesthetic) by having pupils be the turtle, or the instructor. The instructor gives instruction in the form of the language, the turtle follows the instruction. A third pupil can be a scribe and write down the instructions.

For textual languages: The teacher as well as providing started code, can also provide unit test. Pupils run the tests and see traffic-lights on the dashboard, all red at first. They then work on each light it turn, to get it to turn green. There will be clear instructions of what each function should do. There may also be some other output that builds up, as they get each test to pass. Must languages have unit test frameworks (pyunit (python), junit (java), nunit (.net), xunit).

  • $\begingroup$ Yes, I wish to do more of this somehow. One of the more popular assignments is the old "create shapes on the screen with print statements" thing. Lots of immediate feedback there. $\endgroup$
    – user737
    Commented Aug 30, 2017 at 18:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.