Do End-Users Program?

Position paper for CHI’99 Workshop on End-User Programming and Blended-User Programming
 
David Maulsby
24C Group Inc.
© 1999 David Maulsby

Introduction

End-user programming has been around since the dawn of interactive computing systems. Users of Ivan Sutherland’s Sketchpad "programmed" graphical transforms into the machine by flicking switches and twiddling dials. And for several decades now, users of the Emacs genus of text editors have programmed editing macros. Both of these earliest forms of end-user programming were demonstrational, and inspired the line of research now known as Programming by Demonstration (PBD). These early PBD methods had a definite air of programming about them, even the system provided direct manipulation of data during the programming process, because users had to consider the indirect and cumulative consequences of their actions, the generality of their application, and even the order in which they were taken.

Today, "end-user programming" brings to mind spreadsheet formulae and macros, SQL database queries, and Rapid Application Development (RAD). Commercial products such as Microsoft Access provide "builders" for queries, data entry forms, and reports, intended for use by persons with no formal training in the art of programming. Demonstrably successful (I myself have witnessed a marketing person create her own contact manager from scratch - though why she bothered, I cannot tell), these tools make no use of PBD: all those clever ideas devised by researchers over the past thirty years seem to have had no influence on these products. Today, the dominant paradigm for end-user programming is form filling, perhaps under the guidance of a Wizard: the programmer selects functional components and sets property values.

RAD tools, especially Visual Basic, have engendered a new class of programmers, whom the organizers of this workshop call "Blended-User-Programmers." This phenomenon is interesting in itself, and efforts directed toward helping them program have high economic value. My concern, however, remains with the common end-user, who seems to have been left behind by all this highly empowering yet nonetheless highly involving technology. As the Call for Participation points out, office software has become bloatware, and support for accomplishing tasks more efficiently comes at the price of a complicated user interface. Meanwhile, users still perform far too many tedious tasks, fail to take advantage of the computer’s ability to formalize their data, and, all too often, driven to perfectionism by their computer’s marvelous capabilities, become slaves to its need for input, until innumerable micromotions and incessant concentration on the screen ruin their hands and eyes. Automating more of their work, especially where such automation affords them a pause in their physical involvement with the computer, or extends their exploitation of computer (and internet) resources beyond their direct physical involvement, promises to make computer work less stressful and more rewarding.

Are End-Users Programmers?

The end-user programmers of the 1960’s and 1970’s seemed immune to the repetitive strain injuries that plague so many users today. Of course, they lived in a world free of mice and touchpads! But one of the main factors in preventing RSI is pausing to rest the hands, shift the body and stretch the muscles. Early end-users had plenty of opportunities for this as they waited for the timesharing system to process their input. These breaks also gave them time (and an incentive!) to think about how they might automate their work and thus reduce the number of inputs they had to make. Programming Emacs and troff macros in particular became a high art and a collaborative effort: every Computer Science department had its own library of macros for setting up and searching bibliographies, and for formatting theses.

These early end-user programmers were, of course, serious programmers. It was natural for them to think about automating their work, and they enjoyed the challenge of creating robust, generalized macros, the more complex the better. The end-uses that concern me are by no means "programmers" in the traditional sense. By training, and perhaps by disposition, they are not inclined to recognize opportunities for automation, nor to understand the difference between a macro and a generalized macro.

In the course of my research on agents, I ran a Wizard of Oz study, in which end-users of Microsoft Word taught repetitive text editing tasks to a simulated agent named Turvy that watched their actions and understood simple verbal hints. I tested both programmers and non-programmers on working with Turvy, and interviewed them afterward to glean their insights into the process of training a not-very-intelligent agent. While running through the tasks, programmers tended to worry about whether Turvy would generalize correctly; non-programmers did not worry. When giving verbal hints, programmers used terms like "if… then"; non-programmers would say "look for…" Programmers tended to say as little as possible, until Turvy asked them a question; non-programmers tried to explain the task - even its purpose – until they discovered that Turvy did not understand most of the words they used. Several tasks were procedural, involving several steps and some notion of state. Programmers were obviously careful to perform actions in the same order on each example they demonstrated; some even wondered aloud what Turvy would do if they violated this. Non-programmers, on the other hand, paid no heed to this issue, performing actions in freely varying order.

Such differences notwithstanding, by the end of their sessions, both programmers and non-programmers had built up similar mental models of the agent’s capabilities. They recognized that Turvy could pick out repetitions in a stream of actions, that it could generalize from examples and its own mistakes, and that it understood a small vocabulary, which users learned from the questions and feedback Turvy gave them. But during the debriefing, most programmers speculated on the limits of Turvy’s ability to generalize; non-programmers had little to say about this. Several programmers suggested that Turvy could optimize procedures it had learned; no non-programmer thought of this. When asked to evaluate Turvy’s usefulness, programmers gave it lower marks than non-programmers, mainly because they were concerned that it would err.

Among the programmers in this study was a multimedia artist who had recently learned how to program in HyperCard and found himself to be a natural "blended-user-programmer." Indeed, this artist evinced the characteristic responses of programmers to Turvy in the most extreme degree.

The Agent Model

Whether people think like programmers due to their training or disposition is moot; as a matter of policy, we surely do not want to turn artists, writers and sales executives into programmers, even if that were possible. Therefore, as proponents of end-user programming, we should aim to provide programming tools that do not require users to think like programmers. In particular, our end-user programmers should not have to: Some of these issues were discussed by Richard Potter in his article "Just-In-Time Programming" in the book Watch What I Do: Programming by Demonstration (ed. Allen Cypher, MIT Press, 1993). Potter concluded that a conservative approach to designing end-user programming systems would be best, and the end-user tools commercially available today are very conservative, indeed. The next step beyond property settings, style sheets, and literal macros is certainly risky, the most notorious example being Microsoft Word’s auto-formatting functions. MS Word attacks the problem of recognizing the opportunity to automate, as when it detects numbered lists or asks whether you a writing a letter. Unfortunately, Word does not solve the invocation problem, nor does it learn from its mistakes.

A programming system that takes care of the issues listed above must be very different from office applications like Excel or Visual Basic, or from PBD systems like AgentSheets or StageCast Creator. Some of these functions, such as recognizing opportunities for automation, appear impossible to accomplish without using inference. The metaphor that springs to mind for this kind of programming system is an intelligent agent – or what I and my colleagues have called an "instructible" agent, to de-emphasize the need for built-in knowledge. In my own research, I devised an instructible agent model that blends instruction and programming, for a general task model known as Find & Do. Put simply, Find & Do involves searching for objects (e.g. graphics, files or text strings) that match a pattern, and modifying those objects with a macro. The agent instruction protocol I devised enables users teach at their desired level of detail and control. They may perform their work, allowing the agent to predict actions it has inferred from watching, and giving it verbal hints if they wish. They may announce a lesson and teach with examples and hints. They may annotate examples using a property sheet. And they may examine and edit scripts. I built and tested a prototype, which I found very useful for studying interaction and discourse issues, but which failed to convince commercial interests that PBD was in their future, because the application (setting graphic properties and text styles) was too trivial.

Progress on the development of instructible agents has been slow and fitful. The current state of the art is embodied in Rich McDaniel’s GAMUT system for programming games, but GAMUT falls short of Turvy’s learning capabilities and user interface simplicity. Some key components of an instructible agent, for recognizing patterns in user activities, generalizing data descriptions, and interpreting user hints, are available in various research systems (including my own), but the necessary operating system infrastructure, such as access to application data, is mostly missing from "real" computer applications. But the deepest problems and most vehement objections concern interaction between agents and users. As the detractors have oft pointed out in public debates and magazine articles, agents will…

The proponents of agents for end-user programming have yet to answer these objections in a substantive way by implementing a well-behaved agent that learns reasonably well under real-world conditions. Answering the critics by argument is difficult, because it is easy to be maneuvered into admitting that the agent must have common sense, i.e. that it must be a more or less complete artificial intelligence.

Opportunities for R & D

These criticisms, and the difficulty of incorporating PBD into applications and operating systems, have had a chilling effect on research in this area. This is strange, because the challenges raised above deserve research, and the avowed position of all PBD researchers has been that the problems of erroneous inference and interference with the user’s work can be overcome by a "conservative" approach to agent design. Unfortunately, specializing an agent’s capabilities and restricting its use of machine learning results in the Office Paper Clip. My advice to new PBD researchers would be to direct their efforts to modeling the social discourse between agent and user, both in the small (learning a task) and the large (learning about the user). Once this is better understood, we shall be able to make appropriate use of the machine learning techniques now available to us – or we shall understand how to invent a better machine learning method of our own.

On the "technology" side of research, I see an opportunity to address the issue of identifying repetitious actions in large-scale streams of activity, for inferring tasks and for invoking them. We now have enough computer speed and memory to scan streams at several levels of abstraction, and to measure the relative information in alternative sequence models. Thanks to the Java JDK 1.2 event model, and to the free availability of browser source code, we could experiment with such algorithms in real world applications.

Conclusion

Blended-user programming has taken off nicely, and improvements in systems for these casual programmers are likely to evolve quickly, driven as they are by economics and the availability of extensible commercial systems. My fellow blended-user-programmers and I eagerly await improved debuggers (such as the reversible one designed by Lieberman and Fry), task templates for program structure, and Wizards for data definition.

The outlook (pardon the pun) for end-user programming is not so clear. If, as I argued above, there are no end-user programmers, then the fate of this endeavor rests upon user acceptance of instructible agents. We have yet to overcome the known objections to these, let alone test the idea broadly enough to declare with confidence that agents are useful and usable. Unfortunately, certain premature commercial tests of agents, under the trade names "Bob" and "Office Assistant," have antagonized the public. Overcoming this negative bias is one more challenge to research, but at least we need no longer worry about the Hawthorne effect when testing our ideas!

I have no doubt that the ranks of blended-user-programmers will keep growing, especially as the first generation of humans who learned to use computers before they could read matures beyond game-playing and enters the workforce. I believe, however, that even blended-users are end-users much of the time, and will need help to recognize opportunities for automation, and to automate simple repetitive tasks. PBD is the best-known way to solve these problems. I foresee a blending of RAD with PBD: RAD used to design data models and user interfaces; PBD to script prototypes of behavior; and RAD used to polish the scripts. How to blend or supercede the metaphors of programming and teaching, relying as they do on incompatible mental models, remains a great challenge for research.