Alice and CP4E

01/10/2001

When it comes to computer programming for everybody (CP4E), there
are two possible interpretations. Is it computer programming made
accessible to everybody, including non-programmers, or is it an an
initiative to make everyone to some extent a programmer? A recent
discussion of Alice on the educational special
interest group (edu-sig) got me thinking about these two
interpretations.

The Stage 3 research group at Carnegie Mellon University built Alice, a 3D interactive programming
environment. Using Alice's GUI tools and some simple Python
scripting to move images around a screen, you can create a 3D story.
At IPC8, Alice developer Randy Pausch described it as "3D Logo on
steroids." Logo is a project most commonly associated with using
scripting to move a turtle around a screen. To be fair, the
Logo Foundation sees Logo as more than moving turtles. They
think of it as an educational philosophy first, and as a family of
programming languages second.

Alice is neither a educational philosophy, nor a particular
programming language. I wouldn't even call it science. You could
think of it more as a study. Could they take complex 3D tools and
put them in the hands of college undergraduates with no programming
experience, thus breaking the barrier between artists and 3D
programming tools? They chose Python as a basic scripting language,
and then went about creating a simple application programming
interface (API) that non-programmers would understand. They
introduced basic programming concepts, but didn't require or even
expect the learners to become programmers. They succeeded in
creating a tool that your average 10-year-old could learn and use.
They also felt they learned a few things in the process. Matt
Conway, a former member of the Alice project, sums up some of their
discoveries in his dissertation, Alice:
Easy to Learn 3D Scripting for Novices.

The Alice project explored the question, "How do you make
programming available to non-programmers." This is the first
interpretation of computer programming for everybody I gave above.
Following this vision, all computer tools might someday provide
programming interfaces designed for non-programmers.

The alternative approach to CP4E I gave is, "How do we teach
everyone to program?" These two questions generate different
answers which are sometimes at cross purposes. To make programming
accessible to non-programmers you have to hide detail. To open
people to learning programming, you want to expose detail, or at
least make it possible for them to pop the hood and take a closer
look inside. This is more the approach Art Siegel takes with PyGeo, an
interactive 3D geometry tool. He doesn't hide the math or the
programming, he gives the math expression. Similarly, Kirby
Urner's curriculum material does not dumb down the programming.
He uses it straight up to explore numerical literacy.

The answer to the first question need not be educational. There
is nothing inherently educational about Alice. The second
question, "How do we teach everybody to program," is essentially
educational. I think the two approaches to CP4E have led to many
divergent interests on the edu-sig group. It has led to arguments
as well. Both on and off the list there has been debate over whether
to move to even simpler languages than Python, whether it is better
to work on the programming tools or the programming curriculum,
whether Alice represents a dumbing down of programming that is
counterproductive to people learning programming in the long run,
and whether teaching everybody to be a programmer is pretentious in
the first place.

Though they may provide different answers and sometimes lead to
debate, the two approaches to CP4E can also support each other.
Simpler tools can play a role in education similar to the role that
simpler books have in learning to read. Learners are not expected to
stay with the simple; they are encouraged to tackle more difficult
material. Coupled with the same kind of expectation of growth and
encouragement early readers receive, projects like Alice make
interesting entry points into learning programming. Useful
programming tools for non-programmers can be like first readers
while whetting the student's appetite to learn more.