The 3 virtues and vices of a programmer

I've always liked that quote by Larry Wall:

"We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris."

He later defined those terms in a book as follows:

The quality that makes you go to great effort to reduce overall energy expenditure. It makes you write labor-saving programs that other people will find useful, and document what you wrote so you don't have to answer so many questions about it. Hence, the first great virtue of a programmer. Also hence, this book. See also impatience and hubris.

The anger you feel when the computer is being lazy. This makes you write programs that don't just react to your needs, but actually anticipate them. Or at least pretend to. Hence, the second great virtue of a programmer. See also laziness and hubris.

Excessive pride, the sort of thing Zeus zaps you for. Also the quality that makes you write (and maintain) programs that other people won't want to say bad things about. Hence, the third great virtue of a programmer. See also laziness and impatience.

While laziness and impatience are not too bad when you think about what they really mean for a programmer (slightly less efficient and bad temper), hubris can really lead to issues in a team environment.

No one likes being showed its flaws and when someone refactors your code it always hurts unless you knew it wasn't that well written. However, if you have "excessive pride" and really write so that people have nothing bad to say about your code, what happens when someones does improve it? You'll be mad or you won't want people to review your code.

Nothing good can come from hubris, you should just write code as good as you can while knowing that there's always another way to write it, and that your way may not be the best.

Michel Billard's profile picture

A web developer's musings on software, product management, and other vaguely related topics.