Finally, students use inheritance to modify and extend the
behavior of Swampy itself.

This progression is intended to break down the barrier between
users and programmers, and demonstrate a wide range of programming
activities.

Parts of Swampy seem pretty bare-bones. Why doesn't it
have more of the features I expect in a programming environment?

Because one of the best ways to learn to program is by reading code,
so Swampy is designed to be read. For example, in many places the
program is written using only the features students have already seen.

Swampy is intended to demonstrate a variety of
patterns in object-oriented design. In most cases it demonstrates
what I think is good design, but there are a few weaknesses I
use as case studies.

Swampy is reflexive; that is, it can be used to study itself.
Lumpy generates UML diagrams that help students understand the
structure of Swampy, including Lumpy!