Laborer, Craftsman and Artist: Ideas about Programming

One who works with their hands is a laborer.
One who works with their hands and their mind is a craftsman.
One who works with their hands, mind and heart is an artist.

The 3 virtues of a programmer as defined by Larry Wall, Randal L. Schwartz and Tom Christiansen (in Programming Perl).

– **Laziness – 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.
– **Impatience – 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.
– **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.

“Nobody should start to undertake a large project. You start with a small trivial project, and you should never expect it to get large. If you do, you’ll just overdesign and generally think it is more important than it likely is at that stage. Or worse, you might be scared away by the sheer size of the work you envision. So start small, and think about the details. Don’t think about some big picture and fancy design. If it doesn’t solve some fairly immediate need, it’s almost certainly over-designed. And don’t expect people to jump in and help you. That’s not how these things work. You need to get something half-way useful first, and then others will say “hey, that almost works for me”, and they’ll get involved in the project.” — Linus Torvalds