Hobbits make great programmers

An edited transcription of a short talk by Larry Wall, creator of the Perl programming language.

Laziness, impatience, and hubris - these originated as sort of a joke in the first edition of what we call the "camel book", Programming Perl, in a sense that they are the three virtues of programmer.

A lazy or impatient person will always be looking for ways to do something faster, more efficiently.

And if you really want to "control the world", that's a really hubristic notion - you know, excessive pride, the thing that Zeus zaps you for having.

In the Japanese translated edition of the book, after the phrase "laziness, impatience, and hubris", they actually had to put "this is a joke" in parentheses, because they felt that readers would take it seriously.

What makes a good programmer is much more than those three things.

If you've read the Lord of the Rings or seen the movies, you know about hobbits. Hobbits manifest many of the virtues that you need as a programmer.

You need to have persistence when the going gets rough, to keep slogging through with innate stubbornness - in a happy way, not in a mean way.

You have to be smart enough to outwit your enemies occasionally.

And you have to be able to be social. You have to be able to deal with a group, your team members, some of whom are other hobbits, some elves, dwarves, or even men.

They think very differently from you, so you have to be able to contribute your part as a hobbit, but also be able to understand other creatures. The days are long past when most programming was done individually. Almost all programming is done in teams.

So you need to be literate, in the hobbit sense of "knowing your letters". You have to be able to read documentation. You have to be able to write documentation that others can understand.

Mostly you have to be slightly insane in the way that hobbits are.

They can view the long term - you know, the goal is to get back to your comfy burrow and view everything between here and there. And at the same time, forget about all that, and just deal with the problem you have at hand.

When you're on a computer, you're telling it to do various things by name, and it's going off and doing those. You have to be aware of what it's doing down underneath, but if you're always aware of what everything is doing, you're going really nuts. So you also have to be able to shut that out, and work on the high level abstraction.

And doing both of those simultaneously gives the best result in programming. If you ignore either one, you end up messing up - so that's what you really need.

A hobbit is lazy in a very industrious way. A hobbit is impatient in a very patient way. And a hobbit is proud in a very humble way.

It seems like a contradiction, but to the extent that you can increase your dynamic range on all of those, you'll be a better programmer.