Tinker, A Programming by Demonstration System for Lisp

Papers about Tinker:

Henry Lieberman, Tinker: A Programming by Demonstration System for Beginning Programmers, in Watch What I Do: Programming by Demonstration, Allen Cypher, ed., MIT Press, 1993.

Programming is the art of teaching procedures to a computer. Making a good programming environment for beginning programmers is an enterprise that can exploit strong connections between principles of human learning and machine learning. My experience as a teacher led me to the conviction that working with concrete examples is the best approach both for a teacher to explain ideas to a student, and for a student to learn. Why can't examples play a more important role in a programming environment?

This paper presents Tinker, a system that permits a beginning programmer to write Lisp programs by providing concrete examples of input data, and typing Lisp expressions or providing mouse input that directs the system how to handle each example. The user explicitly indicates which objects serve as examples, and may present multiple examples that serve to illustrate conditional procedures. The machine records the steps of the computation, and formulates a program to handle the general case.

Tinker provides some capabilities that remain unique among programming by demonstration systems. As a programmer's system, it requires more knowledge of a programming language that a purely direct-manipulation interface, but provides access to more computational power as a result. It is perhaps the most computationally general programming by demonstration system, capable of synthesizing any procedure expressible in its underlying Lisp language. It remains one of the few that accepts multiple examples, enabling conditionals and recursion Each set of examples constitutes a partial definition, which can be incrementally augmented with positive or negative examples.

  • A Quicktime movie demonstration of Tinker [4.5 MB]

  • Web format [HTML]

  • RTF Format [Microsoft Word, Mac and PC] [960 KB]
  • PostScript Format [9.5 MB]

  • Henry Lieberman, Seeing What Your Programs Are Doing, International Journal of Man-Machine Studies, July 1984.
    Henry Lieberman, Designing Interactive Systems From The User's Viewpoint, in Integrated Interactive Computer Systems, P. Degano and E. Sandewall, eds., North Holland, 1982.
    Henry Lieberman, Constructing Graphical User Interfaces by Example, Graphics Interface Conference, Toronto, Ontario, Canada, May 1982.
    Henry Lieberman, Tinker: Example-Based Programming for Artificial Intelligence, 7th International Joint Conference on Artificial Intelligence (IJCAI), Vancouver, B. C., Canada, August 1981.
    Henry Lieberman and Carl Hewitt, A Session with Tinker: Interleaving Program Testing With Program Design, Proceedings of the First Lisp Conference, Stanford University, August 1980.
    ... and for more information about Programming by Demonstration, see

    The home page for



    Watch What I Do: Programming by Demonstration

    Allen Cypher, ed. MIT Press, 1993.