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
|