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. Deliberate Practice
    1. End to End Programming Problem Solving
    2. Each Phase in the Model Separately
  3. Teaching Techniques
    1. Worked Example - Peer Instruction, Prompting for Predictions
    2. Subgoal Labeling
    3. Walkthrough - Written and Think-aloud
  4. Physically Manifest the Model
  5. Develop a program that:
    1. Solve programming problems
    2. Preform each one of the phases in the model

Novice vs. Expert

  • Tactic knowledge
  • Rapid Design-Code-Test-Debug cycles (incremental development)
  • Design and code in bigger chunks
  • Well done design already in the beginning

Tactic Knowledge

  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.
  4. Code Phonology - How does code sound?
  5. Epistemic beliefs = Person's beliefs about the nature of human knowledge, like its certainty and how it is conceptualized, and a person's beliefs about the criteria for and the process of knowing. (Oxford Bibliographies)

Copyright © 2019 Shlomi Hod.
All rights reserved.

results matching ""

    No results matching ""