Programming is magic

To misquote Sarah Silverman, programming is magic. And by this I mean something very specific.

In the physical world we use tools to help us build things. But the things we build are still made out of relatively stupid materials. No matter how well made is a hammer or a saw, a piece of wood is still a piece of wood. It doesn’t know anything about what you are going to create out of it, and it can’t help you very much, other than by acting exactly like a piece of wood.

Programmers learn to see things differently. When you program, you are really mainly in the business of building very smart materials — objects that know all sorts of things about how you will assemble them together, and that can actively help you to build with them.

If a piece of wood were a software object, it would already know how to align itself perfectly with other pieces of wood, to create a set of notches in itself for making a dovetail joint, or how to ensure that any nails or screws you drive into it will always land in exactly the right place.

And once a single piece of wood knows how to do all of those things, then every piece of wood also gains the same knowledge. If you try to think of analogous situations in the physical world, the closest parallel is to the laws of magic.

Sometime in the coming decades, when we are all living in an eccescopically enhanced world, in which atoms and bits blend much more seamlessly than they do today, the way people construct things in the physical world will become ever more aligned with the way that programmers already think about creating things.

Imagine someone from today’s world, suddenly transported to that future time. They would look the way every day things were constructed, and they would think that they had entered a world of pure magic.

5 thoughts on “Programming is magic”

  1. Makes me wonder whether we’ll generalize programming into something like ‘linguistic engineering,’ addressing all systems where we construct by describing. It might rest on a formal theory of describing—maybe something broad enough to encompass, e.g., (mental representations of) smells as descriptions as well, or maybe with just enough breadth to capture human conceptual structure, with its types/kinds/sorts and relations. Then, our methodology would cover effective means of assembling descriptions to be consumed by ‘receptive materials’ (“don’t mix vocabularies unnecessarily,” “make primitives to form composite terms out of”) Then again, the more intelligence ‘receptive materials’ are endowed with, the less need for an engineering discipline.

  2. You know what other objects in the real world are constructed from non-stupid materials? Living things.

  3. Weston: My guess is that all of the issues around “programming for everyone” would still apply, and that we might be able to find various analogs in systems like SHRDLU, SmallTalk, HyperCard, Scratch and Kodu.

  4. CC: That is a fascinating observation.

    It would be interesting to carefully analyze the similarities and differences between (1) how we work with the sorts of “smart” objects that computer programmers build, and (2) how we work with other people.

    The similarities can be striking, but the differences can be even more striking.

  5. > My guess is that all of the issues around “programming for everyone” would still apply

    I agree. More intelligence isn’t enough: the notion of ‘common ground’ probably captures the rest of it, though, perhaps 🙂 (regarding obviating the need for trained engineers, anyway; limitations of: expressivity, interaction with external systems, and performance would be untouched).

    > It would be interesting to carefully analyze the similarities and differences between (1) how we work with the sorts of “smart” objects that computer programmers build, and (2) how we work with other people.

    That’s what I’m getting at in my first comment: what is involved in forming effective communications with systems ranging from APIs to… Al Pacino? In order to compare the properties of the two ends of the spectrum, a framework capable of formulating ‘linguistic receivers’ as diverse as function interfaces and human personalities, seems to be required. (I mean for a generalized definition of ‘linguistic’ that would include, e.g., your Chalk diagrams, or a language of buildings under a grammar of architectural constraints.)

Leave a Reply

Your email address will not be published. Required fields are marked *