The increasing adoption of smartphones and tablets has provided tens of millions of users with substantial resources for computation, communication and sensing. The availability of these resources has a huge potential to positively transform our society and empower individuals. Unfortunately, although the number of users has increased dramatically, the number of developers is still limited by the high barrier that existing programming environments impose. More than ever, the number of developers presents a bottleneck for fully leveraging the potential of computing. As technology that will help address this bottleneck we propose a modern instance of programming by demonstration. Key technologies that need to come together include high-level execution run-times, graphical manipulation interfaces, machine learning for structured domains, as well as static and dynamic verification to ensure consistency properties.
As a concrete step in helping end-users develop software, we have developed Pong Designer, an environment for creating 2D physics games through direct manipulation of object behaviors. Pong Designer is built using Scala and runs on Android tablets with the multi-touch screen as the main input. It is Turing-complete, yet can intuitively describe many game behaviors. We show that Pong Designer makes it remarkably easy to create games such as (multi-player and multi-screen) Pong, Brick Breaker, Pacman, and many others. We have made an open release of Pong Designer, demonstration videos, and games we created using it. We therefore believe that Pong Designer points to a direction that will enable many more individuals to start turning their creativity into working applications.