Laziness, Impatience and Hubris
Larry Wall, the creator of Perl, wrote that the three great virtures of a programmer are Laziness, Impatience and Hubris.
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.
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.
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.
This was a philosophy I always had a lot of time for, a sound ethic with some humour thrown in for good measure. And certainly, my early programming ventures in the late '90s started out this way. By the time I'd wired up a few forms to cgi back ends and populated databases, I'd realised how I was repeating the same thing over and over again with essentially a few variables... so I quickly threw a framework together - read database structure, read a config file, generate a form from it. On form submit, same config file for input validation, automatically populate or update database. Then I added a templating engine, and before long I didn't have to do any work but front end, and impatiently add new features to the framework as and when, in the hope tha one day I would need them.
In 2007, PHP programming was becomimg more and more requested, and in true lazy style I took all my perl framework code and rewrote it in PHP before I started to do anything else. Again, I saved a lot of time. As Web2.0 took hold I made a multi window drag and drop interface for it, and other people could use it too. At one point over 100 live web sites were using it, together with a shopping cart component, all built out of and extending the original code. Several rewrites later, when PHP could handle it, it became fully OO and ran as an API service too.
Now node.js is stealing the show... I wonder if I have to rewrite it all again? If it turns out that it's the laziest option again, I probably will.
As it happens, I got a job doing Perl again. It's been a strange and wonderful ride, and it's good to be home.