How to teach Programming Problem Solving?

The course Problem Solving using Python is based on this handbook.


  1. Learning the Model and its Phases
  2. End to End Programming Problem Solving
  3. Deliberate Practice - Each Phase in the Model Separately
  4. Teaching Methods
    1. Worked Example - Peer Instruction, Prompting for Predictions
    2. Sub-goal Labeling
    3. Walkthrough - Written and Think-aloud
  5. Physically Manifest the Model
  6. Develop a program that:
    1. Solve programming problems
    2. Preform each one of the phases in the model

Novice vs. Expert

  • Tactic knowledge
  • Prerequisites
  • Rapid Design-Code-Test-Debug cycles (incremental development)
  • Well done design already in the beginning
  • Design and code in bigger chunks
  • Roles of Variables, Code Patterns, Exceptions


  1. Computer competencies (e.g., file system structure, using the command line, IDEs)
  2. Proficiency in the programming language
    1. Syntax ans semantics
    2. Code pattern (related to basic design)
    3. Idiomatic language
    4. Interactive programming (help, type, dir)
  3. Notional machine = "A set of abstractions that define the structure and behavior of a computational device. A notional machine includes a grammar and a vocabulary, and is specific to a programming paradigm. It’s consistent and predictive — given a notional machine and a program to run on that machine, we should be able to define the result. The abstract machine of a compiler is a possible notional machine." - Mark Guzdial
  4. EXTRA: Code Phonology - How does code sound?

Teaching Programming Resources

Copyright © 2020 Shlomi Hod.
All rights reserved.

results matching ""

    No results matching ""