Interaction programming is generally restricted to designing interactive devices used by people. The stated aim of the book is to introduce programmers to the principles of designing, programming, and understanding interactive systems so that these individuals can design more satisfying and easy-to-use systems. However, the book goes beyond the stated objectives by developing a design philosophy based on principles of human-machine interaction. Elements of human-machine interaction are analyzed from a pragmatic programming perspective, including some guidelines on teaching interaction programming. In that respect, it is comparable to another excellent book [1].
This is both an important and a beautiful book. Thimbleby’s Future Interaction Technology (FIT) laboratory, at Swansea University in Wales, has a Web page (http://www.fitlab.eu) that provides perspective on various research projects related to the book. I was surprised to learn from the book’s Web page (http://mitpress.mit.edu/presson) that it was the winner of the 2007 Association of American Publishers’ best book award in the category of computer and information sciences.
This hardcover, 510-page book is composed of 15 chapters, followed by an index. Luckily, Thimbleby applied his own user interface principles to the organization of the book, which made the job relatively easier. The book starts with two pages labeled “Outline Message” and “Outline Contents,” respectively, followed by “Full Contents,” “List of Boxes,” acknowledgments, and an introduction (chapter 0). The first two pages provide “elevator talk” for the whole book. From these pages, one learns that the book has three sections: “Context” (four chapters), “Principles” (seven chapters), and “Press On” (three chapters). The “Context” section covers economic, social, psychological, and technical reasons for studying interaction programming. The “Principles” section teaches about the techniques available to interaction programmers. The “Press On” section describes the attitudes and approaches to managing the complexity of designing man-machine systems.
The main body of the book is Part 2 (chapters 5 to 11). The framework used in the book is based on JavaScript; Thimbleby recommends visiting the JavaScript Object Notation (JSON) Web site (http://www.json.org) for using this framework with other programming environments such as Java or C++. Further generic design recommendations are given in the last section (chapters 12 to 14).
As far as limitations are concerned, the introduction clearly states that this book does not cover safety-critical and mission-critical systems.
In conclusion, this book can be used in many contexts, and I recommend it to every computer science (CS) and engineering major. For example, I will be using it as a supplement in the graduate-level object-oriented (OO) design course I teach.
One thing I do not like about this book is the “press on” part of the title, along with the cover picture of a hand pushing a button. This phrase is misleading since human interaction is not limited to the hands. I hope the title will be changed in future versions.