ToonTalk(ID:5762/too003)


Visual programming environment for concurrent programming, decigned for children


People:
Related languages
Pictorial Janus => ToonTalk   Evolution of
ToonTalk => ToonTalk 2   Evolution of

References:
  • Kahn, Kenneth M. "Concurrent Constraint Programs to Parse and Animate Pictures of Concurrent Constraint Programs" pp943-950 view details
          in ICOT Staff (Eds.): Fifth Generation Computer Systems '92: Proceedings of the International Conference on Fifth Generation Computer Systems. 1992, June 1-5, Tokyo, Japan. 1262p, IOS Press 1992 view details
  • Kahn, Ken "Metaphor Design - Case Study of An Animated Programming Environment" view details Abstract: There are many examples of bad use of metaphors in interfaces, for example, requiring users to put an icon for the floppy drive into the trash can icon to eject a floppy on a Macintosh. Good designs should use metaphors predictably and consistently; for entertainment software the metaphor elements should also be fun.

    I discuss the history and rationale of the metaphor design of my ToonTalk system -- an animated programming environment for kids. For example, I needed to provide the user with the ability to copy, remove, restore, grow and shrink items. The first design used three different colored magic wands. The wands were further distinguished by displaying an abstract animation of their function. Preliminary informal user'studies showed that this scheme was non-obvious and users got the wands confused despite the animation. Because of this I replaced the size changing wand with a bike pump and the removing and restoring wand by a hand-held vacuum. Other examples of ToonTalk metaphors discussed are the use of carrier pigeons for communication, cities on the back of pictures for sprite programming, and a mouse with a big hammer for arithmetic. External link: Online copy
          in Proc. Computer Game Developers Conf., Apr 1995 view details
  • Kahn, Kenneth M. "ToonTalk - An Animated Programming Environment for Children" view details Abstract: Seymour Papert once described the design of the Logo programming language as taking the best ideas in computer science about programming language design and "child engineering" them. Twenty-five years after Logo's birth, there has been tremendous progress in programming language research and in computer-human interfaces. Programming languages exist now that are very expressive and mathematically very elegant and yet are difficult to learn and master. We believe the time is now ripe to attempt to repeat the success of the designers of Logo by child engineering one of these modern languages.

    When Logo was first built, a critical aspect was taking the computational constructs of the Lisp programming language and designing a child friendly syntax for them. Lisp's "CAR" was replaced by "FIRST", "DEFUN" by "TO", parentheses were eliminated, and so on. Today there are totally visual languages in which programs exist as pictures and not as text. We believe this is a step in the right direction, but even better than visual programs are animated programs. Animation is much better suited for dealing with the dynamics of computer programs than static icons or diagrams. While there has been substantial progress in graphical user interfaces in the last twenty-five years, we chose to look not primarily at the desktop metaphor for ideas but instead at video games. Video games are typically more direct, more concrete, and easier to learn than other software. And more fun too.

    We have constructed a general-purpose concurrent programming system, ToonTalk, in which the source code is animated and the programming environment is a video game. Every abstract computational aspect is mapped into a concrete metaphor. For example, a computation is a city, an active object or agent is a house, birds carry messages between houses, a method or clause is a robot trained by the user and so on. The programmer controls a "programmer persona" in this video world to construct, run, debug and modify programs. We believe that ToonTalk is especially well suited for giving children the opportunity to build real programs in a manner that is easy to learn and fun to do.
    External link: Online copy
          in Proceedings of the National Educational Computing Conference (NECC'95). view details
  • Kahn, Kenneth M. "ToonTalk - Concurrent Constraint Programming for Kids" p3 view details
          in Sterling, Leon (Ed.): Logic Programming, Proceedings of the Twelfth International Conference on Logic Programming, June 13-16, 1995, Tokyo, Japan. MIT Press 1995 view details
  • Kahn, Ken "Seeing Systolic Computations in a Video Game World" view details Abstract: ToonTalk is a general-purpose concurrent programming system in which the source code is animated and the programming environment is like a video game. Every abstract computational aspect is mapped into a concrete metaphor. For example, a computation is a city, an active object or agent is a house, inter-process communication represented by birds carrying messages between houses, a method or clause is a robot trained by the user and so on. The programmer controls a "programmer persona" in this video world to construct, run, observe, debug, and modify programs.

    ToonTalk has been described in detail elsewhere. Here we show how systolic programs can be constructed and animated in ToonTalk. Systolic computations run on multiple processors connected in a regular topology, where all communication is via local message passing. A ToonTalk city can be seen as a systolic multi-processor and each house in the city as an active processor. One is able to construct systolic algorithms and watch their execution as houses are built and destroyed (i.e., processes are spawned and terminate) and birds carry messages between houses.

          in Proceedings of the IEEE Symposium on Visual Languages (VL), 1996 view details
  • Kahn, Kenneth M. "Drawings on Napkins, Video-Game Animation, and Other Ways to Program Computers: Programming can be as easy as child's play" pp49-59 view details Abstract: Various radical syntaxes for programs are feasible and offer many advantages over the state of the art. Programs, for example, can be defined by the topology of sketches, even hand-drawn scanned sketches. A programming environment can parse these sketches and generate animations of the drawings evolving as the program executes. Or programs can be defined by manipulating physical objects, e.g., by connecting blocks together or inserting plastic cards into slots. We are currently building a system called ToonTalk in which programs are created, run and debugged in a manner that closely resembles playing a video game. In the near future we may see programming systems that exist only in virtual reality or ones that interpret gestures in the real world.

    Program sources need not be static collections of text or even text and pictures, but can be animated, tactile, enhanced with sound effects, and physical.
    External link: Online copy
          in [ACM] CACM 39(08) 1996 view details
  • Kahn, Kenneth M. "ToonTalk - An Animated Programming Environment for Children" pp197-217 view details
          in Journal of Visual Languages and Computing 7(2) 1996 view details
  • Kahn, Ken "Helping Children to Learn Hard Things: Computer Programming with Familiar Objects and Actions" view details Abstract: Some children, when introduced to something new and complex, will jump in and explore because they enjoy exploration and are good at it. Others are much more timid and will explore only if coached or guided. Others ask for instructions and follow them meticulously. Some children will carefully watch a demonstration, while others are impatient to try things themselves.

    It is possible that there is a style of learning that dominates others in effectiveness and appeal. The position taken here, however, is that children differ, and that all these learning styles have their place. Even an individual child may switch styles as circumstances and experiences change.

    Given the wide variety of ways that children learn, how should we design software for children? This chapter attempts to answer this question by looking closely at our experiences with the design and testing of ToonTalkä .

    ToonTalk (Kahn 1996, 1998) is an animated world where children build and run programs by performing actions upon concrete objects. The child builds real computer programs by doing things like giving messages to birds, training robots to work on boxes, loading up trucks, and using animated tools to copy, remove, and stretch items.

    ToonTalk has been tested with 4th grade classes for the last 3 years. Initially, it supported only an exploratory learning style. Some children quickly began exploring and tried to figure out what each item does and how to combine them. Most, however, asked for guidance. This led to the development of enhancements of ToonTalk that cater to children with different learning styles. ToonTalk now includes a puzzle game that plays the role of a tutorial. This appeals most strongly to children who tend to like to solve problems but are less comfortable exploring on their own. An animated character named Marty was added to ToonTalk that acts like a coach or guide in ToonTalk. Some children like to hear suggestions from him and follow them. Others quickly send Marty away because they find him annoying. A set of narrated demos of ToonTalk was created for those who like to sit and passively be shown how to make things. Illustrated instructions on how to build some programs were produced. These too appeal to a subset of the children.

    Children of different ages, experiences, and learning styles approach the same software in very different ways. The main lesson we can take away from this experience is that children differ in the degree to which they are motivated and effective at exploring (on their own or with an animated guide), or following instructions, or solving a puzzle sequence. Even the same child will prefer different styles of interaction depending upon her prior experience with the software. Ideally, a software program should be designed so that a wide variety of children might enjoy and benefit from it.

          in Druin, Alison (ed) The Design of Children's Technology, Morgan Kaufmann, 1998 view details
  • Kahn, Ken "A Computer Game to Teach Programming" view details Abstract: ToonTalk™ is an animated interactive world inside of which one can construct a very large range of computer programs. These programs are not constructed by typing text or arranging icons but by taking actions in this world. Robots can be trained, birds can be given messages to deliver, and so on. ToonTalk has been described at NECC95 [Kah95] as well as [Kah96a and Kah96b].

    This paper describes the design and preliminary testing of an interactive puzzle game that functions as a ToonTalk tutorial. Children are presented with a series of interactive puzzles in a game-like narrative context. The puzzles gradually introduce programming constructs and techniques. Each puzzle presents the player with a very limited selection of ToonTalk objects. Even some very young children are able to solve the puzzles because the search space is so strongly constrained. And yet players do not behave as if the puzzles are too easy – the children are clearly challenged. The sequence of puzzles is carefully designed to gradually introduce new concepts one at a time. Testing has shown that both children and adults enjoy the puzzles and have learned some sophisticated programming skills.
    External link: Online copy
          in Proceedings of the National Educational Computing Conference June 1999 view details
  • Kahn, Kenneth M. "From Prolog and Zelta to ToonTalk" pp67-78 view details Abstract:     ToonTalk looks like a video game. This is not surprising since its design and user interface were strongly influenced by games like The Legend of Zelda: A Link to the Past and Robot Odyssey. What may be more surprising is that ToonTalk is a programming language and environment based upon ideas that have evolved from Prolog over a period of nearly twenty years.
        ToonTalk is a synthesis of ideas from concurrent constraint programming, video games, and programming languages for children. In the spirit of Logo, ToonTalk is an attempt to take the best ideas in computer science and make them accessible to children. When Logo was designed over thirty years ago, the best programming language ideas could be found in the Lisp language. The design of ToonTalk is based upon the belief that the best programming language ideas can be found in concurrent logic programming and concurrent constraint programming languages like Janus, Linear Janus, FGHC, Vulcan, DOC, AKL, and Oz. These languages, in turn, borrow heavily from earlier languages like Concurrent Prolog and Parlog that in turn grew out of research on Prolog.
        While these languages have many desirable aspects - they are powerful, elegant, theoretically well grounded, and expressive - they are not generally considered easy to learn. If it takes substantial time and effort for computer scientists to understand one of these languages, then how can one hope to make the underlying ideas accessible to young school children?
    An answer lies with video games. Many of these games present a large and complex world with many kinds of objects and possible actions. And yet, children as young as 4 years old learn to master these game worlds without help. The fundamental idea underlying ToonTalk is that a game world can be created in which the objects and actions map directly onto programming language constructs. In ToonTalk, a clause becomes a robot, a term or tuple becomes a box, a number becomes a pad, and so on. The act of putting a box and a team of robots into a truck becomes a way of expressing a process spawn or procedure call. The act of dropping a number pad on another number pad becomes a way of expressing an arithmetic operation. And so on. External link: Online copy
          in ICLP 1999 view details
  • Kahn, Kenneth "Generalizing by Removing Detail: How Any Program Can Be Created by Working with Examples" view details Abstract: A long-standing goal of the programming by demonstration research community is to enable people to construct programs by showing how the desired programs should work on sample inputs. A major challenge is how to make the programs general. Heuristics and inference can generalize recorded actions on sample data in narrow domains but have yet to be much help in general purpose programming. This paper describes a programming system called ToonTalk® [Kahn 96, Kahn 00] that takes a different approach. In ToonTalk the programmer generalizes recorded actions by explicitly removing details. Children as young as 6 have constructed a wide variety of programs in this manner [Playground 00].

    There is a very important interplay between the way in which programs are created and generalized in ToonTalk and the underlying model of computation. A program is executed as a collection of autonomous processes that communicate asynchronously where the behavior of a process is specified by a set of guarded clauses. A clause is constructed by performing operations on a single sample data structure. To make the clause capable of operating on other data structures, the programmer needs only to remove details from the guard or conditional part of the clause.

    ToonTalk is built upon the idea of animated programming. Animated programs are not constructed by typing text or by constructing diagrams or stringing icons together. Instead, the programmer is placed as a character in an animated virtual world where programming abstractions are replaced by tangible analogs. A data structure, for example, is a box whose holes can be filled with number or text pads, other boxes, birds, nests, and robots. Birds and nests are concrete analogs of send and receive capabilities on communication channels. A robot is a guarded clause that has been trained by the programmer to take actions when given a box. The thought bubble of a robot displays the guard or conditions that need to be satisfied before the robot will run. To generalize a robot, a programmer needs only to use an animated vacuum to remove details from the box inside the robot’s thought bubble.


    External link: Online copy Extract: Background
    After thirty years of mixed results, many educators today question the value of teaching programming to children. It is hard, and there are now so many other things children can do with computers. Proponents of teaching programming argue that programming can provide a very fertile ground for discovering and mastering powerful ideas and thinking skills [Papert 80]. Furthermore, programming can be a very empowering and creative experience. Children who can program can turn computers into electronic games, simulators, art or music generators, databases, animations, robot controllers, and the multitude of other things that professional programmers have turned computers into.

    Why do we rarely see these wonderful results from teaching children to program computers? The answer seems to be that programming is hard — hard to learn and hard to do. ToonTalk started with the idea that perhaps animation and computer game technology might make programming easier to learn and do (and more fun). Instead of typing textual programs into a computer, or even using a mouse to construct pictorial programs, ToonTalk allows real, advanced programming to be done from inside a virtual animated interactive world.

    The ToonTalk world resembles a twentieth-century city. There are helicopters, trucks, houses, streets, bike pumps, toolboxes, hand-held vacuums, boxes, and robots. Wildlife is limited to birds and their nests. This is just one of many consistent themes that could underlie a programming system like ToonTalk. A space theme with shuttlecraft, teleporters, and so on would work as well. So would a medieval magical theme or an Alice in Wonderland theme.

    The user of ToonTalk is a character in an animated world. She starts off flying a helicopter over the city. After landing she controls an on-screen persona. The persona is followed by a dog-like toolbox full of useful things.

    An entire ToonTalk computation is a city. Most of the action in ToonTalk takes places in houses. Homing pigeon-like birds provide communication between houses. Birds are given things, fly to their nest, leave them there, and fly back. Typically, houses contain robots that have been trained to accomplish some small task. A robot is trained by entering his "thought bubble" and showing him what to do. The focus of this paper is on how robots remember actions in a manner that can easily be generalized so they can be applied in a wide variety of contexts.


          in Lieberman, Henry "Your Wish Is My Command: Programming By Example" Morgan Kaufmann 2001 view details
  • Kahn, Kenneth "ToonTalk and Logo: Is ToonTalk a colleague, competitor, successor, sibling, or child of Logo?" view details Abstract: The answer is all of the above. ToonTalk is a colleague because it shares with Logo so many goals and ways of thinking (so nicely described in Papert's book Mindstorms). It is a competitor because teachers and learners have a limited amount of time to devote to such things. It can be argued that ToonTalk is a successor to Logo because it is built upon more advanced and modern ideas of computation and interfaces. ToonTalk is like Logo’s little sister – looking up to her big brother while striving to out do him. And ToonTalk is a child of Logo in that it grew out of experiences of what worked well and what didn't in using Logo. External link: Online copy
          in Proceedings of the EuroLogo Conference, August 2001 view details
    Resources
    • Papers at toontalk.com
      This includes revised and updated versions of the chief significant papersexternal link
    • Toontalk.com
      external link
    • "Is Logo old technology?" Digest of comp.lang.logo discussion
      external link
    • The Computer Science behind ToonTalk

      The Computer Science behind
      ToonTalk



      ToonTalk is an interpreter for a concurrent constraint
      programming language. Concurrent constraint programming is a synthesis of concurrent logic
      programming and constraint logic programming. (See, for example, href="http://mitpress.mit.edu/book-home.tcl?isbn=0262192977">Saraswat). The class of
      languages for which programs are roughly interchangeable with ToonTalk programs include href="http://www.mozart-oz.org/">Oz, E-Lang,
      Janus, Flat Guarded Horn Clauses, KL1/KLIC, Flat
      Concurrent Prolog, Parlog, and Strand. The syntax of all these languages is textual while
      ToonTalk has an action-oriented video game animation syntax. The programming environment
      is completely different as well. In ToonTalk, the process of constructing, testing, and
      debugging programs closely resembles playing a video game. "From
      Prolog and Zelda to ToonTalk
      " is a paper discussing these ideas in detail.



      Pictorial Janus is a visual version of Janus in which
      pictures are used for source code and the execution of a program can be seen as an
      animation. ToonTalk differs from Pictorial Janus (and all visual programming languages) in
      that the source code is animated and concrete as opposed to the static and abstract syntax
      of visual programming languages. (See href="ftp://ftp.parc.xerox.com/pub/PictorialJanus">Pictorial Janus ftp site and href="http://jerry.c-lab.de/~wolfgang/PJ/">Paderborn University web page.)



      The computational model underlying ToonTalk supports the
      dynamic creation and termination of asynchronous processes. First-class send and receive
      capabilities provide a means for these processes to communicate and synchronize. All state
      is local to processes. There is a close relationship between concurrent object-oriented
      programming languages (including actor languages) and ToonTalk. (See ToonTalk
      papers
      .) 
      Here is an
      essay
      about how ToonTalk is concurrent and why it is difficult to extend conventional
      languages to be concurrent.



      ToonTalk includes a puzzle game that includes a
      sequence of over 60 puzzles. The connections to computer programming and computer science
      for each puzzle are described here.



      One way to understand ToonTalk is that it provides
      "concretizations" of computational abstractions. For each computational
      abstraction ToonTalk provides a tangible equivalent analog.





        
          
          
        
        
          
          
        
        
          
          
        
        
          
          
        
        
          
          
        
        
          
          
        
        
          
          
        
        
          
          
        
        
          
          
        
        
          
          
        
        
          
          
        
        
          
          
        
        
          
          
        
        
          
          
        
      Computational
          Abstraction
      ToonTalk
          Concretization
      computationcity
      actor or process or
          object

      house

      methodsrobots
      method
          preconditions
      contents of thought
          bubble
      method actionsactions taught to
          robot
      tuples or messages
          or vectors
      boxes
      comparison testsscales
      actor spawningloaded trucks
      actor terminationbombs
      constantsnumbers, text, and
          pictures
      channel transmit
          capabilities
      birds
      channel receive
          capabilities
      nests
      program storagenotebooks



      Another way to understand the computational
      model of ToonTalk is to consider what you can train robots to do:




        

      ·   size="3">send a message (i.e. tell a constraint)


        

          

      by giving a box or pad to a bird,


        

        

      ·   size="3">spawn a new agent


        

          

      by dropping a box and a team of robots into a
          truck,


        

        

      ·   size="3">perform simple primitive operations (e.g. +, -, *)


        

          

      by dropping a pad on a pad,


        

        

      ·   size="3">copy an item


        

          

      by using a magician's wand,


        

        

      ·   size="3">terminate an agent


        

          

      by setting off a bomb,


        

        

      ·   size="3">change the contents of a tuple


        

          

      by taking out items and placing new ones.


        


      external link