Useful Mistakes, or The Three Principle Virtues of a Perl Programmer

There’s a great meme that goes around on occasion, which is a motivational poster of some kind with the words:

We do these things not because they are easy, but because we thought they would be easy.

If you’re not familiar, it’s a reference to a line from JFK’s famous speech, justifying the moon program:

We choose to go to the Moon in this decade and do the other things, not because they are easy, but because they are hard; because that goal will serve to organize and measure the best of our energies and skills, because that challenge is one that we are willing to accept, one we are unwilling to postpone, and one we intend to win, and the others, too.

There is truth in Kennedy’s approach—it is the basic foundation of how we teach children—but it is extremely rarely done by adults for the simple reason that adults usually have better things to do. The truth is that the moon shot program wasn’t really about human advancement. It was a massive game of capture-the-flag played with the Soviets as a PR stunt, which is why we and they both stopped shortly after the US captured the flag (by which I mean, planted a flag on the moon).

Which gets us back to the original quote: there are a lot of times when somebody does something useful because he thought it was going to be a lot easier than it turned out to be, but by the time he put a lot of time into it he found that the harder version was actually worth doing, especially because he was now in a place to do it with a lot less work than if he was starting from scratch. And this is an example of what I would call a useful mistake. Another example would be what Larry Wall, inventor of the Perl programming language, famously called the three principle virtues of a Perl programmer.

Those virtues were: laziness, impatience, and hubris. These are, of course, rhetorical, since laziness, impatience, and hubris are actually vices. What Larry meant (and explained in his own words) was that there are things that look like these things, but are actually good habits. What he called laziness is really foresight; good design so as to avoid having to do excess work in the future. What he called impatience is really ambition, or the desire to solve problems—to not be willing to sit through endless drudge-work when it was possible to write a program to do the drudge-work instead. And what he called hubris was really faith—the faith that one could see the task through to its conclusion. “I can do this,” in spite of not (yet) being able to point to conclusive evidence that you can.

The ideal would be, of course, to have a perfectly accurate estimation of both the amount and difficulty of the work to be done, and also of one’s ability to get it done. We very rarely achieve perfection, though, and so choosing the kind of failure mode we want is important. Would we prefer to fail at our estimations in a way that makes us start more projects, or start fewer projects? That is, is it better to waste time when we make imperfect estimations of difficulty and our ability, or to leave undone things we could have accomplished? I think that there is much to be said for the former, because we can always give up when it turns out that something was too difficult for us, and this will help to refine our skill at estimating difficulty. If we bias our failures towards leaving things undone, there’s no reason we’d ever decide to start up, and there will be nothing giving us feedback about our accuracy of estimating difficulty.

So I think that there’s a lot to be said for slightly under-estimating how hard things will be; your life will tend to be better off for it. And to counter-balance people saying that you should be humble about your abilities, this is just being humble about your ability to estimate how difficult something is. Ultimately, when it comes to worthwhile things, we never know what we’re getting ourselves into, so we have to live by the faith that something good will come of our efforts. This is really just making the decision to have some faith.

Patience is the Most Practical of the Virtues

Most of the moral virtues have a reputation for being impractical. Honesty may be the best policy, but it often makes for a great deal more work for the person telling the truth, at least in the short term. Courage is necessary to practice any other virtue, but courage also means having the courage to do things that will cause oneself a great deal of trouble. Diligence is almost the definition of impracticality; it is at least literally the opposite of laziness. And so it goes with most of the others. But patience stands apart from the others in being not only virtuous, but highly practical.

It has been said that insanity is doing the same thing and expecting different results, but the truth is that one never does precisely the same thing twice. The first time always does something, so the second time takes place in a different world. This is especially true when it comes to dealing with people, who usually remember the past. And this is where patience shows how practical it can be.

Anyone with any experience of the world knows that talk is cheap and when it comes to actions, a great many people will try anything once. Accordingly, when people state an intention, or even when they try to do something, the most likely outcome is that this is the last you have heard of them. It does not take a great deal of experience with the world to become accustomed to delaying responses. It is true that if you leave the dishes in the sink, they will be harder to clean the next day. It is also true that if you leave them on the table, the dog will probably clean them off within a few minutes so that you can stick them straight into the dish washer without having to scrape them first. The reason that procrastination is so common in this world is because it is very effective. Many, if not most, problems simply go away if you ignore them long enough.

This is why there was the story of the importunate widow in the bible. (Importunate comes from the same root as importune.) There was a judge who neither feared God nor respected man, and a widow who never ceased to demand justice from him against her enemy. For a long time he ignored her, but eventually he said to himself, “Though I neither fear God nor respect man, I must give this widow her rights or she will come slap me in the face.”

There is another practical aspect to patience, because patience must come from a source, and that source will carry a person through the execution of what they undertake. This is especially important in organizations with limited resources; to give someone what he asks is to commit resources which could be used elsewhere, even if just time. When people are willing to wait, it shows that their zeal has a reasonable chance of surviving the execution of their undertaking. Especially since all human undertakings in this fallen world will meet with adversity.

Patience is also involved in every attempt at learning. Whether it is practicing as skill or reading entire books to find out which are the good parts (if one isn’t reading Chesterton), learning will never be acquired without patience. This is perhaps especially evident at dance classes; a great many people quit because they don’t have the patience to look like a fool for a short time. It is true everywhere, though. Many people give up ice skating because they do not have the patience to fall a few hundred times. People give up learning to knit because they cannot stand to make a single misshapen scarf whose stitches are far too tight. Many a potential juggler has juggled nothing because they got tired of chasing after balls thrown wildly.

It has, for these reasons, always struck me as odd that patience is not a more commonly practiced virtue. It comes up almost any time one wants to accomplish anything, even vice. Pickpockets must wait until the right target comes along. How much more, then, will patience be required to practice virtue?