What do politics and programming languages have in common?
This is a blog entry about programming languages, but I’m going to start out talking about politics.
Trigger Words in Politics
I’m currently volunteering for the Barack Obama campaign for president in the United States. If there’s a single thing one learns quickly in politics, it’s this: ideas themselves matter a lot less than getting people to remember them. It’s sad, because people who care about the important problems facing the government veritably thrive on those ideas. But the other 90% of people who ultimately make the decision in the end will have trouble just keeping straight who says what.
The solution: trigger words. Candidates express their ideas, but they always attach a word or short phrase. The word or phrase is far too short to ever really capture any idea worth its salt; but it’s what people will remember. So Barack Obama talks about “the politics of hope.” He says “change” a lot. And a good number of people will know that Barack advocates “a politics of hope” and “change” without being able to tell you what that actually means. The words, in fact, act as a kind of subconscious repository of those ideas that people don’t mention anyway. When Barack talks about the need to respect the dignity of people around the world instead of barricading against them as potential terrorists, he throws in the phrase “politics of hope,” and people add that to the ideas they associate with the phrase. When he talks about banishing corporate lobbyists from the White House, or refers to his legislative work to stop unseemly relationships between members of Congress and lobbyists, he says “change” and this gets added to the meaning of change. People remember the good feelings they had when they heard these terms before.
Of course, two can play at that game. Since “the politics of hope” is in the end a vague term with very little meaning, it’s open for twisting and manipulation. So it happens that, every time Barack Obama says he doesn’t think something will work, or that something is a bad idea, the response from other campaigns is “what happened to the politics of hope, eh Barack?” And now that Barack did very well in the Iowa caucus, other candidates are scrambling to stand for “change”… but one notable exception, most of them are not talking about lobbyists and centers of political power, but rather about their own pet issues. So it happens that one can have a spirited debate over trigger words without ever touching on actual policy differences. Yet, one must defend one’s trigger words. It would be ridiculous for Barack to respond that change and the politics of hope are just words and let’s forget them all; because those words are the repository of people’s good will toward the whole campaign.
Okay, yeah. I promised this was about programming languages. Here we go.
Trigger Words in Programming
So it was in this context that I came across a discussion across several blogs, including here and here. I tend to agree with these authors and most issues, but I have to object that they are throwing a trigger word under the bus in the process, and that’s a serious mistake. That word is “intuitive”.
Yes, intuitive is basically a trigger word. People have seen languages where you have to keep looking everything up in a reference manual, or else memorize large amounts of information (e.g., Visual Basic). And people have seen languages where things just seem to make sense (insert favorite language here). And they prefer the latter kind of language, which is widely identified as being intuitive. It’s a mistake to say that “intuitive” means familiar. If anything, it means something a little closer to elegant; but I’d go for a new phrase I’m about to invent. Intuitive means idea-efficient. It means that there exists a small set of ideas whose straight-forward application can lead to good solutions to a large set of problems. The principle of least surprise is, therefore, certainly a part of it. So is the central design principle of Scheme, that “Programming languages should be designed not by piling
feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary.” In the end, though, the exact meaning of the word is something that’s experienced, not explained. And that’s why the word itself is of such value; because I don’t want to rewrite this paragraph every time I want to mention the concept of an intuitive language.
Calling something unintuitive simply because it’s unfamiliar is a lot like saying, “What ever happened to the politics of hope, eh Barack?” And responding that intuitiveness is overrated is a lot like responding with, “The politics of hope doesn’t matter, after all.”
So that’s my plea. Respect the idea of an intuitive language. Defend it, and point out that it doesn’t mean “familiar.” Otherwise, we’re throwing away experience that could lead people to make wiser decisions about their tools.