I enjoy programming and would like to be doing it at 50, but with regard to the software industry itself... not in its current state.
If you want to be able to survive more than 10 years in the software industry, you need to get manager-level clout and full autonomy over your work. That's non-negotiable. This industry destroys you if you don't have those things.
The terrifying thing about the software industry is that if you don't continue to get good work, you decline pretty quickly. Also, I honestly think 90% of what makes some engineers great and most not (once filtering for natural talent has taken place) is past experience: you need a continual stream of high-quality work to become and remain decent at this job, and the good stuff is rare.
The actual work of programming can be a lot better (more interesting, more rewarding) than anything that managers do. The hard part is figuring out a way to be a full-time engineer but retain manager-level clout.
Many engineers think that actually becoming managers will give them what they need to enjoy engineering again, but the problem is that this strategy doesn't work. If you're a manager and your reports figure out that you're taking all the interesting work for yourself and throwing them the scraps, they'll get pissed off and either underperform or leave.
There is another option: find a really good manager who is able and willing to give you what you need, make sure they understand your value, and stay with them.
I don't really know how to do that, I just got lucky. I moved into management myself about five years ago (still working for the same guy), and I'm trying to be the same kind of manager for the people who work for me.
I like that idea as well, but the problem is that your manager will, over the long term, change. Most people have no insurance against some person they've never met being hired above them. You need enough independent credibility to protect yourself against that. You have 5 years of managerial experience, so you probably have enough work experience that any job move would be a likely promotion, so your company has incentives not to treat you badly.
I used to think the software industry was about programming: writing great code to solve hard problems. It's not. It's about credibility and technical risk. The software industry is 90% industry and only 10% software. Most of your time will be spent convincing people to allow you to do useful stuff, not actually doing useful stuff.
The ironic thing is that, as software jobs increasingly slide toward looking more like widget-making and less like research, programmers become a lot less effective. Valve established that open allocation works. (http://michaelochurch.wordpress.com/2012/09/03/tech-companie...) Every other software shop has proven that the alternative (still more popular) doesn't.
The Death of R&D, I think, will be looked upon as the "conscious" decision (of course, large groups such as nations do nothing "consciously"; it's a historian's metaphor) of the United States to go from a world leader to third-rate in a few decades.
Most of my experience has been in product-focused teams, so there is a good mixture of R&D and polish work. The company as a whole has to spend time convincing customers that our product is useful, but the development team is able to focus on actually making a useful product.
I can see how what you're saying could be a much bigger problem in a project-focused organization (or if you're working on a product that isn't actually useful). So maybe my advice is twofold: "find a good manager and stay with them, and work for a company that values software for its long-term potential."
My version of "values software" is that it be mission-critical. If it breaks, we're going to be chatting at 2 AM and testing a patch at 3, because we'd lose vast sums of money or customers by waiting until after breakfast. I met my favorite manager turning around a shop like this.
Most software is utter garbage because everyone knows better than to actually rely on it and nothing bad happens to incompetent people maintaining it.
Just making heads roll is not going to magically improve software. You can keep firing your teams but if there are other issues like unrealistic deadlines, bad process you are going to get bad output even from good people; all firing will achieve is churn.
I don't necessarily mean firing people (though there are some who really aren't good fits for this work). I mean I see better work from people who literally lose sleep over bugs, rather than merely shrugging.
> If you want to be able to survive more than 10 years in the software industry, you need to get manager-level clout and full autonomy over your work. That's non-negotiable. This industry destroys you if you don't have those things.
Can you explain this further? I've been a developer for 12 years, never happier, making very nice money and constantly getting interest from other companies. Yet I have neither of those things, nor do I even want them.
Current landscape in the industry provides an out for this. Its become easy to blog, contribute code socially, or simply run your own startup on the side, while you slog in your mundane day-job. All this empowerment will only make you hate your employment all the more... so either you will quit or become apathetic.
High-powered service-oriented software companies like Google and Amazon are great for this, where every engineer runs their own project and has vendor-client relationships with other engineers, where the vendor bills are paid by management based on client satisfaction.
If you want to be able to survive more than 10 years in the software industry, you need to get manager-level clout and full autonomy over your work. That's non-negotiable. This industry destroys you if you don't have those things.
The terrifying thing about the software industry is that if you don't continue to get good work, you decline pretty quickly. Also, I honestly think 90% of what makes some engineers great and most not (once filtering for natural talent has taken place) is past experience: you need a continual stream of high-quality work to become and remain decent at this job, and the good stuff is rare.
The actual work of programming can be a lot better (more interesting, more rewarding) than anything that managers do. The hard part is figuring out a way to be a full-time engineer but retain manager-level clout.
Many engineers think that actually becoming managers will give them what they need to enjoy engineering again, but the problem is that this strategy doesn't work. If you're a manager and your reports figure out that you're taking all the interesting work for yourself and throwing them the scraps, they'll get pissed off and either underperform or leave.