I love reading the book Code Complete, by Steve McConnell. The following comes from it.
Laziness manifests itself in several ways:
– deferring an unpleasant task
– doing an unpleasant task quickly to get it out of the way
– writing a tool to do the unpleasant task so that you never have to do the task again
Some of these manifestations of laziness are better than others. The first is hardly ever beneficial.
This habit is “true laziness”. It manifests itself again in the habit of compiling a class to see it if works so that you can avoid the exercise of checking the class with your mind.
The small tasks are never as bad as they seem. If you develop the habit of doing them right away, you can avoid the procrastinating kind of laziness. This habit is “enlightened laziness” – the second kind of laziness. You’re still lazy, but you’re getting around the problem by spending the smallest possible amount of time on something that’s unpleasant.
The third option is to write a tool to so the unpleasant task. This is “long-term laziness”. It is undoubtely the most productive kind of laziness (provided that you utilimately save time by having written the tool). In these contexts, a certain amount of laziness is beneficial.
It’s easy to confuse motion with progress, busy-ness with being productive. The most important work in effective programming is thinking, and people tend not to look busy when they’re thinking. If I worked with a programmer who looked busy all the time, I’d assume that he was not a good programmer because he wasn’t using his most valuable tool, his brain.