Software, as Marc Andreesen said in his famous editorial, is becoming a larger and larger part of our daily lives. Given how important software is, then, you'd expect computer programmer - the task of developing and maintaining software - to be one of the highest-paid, most-wanted jobs. It isn't. Why not?
"Hold on", you say, "isn't programming a high-paying job"? Sure, next to the average American worker. But the average American worker is a college dropout. What if you compare programming to jobs for other highly skilled professionals?
Consider a 35-year-old, senior Google engineer. He probably makes about $150,000, which is enough to buy a good house and raise a family. But Google wouldn't hire a random guy to fill that job - this engineer probably has an Ivy League or other elite degree, fifteen years of work experience, a very high IQ, strong drive, and numerous other skills (anyone who's been through the Google hiring process can tell you how hard it is to get in).
As a doctor, however, someone like this - a top professional at the peak of their career - would probably make about $400,000. Partners at big law firms commonly net a million a year. Investment bankers are making several million (post-crash!). Top management consultants easily clear $500,000. Even a top accountant - probably a partner at a big 4 firm - would make two, three, or four times as much.
Of course, life isn't all about money. Is programming a top job from a social perspective? Again, no. Congress includes not a single programmer, and to my knowledge, it never has. Almost all big companies are run by MBAs. Even Microsoft, arguably the canonical software company, is run by a non-programmer from Stanford Business School.
Are programmers top government advisors? Are they national heroes? Do doctors and lawyers and policemen tell their children that, if they work hard and practice, one day they can grow up to be a programmer? No. Obviously not.
When the government wants to bring in more workers from overseas - which obviously lowers salaries, and reduces job security - who do they bring in? Computer programmers. Every single one of the top ten H1-B visa users is a technology company. Politicians justify this by talking about a "shortage" of programmers, but would there really be a "shortage" if programmers were paid $500K, as much as doctors or management consultants? Of course not. Saying there's a "shortage" is economically the same as saying that "we don't want to pay you guys enough to meet the demand for labor".
Now, to wrap off, since this is a startup site, doubtless someone is saying "but programmers can make millions in startups!". This, on the face of it, is true. However, as I'm sure any founder here can tell you, you can't make a successful startup just by being a good programmer. You have to, to quote Paul Graham, also "answer support calls, administer the servers, design the web site, cold-call customers, find the company office space, and go out and get everyone lunch."
Now, if you're willing to do all that, and work the eighty-hour weeks a business requires, why do you need to be a programmer to make it rich? You don't. There are millions of ordinary small businesses - ditch diggers, electrical companies, contractors, roofers, construction firms, and on and on - that, if run well, will make you millions without a single line of code. (For more on these sorts of business, check out, eg., the book The Millionaire Next Door.) What "programmers can get rich in startups" really means is "entrepreneurs can get rich in startups", whether they're programmers or bricklayers.
So, why is this the case, given how important software is to the world? I think the answer is hidden in the rest of my post. Notice how I've been arguing for more pay, job security, etc. for programmers. A majority of the people here are probably programmers. Yet, my tone is pretty argumentative; I expect people to disagree with me, and am trying to answer their objections.
Why is that? On the face of it, it's very strange. If you went to a welder's union, and argued that welding wasn't respected enough and should be better paid, you'd expect to see loud cries of agreement. If you talked about better wages for teachers or policemen or nurses - all of whom make more than the American average - who would dispute it?
But for some reason, unlike just about every other profession, programmers seem to have an aversion to asking for more pay and more respectability. It would seem selfish, somehow - a programmer making $80,000 feels he shouldn't ask for more, since he's already making double the US average of $40,000. (Even though, when a teacher making $80,000 (as many of them do) asks for more, no one disagrees.) And you could argue that this is selfish, even though it's the sort of selfishness America usually endorses. After all, when the miner's union strikes for better working conditions, aren't they being selfish? They're acting in their own self-interest, trying to benefit themselves.
So, if you don't like being selfish, is there a reason to make programming one of America's top jobs? I think there is. For the last ten years, the people running the US have been other, non-technical top professionals - lawyers, management consultants, investment bankers, MBAs. And it hasn't worked. The economy is in the toilet, the budget isn't balanced, the government can't get anything done, we're in two wars we can't get out of, and some days it feels like the country is falling apart at the seams.
By contrast, when you look at Silicon Valley, where a lot of the top programmers live and run the local industry, everyone is doing great. Profits are up, unemployment is down, companies are getting started, and user growth is through the roof. Might this be a coincidence? I think it isn't. And for proof, look no further than China. All of China's top leaders are engineers, not lawyers or financiers or consultants. And China's been doing great. They've had steady, 10% annual economic growth - triple the US's, even in good times - for the last thirty years. Sure, they have problems with pollution and corruption, but so did the US when we were industrializing. Overall, though, they're on the right track, and the US is not (according to 85% of Americans anyway).
Of course, that isn't to say that most non-programmers are stupid or immoral, or that we shouldn't have any lawyers in government. Any well-run society has a mix of people at the top, because of specialization of labor. But is the optimal number of programmers in Congress really zero? Is it good for the country that Silicon Valley, arguably the best-performing sector of the economy, has next to no influence in politics, so that laws like the DMCA get passed even when the whole hacker community is violently opposed? I think it isn't. I think the country would be better off if MIT computer science students, like their neighbors at Harvard Law School, could dream of growing up to be President. And I think we'd all be better of if computer science wasn't just seen as a major for socially awkward nerds.
(Original WSJ editorial I'm referencing at http://online.wsj.com/article/SB10001424053111903480904576512250915629460.html. I've been on HN since '08, but using a throwaway in case anyone gets mad.)
The core of your argument is entitled whining.
Computer programmers can make truckloads of money the same way that everyone else can: by seeking it. If your professional goals are aligned with making money, then your chances of making a lot of money go way up. Top lawyers aren't paid the most because they know the law the best; that's ancillary. They're paid big bucks because they win money for their clients, prevent their clients from losing money and build networks to people that have money to give them. Likewise, programmers who define their goals economically (which broadly includes creating value for users) have nearly unparalleled earning potential.
8 of the 20 richest people in America are (or have been, at least nominally) programmers.
The crux of things is that you don't get rich for being a skilled technician -- and I use that word broadly. Lawyers don't get rich for knowing the law, bankers don't get rich for understanding economics and programmers don't get rich for slinging code. You get rich by creating value (or at least tying yourself at an opportune moment to a benefactor whose goals are so aligned).
The rest of folks are compensated at prevailing market rates for their technical skills -- and incidentally, American programmers are paid better than in almost any other country.
But claiming that "computer programmers don't get respect" is broken on so many levels. First, computer programmers are certainly among the most respected trades. You need to interact with a broader cross-section of society if you believe that not to be the case. Second, the baseline for becoming a programmer isn't very high -- certainly nothing on the order of becoming a doctor or lawyer. The median programmer has jumped over far fewer hurdles than the median doctor or lawyer. (I got my first programming job at 17. I'd have needed another decade of non-trivial training before I'd have been able to get a job as a doctor.) The spectrum is far broader for programmers, and as such, the respect a programmer commands has more to do with their actual status within those ranks than simply being a part of that trade. But again, the spectrum extends up to "richest person in the world", so we're hardly being shafted.
If being respected among the elite is something that you want, align your goals with that. If it's not, enjoy the fact that you're in a trade where even untrained, mediocre practitioners reach the top 10% of American incomes.