Programming for Muggles

Quick: what is the most successful application ever developed for non-programmers to undertake tasks you’d normally need to write a program for?

Wrong types of answers:

  • Visual Basic: VB is great, but it is about making programming easier to learn to do; I’m interested in getting things done without programming. Plus, the answer is way more widely-used than VB
  • Hypercard: See VB. I adore Hypercard, and Apple was this close to inventing the web 10 years early, but it’s not the answer.
  • Visual Programming tools etc: See VB.

Right types of answers, but not the answer: * Access: This is more along the lines I’m thinking of — let the user get useful stuff done without having to learn programming, but I’m looking for something more popular * Filemaker: See Access

The right answer: * Excel: Just about everyone can use it a bit, and someone who is good with it can do pretty amazing things. Many of the folks who are most capable with Excel have never learned a proper programming language.

Programming is hard

I’m a programmer. I’ve spent my entire adult life as a programmer, pretty much. And I still find programming ridiculously hard. I really feel that it should be easier.

I adore everything Bret Victor does, and what he stands for. Every developer in the world should be very familiar with his Magic Ink, still the best UI discussion I’ve ever seen. In particular I admire Bret’s unwillingness to settle for the status quo.

Light Table, inspired by Victor’s work, is a great step in making programming better.

But what I’m interested in is making proper programming much less necessary. So much of what I’ve done in my career is plugging together code libraries and writing yet another log in form and yet another web report. I’ve had enough of it. Someone should be able to write a single great reporting tool once and everyone should be able to use it.

The web, and applications in general, should be built from the ground up to be much more like Access and Filemaker and Excel. The substrate out of which we make applications should be phenomenally reusable and user-modifiable, without programming.

The answer (forthcoming)

I’ll be blogging about how to do this over the next little while. I’ve worked out most of the answer. I wanted to start with a foundational question: why are Excel and Filemaker and Access so successful? They are very different tools, but I think they share one important foundational idea that is a big part of their success.

They are functional programming tools. Excel users write functional programs that use cells or blocks of cells as inputs. Access and Filemaker users create reports that are functions of relations.

Functional programming is very expressive, which is why the compact functions you write for Excel, or the simple GUI manipulations you perform in Access are able to express complex transformations of complex data.

I think much of the reason that tools intended to make end-users into programmers are not more successful is that every single one that I have ever heard of employs an iterative programming paradigm. Thinking that way about complex problems is strange and unnatural and hard.

OTOH, thinking in functions is I think much more natural, particularly for non-programmers. Turn these things into that thing. In fact, I think muggles could learn enough of the basic constructs of the likes of Scheme, properly presented, that they could have available to them a turing-complete paradigm. The Y combinator, properly presented, can seem quite natural, I think.

So this is part of what I’m about: functional programming, but not in a functional programming language. I want to give users a modifiable user interface, where they are modifying it along functional programming lines. I think we can push this idea a long way, and wind up in a world where software is more plastic, reusable and user-modifiable.

Next: applying this to the internet

My next post will be about how we bring this idea to the Internet. Stand by.