The dream of “end-user programming” is still too far away. Let’s set our sights on “end-programmer programming” first.

The Dream

There is a dream, almost an ancient prophecy, about computers that is as old as computers themselves. Like a siren song, the dream has lured thousands of us to chase it. It shimmers like a mirage, tantalizingly just over the horizon, yet remains as elusive now as it ever has been. The road to the dream is littered with so many dead prototypes of brilliant minds that many have given up on the dream entirely. Yet in some hearts the dream lives on.

The dream is that the full power of computers be accessible to all, that our digital worlds will be as moldable as clay in our hands, shaped fluidly and continuously to serve each of our unique and particular needs. The dream is that the full expressivity of programming will be accessible to all people, not just the ~1% who spends years learning to code. The dream is the nothing short of the real computer revolution. The dream is end-user programming.

[End-user programming is] a vision for empowered computing pursued by bright-eyed computer science visionaries. Its rich history reaches back to the 1960s with programming environments like Smalltalk and Logo. Notable successes since then include Unix, the spreadsheet, Hypercard, and HTML. And today, newcomers like Zapier, Coda, and Siri Shortcuts are trying their own approaches to automation and dynamic modeling.

Boiling the ocean

The gulf between end-user software and end-user programming is filled with an ocean of thorny problems:

  1. Understanding basic programming concepts (boolean logic, statements, state, loops, functions)
  2. Using formal syntax
  3. Setting up a development environment
  4. Rendering
  5. Deployment, hosting, logging, monitoring
  6. Version control
  7. Persistence (databases)