Where should program construction take place?

This may seem like a strange question. Some people construct programs on paper and then enter them into a computer. Some people type their programs into their favorite text editor. Other's use editors specialized for the programming language. Some programming languages support program construction from within the programming environment. A recent trend here is to use composable tiles representing program fragments as in Etoys and Alice.

ToonTalk is unique in that program construction takes place from within a game-like virtual world. It takes place not by supporting the editing of textual or pictorial programs from within a virtual world but instead by taking direct "everyday" actions in this world. The ToonTalk world is cute and playful and popular with pre-teens but it isn't a place where people spend much time for purposes other than constructing, debugging, and running ToonTalk programs. Some children spend many hours decorating houses, filling notebooks with artwork, playing with text-to-speech engines, and doing mathematical explorations with ToonTalk's exact rational arithmetic. But "being there" is rarely the main purpose of visiting the ToonTalk world.

Lately I have been thinking quite a lot about how persistent shared on-line virtual worlds fit into the big picture. Second Life is a nice example of such a place where the "residents" have built a great variety of places and things in this world. Croquet has a similar vision. About ten million people regularly visit such places [here is a great source of statistics about such places]. People visit these places primarily for entertainment and social reasons but there are some more "serious" activities.

What if one could construct programs from within these worlds in a manner similar to ToonTalk programming? It could be done in a way that is quite similar to how ToonTalk currently works. But with these differences:

  1. 3D. ToonTalk uses sprite animation and 2 1/2D graphics to provide a virtual world. This simplifies but limits things. 3D enables the explorations of many topics in science and mathematics. And enables the programming of very popular classes of games. The challenge is to make a 3D world that can be programmed by all.
  2. Realistic physics. Many virtual worlds today have "physics engines" that support collisions, gravity, friction, rigid body motion (with joints), and more. It is not reasonable to expect such physics engines to be built by children. But they can be customized and parameterized by all. A programmable world with a built-in physics engine enables many explorations in sciences (e.g. sports science or mechanics). And again opens up a whole new class of games that children can create.
  3. Virtual communities. Inhabitants of a shared on-line virtual world can provide help to each other in ways that are currently feasible only in face-to-face encounters. One can meet and build things together. Someone half way around the world can help others build and debug a program by being in the same place, manipulating the same objects, conversing the whole time. People can collaborate in ways that are currently much more awkward using web sites, email, and the like.
  4. Living with your creations. One is more motivated to build things that work in the place where one spends one's time. If people are inhabiting these spaces for reasons other than programming, then programming becomes a tool for enhancing their "living space". Their creations are things they can enjoy while they are in a virtual world for social or entertainment reasons, rather than objects that exist only when they are in some programming system. Examples include virtual pets, useful gadgets, kinetic sculptures, and long-lasting simulations.

home | search | purchase | manual | news | info | games | faq | support | downloads | endorsements | press | contact us