Saturday, December 04, 2004

Teaching computer programming

In 1981, Richard Pattis wrote a delightful little book titled Karel the Robot, a Gentle Introduction to the Art of Programming. In this book, Pattis introduces the main concepts of sequential programming (including loops and decisions, but not variable assignments) using the paradigm of instructing a robot capable of only four basic actions (turning left, moving one step forward, picking up and putting down beepers). Through the "magic" of programming, the robot "learns" to combine those four basic actions in order to accomplish tasks of increasing complexity. Pattis used Pascal, the preferred language of the day, as a means of "teaching" the robot new tricks. Since then, many new versions of Karel the Robot have surfaced, used to introduce students to various computer languages, with a preference for Java and C++, which are both based on the modern Object-oriented programming (OOP) approach.

However, the complexity of Java and C++ contrasts with the simplicity of the robot world; both these languages seem at odds with the idea of providing a Gentle Introduction to the Art of Programming.

Enter Python... Python, like Java and C++, is an OOP language. However Python also allows a non-OOP programming style which is more suitable for interacting with Pattis's robot. A first implementation of Karel the Robot in Python was called PyKarel. The current implementation is called Guido van Robot (GvR for short), and is available at

I am currently working on a "new and improved" version of GvR which extends Pattis's ideas and allow a smooth transition to the use of variables as well as functions/methods and objects. This version, like all Python-based versions of Karel the Robot, will be made available for free to all those interested.

I have been pondering, for over a month, what to call my new version. Pattis's Karel the Robot was named after the author Karel Capek, who popularized the word robot in his play Rossum's Universal Robots. The computer language Python, was named after the famous Monty Python's Flying Circus by its creator, Guido van Rossum. I find it difficult to think of a better name than Guido van Robot to name a programming environment in which one uses Python to teach a robot new tricks!

Any suggestion would be welcome.


Anonymous said...

I was trying remember that title when preparing to teach an intro to programming class last year. That was a great way to be introduced to programming and what seemed like such an abstract and arbitrary world. I am looking forward to GvR, my next intro class, and helping to test!

Anonymous said...

I'm sorry, there _is_ no better name than "Guido van Robot". I laughed until I stopped.

How about GvR 3000?

André said...

For some reason, the folks at PythonWare have publicised this "old" post of mine. Since then, I have settled for a name for my program: It is RUR: a Python Learning Environment, or RUR [-PLE] for short.

Pattis's Karel the Robot was named after the author Karel Capek, who popularized the word robot in his play Rossum's Universal Robots (RUR). While RUR-PLE shares the basic RUR acronym, in this case it stands for Roberge's Used Robot. However, through the magic of Rossum's Python, you can learn how to fix it and design a better one, worthy of the name Rossum's Universal Robot.

Not quite GvR-3000 but I'm happy with it :-)

Ian Bicking said...

I've never been clear what the place is for KtR compared to Logo, which has many of the same features and goals in a much more accessible, general language.

André said...
This comment has been removed by a blog administrator.
Rich Patts said...

I was well aware of the Logo language (both the turtle and list processing parts) when I wrote Karel (and I acknowleged Papert explicitly in the introduction). I wanted something with a floor and a ceiling (to contrast the Logo philosophy), with a Pascal-like syntax, because that was the dominant language taught in college, and the one I taught after Karel. A more interesting issue is making Karel's world discrete, and allowing "him" to sense and manipulate objects in it. As a result, I was able to pose problems by specifying initial and final states (or schemas); Logo (at least the robot part) was designed much more for exploratory, self-directed programming, which college students sometimes lack.

Anonymous said...
This comment has been removed by a blog administrator.