Kodu Curriculum: Rationale and Design Goals

David S. Touretzky

Introduction

Two fundamental ideas underlie computational thinking: state machines and structured representations. The difference between programmers and non-programmers, or those who think computationally and those who don't, is the effective internalization of these two concepts. In designing a computing curriculum for children, the first goal should be to get them to understand state machines. Structured representations, and the algorithms that operate on them, will follow.

State and State Machines

State machines occur throughout computer science: from digital logic design and networking protocols, to automata theory, to robot programming. They are the model for most of the technology of modern living: elevators, traffic lights, microwave ovens, computers, and mobile phones. Recognizing digital devices as state machines gives a child a conceptual framework for understanding technology that will be with them for the rest of their life. It is the computational equivalent of learning to read.

The essential principles can be summarized as follows:

  • A program (or agent, or character) has a finite collection of states it can be in.
  • At any time it is in exactly one of these states.
  • The current state determines which rules apply.
  • Rules determine what the next state will be.
Conventional language such as C, Java, or Python offer no direct support for state machines. Neither do Scratch or Alice, which are essentially Java with a drag-and-drop GUI interface. Programmers are left having to roll their own state machines using some combination of global variables, switch statements, and similar machinery. Low-level state (program counter) vs. high level state (problem states). Kodu provides direct support for problem states as pages. To provide a compelling experience for children, state machines can't be studied as purely theoretical constructs. They need to do something interesting. In Kodu, they do. Programming language constructs like conditionals and while loops are abstractions of more basic state machine structures. And they're very useful for suppressing detail at the program counter level. But they're not fundamental, and focusing on them too early will divert the child's attention from the truly fundamental concepts.

Idioms


Dave Touretzky
Last modified: Tue Apr 28 03:07:26 EDT 2015