Here's what I used to hate about being a programmer:
I'm happy for this guy and all, but the idea that "my company let me make a decision about my code" used to make my blood boil with fury. My code is my code.
I say "used to" because it's not an issue for me any more. I don't code for hire. Depending on your point of view, I might not even be a programmer any more. If "being a programmer" means "writing code for somebody else for money", then no. I make my money coaching programmers, marketing a video I made about programming careers, and blogging. I even make a tiny, tiny amount of money speaking at conferences.
But I still write code. It's code for my own purposes - most recently it's little FasterCSV sessions in IRB, deciphering information from PayPal, Reddit ads, and my bank. If your definition of "being a programmer" just means "somebody who writes code", then I'm in.
You might wonder what my definition is. I don't have one. And as for your definition, I hope it serves you well, but I don't care about it one way or another. My opinion is: I'm not a programmer, and neither is anybody else, because programmers don't exist.
The world you believe you live in sometimes makes more of a difference than the world you actually do live in.
A few years ago I became convinced that a "programmer" is the equivalent of a medieval scribe. Scribes got money for their literacy. That was it. They had this skill which we now consider a fundamental requirement for democracy and/or civilization, a skill without which our world would fall apart. The skill was rare at the time, so they got paid just for having it.
My original interpretation was that programmers are people who have a skill which has already become a fundamental requirement for democracy and/or civilization, and if there are any places where our world is falling apart, such as journalism, it's because people in that field lack this fundamental skill. The moment you find a journalist who has this skill, you find capability and success. Similarly, technical literacy made the Obama campaign happen.
Technical literacy is a requirement for success in the political arena, just as in business and everyday life (try meeting people and telling them you're not reachable online in any way, shape, or form).
A simpler formulation and corollary: programming is not a what. Programming is a how.
Before we get into that, let me take you on a quick detour through the more complicated formulation, and its corollary. We'll start with fractals.
Fractals have a quality called self-similarity. Fractals share this quality with recursive functions, owing to the fact that they are visual representations of recursive mathematics, of which recursive algorithms are actually a subset. What self-similarity means is that features at a microscopic level correspond to features at a macroscopic level.
Here's a famous fractal, the Mandelbrot set:
And here it is with self-similar features highlighted:
Technical illiteracy is self-similar. I'm tempted to call it fractal as well, but that brings up questions which could turn this into an extraordinary tangent (or just an even more extraordinary one, depending on your opinion). The point is the self-similarity. Not only are there pockets of technical illiteracy in the knowledge of any technical literate - for instance, a Unix wizard might know nothing of Objective-C - but new pockets come into being every day.
Not only that, but many of these new pockets also create bubbles of intense demand. Examples include Rails and the iPad. Within bubbles of intense demand, the base rate inflates. When you see a programmer of average skill making a better rate in a hot new technology than a seasoned, masterful programmer makes in a less trendy language (or framework, or piece of hardware), it's because there are always new areas of technical illiteracy for the fast learners and pioneers to exploit.
You can make a good living this way, but you can make a good living a lot of ways, especially if you have a type of literacy so essential that the world falls apart in its absence. And that brings me back to the simple formulation. If programming is not a what, but a how, then "what?" is an open question.
Most people answer "what?" with "sitting at a cubicle." Some people answer "what?" with "hanging out with smart people, solving problems and learning new things for the fun of it." But there are lots of other answers.
Not long ago, I was using programming to learn more about the entertainment industry and to get better at making music. Today I'm using it to work from home in my sweatpants, looking out my living room window on a beautiful sunny day with birds singing in the trees outside. Tomorrow I might be doing something new with it.
Answer "what?" the way you want to. It might seem difficult, but there's a great sense of victory to it when you do.
speaking of victory