Programming involves heavy up front thinking that is transcribed into code whose concrete execution provides feedback on the adequacy of the thinking. The need to map thought into code and then execution feedback back into thought leads to much of the hardness of programming. With direct manipulation this hardness goes away: thought can directly act on the continuous representation of an object, resulting in a modified representation that provides direct feedback. Unfortunately, direct manipulation cannot generalize a problem’s solution like programming can. What about making an abstract representation, like a regular expression, tangible so that it can be manipulated directly? The manipulation of an abstract representation corresponds to manipulating all of its possible concrete values. For example, manipulation steps that transform (A|B)* into AB work over any array of As and Bs, swapping all their As to the front. As a result, such “tangible abstractions” realize both the generalization of programming and usability of direct manipulation. This talk will introduce a prototype programming environment based on tangible abstractions, demonstrating how it can be used to express real program functionality. We also discuss the challenges that need to be overcome before tangible abstractions can be used for general purpose programming.
I am an independent programming language researcher who focuses on design, objects, IDEs, live programming, and how we could program with touch.