## Old Teacher Trick: Artificial Constraints Beget Creativity

This post is about a trick my dad taught me. He’s not a programmer, but he is the best teacher of writing that I have ever known. The trick is this: He will make strange requirements part of a creative writing assignment. Only use two characters, or make everything take place in the same train station. Or write a villanelle.

At first, these constraints just seem annoying. Why can’t I just write a story? Why are you stifling my creativity? Don’t confine me, bro! But there is a huge benefit to artificial constraints: they make you do something you wouldn’t have without them. They cause you to be creative.

## Old Teacher Trick: Don’t Guess; Look it Up

Before I was a computer programmer, I was a high school Latin teacher. I had a rule in my classroom: “Don’t guess; look it up.”

The rule came out of situations like this: We would be reading some piece of Latin. I’d be calling on students, and they’re answering questions, translating pieces of Latin, asking questions. And then we would get to a work no one knows, like nequiquam. And I would ask, “does anyone know what this means?” And the most amazing thing would happen. People would start to guess.

Now, occasionally you can cobble together the real meaning of a word. Like “unobtrusive” is probably the opposite of “obtrusive.” But that’s the exception. As a rule, if there’s a fact that’s not in your brain, wishing won’t put it there, and guessing is even worse. When you guess, you take information that might be wrong, put it into your brain, and then instruct your brain to proceed as through it knew the information. Imagine if a database did that: you’re querying for some contact’s email address, and your database doesn’t know, so it picks are random email address? Or worse, it picks an email address that looks right, like stringing together parts of the guy’s name, at gmail dot com? That would be terrible. Your database would be lying to the rest of your app to save face, and you should replace it.

So why do we do this to ourselves? We’re reading, we see a word and we have only a limited idea of what it meas. So what do we do? We make something up and keep going. That’s like the database that makes up email addresses: it’s failing silently when it should complain.

So, if you’re reading a technical document, or talking to coworkers, or listening to a podcast, and you hear a word you don’t know, look it up. Figure out what it means. Then keep going.

There are two reasons that looking things up, rather than guessing what they mean, is particularly important in computer programming.

First, if you’re talking to another developer, and you misuse a technical term, there is a very high probability that they will assume you are stupid. Think about this: the word “dumb” used to mean, “can’t speak,” and now it means, “not smart.” How do you think it changed meaning? It changed meaning because people are heavily biased against unclear or incorrect language. Maybe that’s not fair, but it is true. So if you come to a word you don’t know, look it up.

The second reason that looking things up is especially important in computer programming is because we have specialized meanings for normal words. What does it mean to say a website is “restful”? Does your code have a lot of classes? How about a lot of arguments? How about a lot of style? Now, there’s usually some connection between the specialized meaning and the normal meaning, but you can’t trust it entirely; make sure you know the difference. Don’t guess; look it up.

Looking things up is also very important when you start a new field, a new job, a new programming language, whatever. You must know what the words mean, or you cannot know what is going on.

When I was studying to become a Latin teacher, we learned an interesting statistic: 95%. That’s the the absolute minimum percentage of words you must know before you can understand a written document. The minimum. That means, if you hear a 200 word talk, and there are 10 terms you don’t know, you will certainly misunderstand a lot of the meaning. To understand a passage without difficulty, you must know all the words.

So, make a rule for yourself. Whenever you encounter a term that you don’t know, look it up.  This will take 4 seconds at the time (thanks Google) and will save you both from making foolish mistakes and from having to look that word up again. Sounds like a good deal, no?

(By the way, the meanings of words are composed from the meanings of other words, and it makes a directed graph. Every time you find something in real life that can be represented as a directed graph, remind yourself how awesome computer programming is, and smile. And if you don’t know what a direct graph is, look it up.)

Till next week, happy learning!

-Will