Why you don’t get programming

The best description I’ve seen of programming is in Peter Welch’s1 memoir And Then I Thought I Was a Fish:

Programming requires the acceptance that you are entering meaningless symbols into a machine that’s going to spit out other meaningless symbols, and this can be hard to accept. It requires abandoning all hope of an answer for the existential “why?” in favor of shuffling boolean values ad infinitum. By no interpretation of the concept of understanding does a computer understand what you’re telling it or what it’s telling you.

Of course the symbols make perfect sense to the humans trained to use them. Otherwise you could not call them “symbols.”

But those symbols have no meaning to the computer. It is only dealing with the symbols in a predetermined manner specified by programmers and computer engineers.

Computers are something like paper. Paper does not care what gibberish you put on it, which is why Ann Coulter’s manuscripts haven’t strangled her yet. But paper only sends back what you’ve written on it. Computers take what you put in, boil it down into electrical states according to rules arranged by other humans, then respond with more symbols according to another set of rules. All of these rules we call software.

Absent a self-aware artificial intelligence, there is no human-to-computer meaning. There is only human-to-human meaning, arbitrated in the middle by a complex but nonetheless rock-dumb calculator.

You can probably see how this would be different from talking to a person, but here’s an illustration anyway. Assume you have a computer that knows how to make sandwiches. If you say to it:

Make a ham sandwich. 

It will make you one. If instead you say to it:

Make a ham sandwich

It will hang around waiting for you to finish your sentence because you forgot the damn period. It is precise. And picky. But it is also predictable.

With humans you can say any variation of “make a ham sandwich.” “Me you should make a ham sandwich. Hungry am I.” Assuming basic comprehension of the language, any human can figure out what you mean. But the response is shaped by mood, that human’s relationship to you, phase of the moon, who knows what else. So you might get a ham sandwich. Or you might get several rounds of clarifying discussion: do you want mustard? What kind of cheese do you want? Did you remember to get more ham at the grocery store? Why should I? Your arms appear to work. Don’t you know meat is murder? And so forth.

It may seem like your computer does that sometimes, too, but that’s just software. You are having a conversation, but it’s not with the computer. You are using software to talk across a vast chasm of time and space with humans that anticipated the discussion.

This is very frustrating to beginners, but it is the allure of programming. If you can figure out how to phrase things in precisely the right way the computer will do precisely what you want it to do every time. That’s a remarkable amount of power, and the joy of figuring out how to do it is what keeps a lot of us attached to their chairs.

It is also why, in the human realm, programmers are so infuriating to deal with. It is why a senior programmer will play Two Million Questions about all potential sandwiches when you ask for “a sandwich” and a junior will just hand you two slices of bread and go back to trolling reddit.

So the computer is kind of like a piece of paper, but it most resembles an idiotic, lazy, no-initiative employee you have to explain each process to in great detail and which will follow every order you give him precisely and literally. If you can grasp that, you can grasp programming. Or, at the very least, you can collaborate with programers on your team just a little bit better.


  1. Have you read “Programming Sucks“? He wrote that, too. 

Image Credits: Wikimedia / Glenlarson

Leave a Reply