|Keep It Simple, Stupid|
It seems that there are limited opportunities for advancement as a pure programmer. It also seems that there are opportunities to be a programmer out there that are actually facets of lucrative, challenging careers.
On "pure programming": Yes, there's only so far you can go as just a programmer. If all you know is programming, eventually you'll be replaced by some snot-nosed kid fresh outta college (or high school, for that matter).
The wise programmer will learn as much as he can about the business he's in, over and above the coding aspects. Maybe he writes code for a gravel company, so he learns everything he can about gravel, the gravel business, and so on. The programmer who knows business, and the specific business he's in, is far more valuable to his employer than the pure code jockey. He probably also cares about and enjoys his job more than the guy who walks through his career with blinders.
On what makes me happy: The key for me is to be happy in what I'm doing, and why I'm doing it. I spent 10 years working for Follett Software Company, a company that makes software for school libraries. It was very rewarding, but I wanted a change. So I went to a financial services company that traded options and derivatives. My job was basically "Help rich guys make more money using the web." I lasted two months. So I came back and got a job for sister company Follett Library Resources, where I'm working on a website that helps school librarians select & buy books. It pays about 20% less than the financial company, but I'm happier than I've ever been.
I see that job at the financial company as a blip in my history. If it weren't for the excellent learning experience, I'd be embarrassed. I don't even list it on my resume.
My point is really that I have to be able to come home at the end of the day and say "I feel good about what I did today". Perhaps the same is true for you.