Putting the Horse Before the Cart

Periodically I revisit aspects of programming that excite me. Lately, I have been reading articles by Bret Victor and remembering things that have gotten me excited about programming over time. I have been thinking about how I can incorporate these ideas into my daily work. It is a formidable challenge.

Back during the Elizabethan period there was a revolution in productivity in agriculture. It arose when someone figured out that the ox could pull a plow much easier than it could push a plow. Up until that time they had assumed that an ox would push the plow like a person does.

We have been making similar assumptions about computer programming. In particular, we have structured our computer languages to be easy for computers to translate rather than easy for people to program. This has resulted in programming getting a reputation for being difficult and boring.

Writing a program should be more like creating a painting or writing a song. When I pick up my guitar to write a song, I don’t usually have anything more than a fragment of an idea. Sometimes I may just start playing around with chords and melodies until something strikes my fancy. I write the song by taking these ideas and playing around with them, varying the melody, the harmony, and the rhythm until I discover something interesting.

The very best experiences that I’ve had while programming have been in a similar environment. I have taken an interesting idea and implemented some small aspect of it. Then I try modifying what I’ve written to see what happens when I change different parts of it. It is interesting to observe that in most cases I have been using an interactive programming language. That is, a language that accepts an expression and responds immediately with the result of evaluating that expression.

We learn to build things by trial and error. If we will just change our approach to programming so that it more closely resembles creative play, we will realize an immediate and astronomical increase in productivity. As long as we continue to develop programs like we build bridges producing good software will be an expensive and risky business at best.