One frequently occurring problem with edited books of readings is that the final result is more like a regular issue of a journal with little or no connection among the individual contributions. The editor's introduction rarely succeeds in providing cohesiveness. This work is a stellar exception to this common outcome. It succeeds in tying together contributions by 16 authors into a single cohesive view of the present state and possible future directions of "programming by demonstration" (PBD).
As defined by these authors, "programming by demonstration" refers to techniques for automating operations in which the user first executes a sequence of actions and the system infers a more general computation, which the user then applies to other data. Because of the inference step, these computations are more general than those possible with a macro recorder. By constraining the space of legal inputs, the systems try to solve a simpler problem than would be required to do general inference of programs from traces.
The book is divided into four major sections: Systems, Components, Perspectives, and Appendices. The Systems section, which forms two-thirds of the book, consists of 18 chapters, each describing one "programming by demonstration" system. These chapters are organized in roughly historical order, beginning with David Canfield Smith's 1975 Pygmalion system and continuing up to the 1992 AIDE project. They are nearly all new material, not reprints of the original reports, and they are written to give a broad overview and perspective for the work. Each chapter concludes with a summary sheet to enable comparison between the work in the chapter and the other systems.
The second section, Components, is slightly mistitled. As one might expect, it does focus more on mechanisms rather than on entire PBD systems; however, in contrast to the first section, the work described is still in progress. In fact, two of the chapters are proposals for future work, rather than work that has been completed or is under way. This provides a useful forecast for the directions that near-term work in this area might take.
The Perspectives section also has somewhat disparate contents. The chapter by Allen Cypher, David Kosbie and David Maulsby, and the chapter by Brad Myers, both attempt to summarize and classify PBD work and related work. They do so from two different perspectives: Cypher et al. use the dimensions of uses and users, user interaction, inference and knowledge, and focus just on PBD systems. The Myers' chapter classifies each piece of work as to whether the system is demonstrational, intelligent and programmable and considers a wider range of systems. I found both classifications of interest. The third chapter, "'Just-in-Time' Programming", by Richard Potter, has a different focus; it walks through a scenario of a user solving a computing problem to highlight the nature of the problem that PBD systems must solve. Except for some references to earlier chapters in the book, this would make a good introductory chapter to the entire book.
The final section of the book is a set of appendices. The first is a chronology of programming by demonstration work that ties it to related work on inference from examples. The second is a test suite for programming by example systems, and the third is a glossary. For readers who are not interested in attempting PBD work themselves, the first and third appendices will be the ones of greatest interest.
Although the physical format of a book is not usually a subject for comment in a review, the format of this one appears to have been carefully chosen for the content of the book. The nearly square format of the pages facilitates the display of screen layouts, which typically have "landscape" proportions that are difficult to fit onto the pages of most books.
Overall, the book does an excellent job of conveying the current state and immediate future prospects of the field of programming by demonstration. I wish that other research areas would put together works that were as satisfactory in this regard. Where it falls short is in convincing me of the potential of the technology to substantially improve human-computer interaction. As the authors point out, the general problem of inferring an arbitrary program from a sequence of outputs is computationally very difficult. For PBD work to succeed, the space of possible programs must be constrained to be computationally more tractable, while at the same time remaining useful for some class of applications.
The problem I have is that the classes of applications described in this book seem relatively uninteresting in terms of their impact on users. As examples, the Cypher et al. chapter states, "It is impressive to watch the computer format a complicated table or organise a stack of mail messages without the user writing a single line of code." Myers sees a possible use of demonstrational systems as noticing that two files with the same extension have been deleted and asking the user whether all others with the same extension should be deleted as well. Programs written to solve this kind of problem would typically take only a few lines in a scripting or macro language. It is true that these sorts of low-level activities may consume a substantial portion of user time and that many users are unwilling or unable to write the small amount of code required, but I doubt that automating them would be regarded by most users as a breakthrough in usability or as opening doors to new computing power. In the absence of more compelling applications, one is left with a sense of admiration for the authors' intellectual effort, but with doubts as to whether the final product will be worthy of it.
back to ... Watch What I Do