First Lesson Of Programming: Simple Ain’t Easy

I would like to teach you everything I know about programming. This is the first lesson, and while it is simple, it is not easy.

Have you ever had a computer problem? It’s a ridiculous question. We’ve all had some problem at some point. Some task you want to accomplish, and you can’t do it.

The computer is a tool that offers the promise of infinite possibility. We can see it, shining like a mirage in the distance. Sometimes not far in the distance — the closer you are to your goal, the more painful the inability to get there.

The primary skill of a programmer is not intelligence. It’s not how smart you are, how much code you can write, how much magic seems to come from your fingers on the keyboard.

The primary skill of every programmer is managing frustration.

The computer never, ever gets frustrated. No matter how mad you get, how many swear words you try, the computer gives you the same answer over and over again. Sometimes the answer seems different; but constant difference can also be a frustrating kind of sameness.

The only way to succeed is not to quit. And the only way not to quit completely is to quit constantly.

If you’re having a problem, and you sense yourself getting frustrated, stop. Once your mind is frustrated you are useless as a programmer. Go get a glass of water, go outside and walk around the block. Make dinner, wash the dishes, watch a movie, go to bed. Do whatever you have to do in order to let the frustration go.

You will find, as you confront frustration again and again, that it gets easier every time. You get better at managing frustration. Eventually, problems that would have wasted a whole day, you can fix in a heartbeat and keep going.

What do you keep going on to though? Bigger problems. The Haitians have a saying, “Mountains beyond mountains.” You solve one problem, and the next problem sits there waiting patiently for you.

At first this seems like hell. Eternal problems! But that’s simply an incorrect way of looking at the situation.

World class artists face this. Led Zeppelin turned down Woodstock, and played in Atlantic City that weekend instead. The comedian Dave Chappelle walked away from his career at its peak, because it wasn’t right for him. How hard must it be to operate at that level, where your decisions are so monumental!

But this is what we all aspire towards: having bigger problems.

When you start programming, you will never be bored again in your life. There’s always something more you can learn. Another approach you can try. Different languages, different techniques.

But perhaps not all right now. You can’t try every approach tonight. I have found so many times that as soon as I let go, and walk away, the solution just jumps in my face.

The opposite of frustration is patience. Give up constantly, and come back constantly.

It’s simple. But simple ain’t easy.