Becoming a good programmer is incredibly difficult and it doesn’t happen quickly. We can’t expect to plant some trees and have 2000-year-old redwoods grow overnight, regardless of the demand for them.
Programmers are often treated like factory workers. People with no programming talent (and less business sense) are often in charge of projects. They think programmers are cogs in the machines. The truth is programmers are artisans and to get the best results from a project the wise thing to do would be to ask the people who are experts at programming how things should be done! Just about every project ends up being over budget and behind schedule, forcing programmers to work tons of uncompensated and unappreciated overtime to deliver a poorly-designed and poorly-tested product. The great programmers realize that they’re not being paid more than the crappy programmers because management can’t tell the difference – and on top of that, they’re doing extra work to compensate for other programmers being below-par. And great programmers who speak up and try to change things for the better are often intimidating to managers, who often try to get rid of them (which is a general employment trend discussed in other posts). Enough of this and it’s easy to see why good people get fed up with the profession – especially since there are plenty of other opportunities. People who are even average programmers, as long as they’re reasonably good at dealing with people, have enough skills to be successful in a variety of other professions. Programming is something that can be easily transferred out of, but not into.