Programming is such an interesting job. I think no-one could convince me that they wholly dislike it or like it. There's just so many facets of it, it's like building a house, being the interior architect, plumber and electrician all at once. Oh, and also you get to to do maintenance on it if you manage to live in the same house long enough.. Some parts of the job are not very fun, but some of them are pure joy.
One of my favorite activities is architecture and design. Databases or software, it doesn't matter. I always want to find the most efficient solution, although usually I think I'm looking for the most beautiful solution, which then happens to be the most efficient. Databases can be made faster and smaller if you design the tables correctly. Programs can be made easier to understand to the user if the interface (GUI) is easy to understand (beauty in simplicity). And code can be the most beautiful thing or the most ugly thing depending on who wrote it and how the architecture looks like. A large portion of my work involves writing boring code that saves things to a database, tests if other code works correctly, designing endless reports for customer, or writing documentation for existing code that nobody else will ever read. But sometimes I get the chance to design something brilliant, a small piece in the big machine that just shines and stands out in elegance and simplicity. Code that performs its job and does exactly what it's supposed to do, and could not possibly be written any better (given the limitations of the frameworks and programming languages used, of course ;) ). It's only in programming that a plumber can be an artist.
And if I ever get bored designing a new component, there's always tuning. I guess tuning is more like a hobby. It's fun for me to squeeze every last bit of performance out of a database system or a piece of code. There's always some little thing that can be changed that will make the whole thing perform just a little bit better. I like it because it's simple. You know how good something is, then you change a part of it, test again, and you'll know if you made it better or worse. Incidentally, that's why I like my job as a speech recognition modeler as well. It's a clearly defined task. You know that whatever you're working on is currently this good, and it needs to be this much better. It's a mission, and you're free to choose whichever means necessary to accomplish it.
But it's not always that easy. Sometimes things get ugly when they have to perform better. Take a look at cars, for example. Formula one cars are the fastest there are, but I doubt many people will say that they're prettier than a nice Lamborghini or Ferrari road car. The same rules apply to programming. Sometimes you need a really nasty C or assembly hack to make something that was written on a higher level perform better. Or you could be faced with a situation where a couple of if/else statements perform better than an object-oriented solution. In that case I guess I would choose the most beautiful solution, even if it's not the fastest. I prefer to see software as a work of art rather than a tool.
(but actually, at home I much prefer a dirty little perl script over a beautiful java object-oriented enterprise architecture >_<;)
Oh yes: Efficiency Is Beauty. What do you think?