Absurdly good blogger Raganwald points to a Reddit comment on a Bruce Schneier post everyone should read which finally explains a big mystery: everybody "knows" that a good programmer is worth 10 to 1000 times what an average programmer is worth, yet the only way for a programmer to get paid 10 to 1000 times more than average is to start their own business.
Here's the long-story-short of the Schneier article, which explains the economics of the used car market:
[An economist] illustrated his ideas with a used car market. A used car market includes both good cars and lousy ones (lemons). The seller knows which is which, but the buyer can't tell the difference - at least until he's made his purchase. I'll spare you the math, but what ends up happening is that the buyer bases his purchase price on the value of a used car of average quality.
This means that the best cars don't get sold; their prices are too high. Which means that the owners of these best cars don't put their cars on the market. And then this starts spiraling. The removal of the good cars from the market reduces the average price buyers are willing to pay, and then the very good cars no longer sell, and disappear from the market. And then the good cars, and so on until only the lemons are left.
And Reddit user steveblgh says:
This is a great essay, and I just realized that it applies to the IT job market. Here the seller (the applicant) has all the info about himself, while the employer knows nothing. So what happens is that companies expect the average, and pay accordingly. That's why people who are smarter than average shouldn't go on job interviews, because they'll likely to get below what they are worth.
In terms of the economics, steve is dead-on. But I disagree with the normative component - the should - because the cure for this is obvious: blogging and open source. The problem is an information problem. You won't get a price below your value if you've got a reputation. If Jamis Buck goes to a job interview, he'll probably be looking at a good offer. But if a programmer whose code is just as good as Jamis's - or even better - goes into a job interview without any reputation to establish his skill, then yes, that programmer gets priced at the average level, which is to say, below their value.
As I've said before, geeks need marketing.
Unfortunately, you should take my advice with a grain of salt, or in fact a freakishly gigantic saline boulder, because I go on job interviews all the time. I can't stand doing the same thing over and over again - I've lived in seven different places in the last three years - so I never stay at the same company for very long, and I'm happiest when learning something entirely new. In the past the best solution for this has seemed to be working from home in my own consulting business, but constantly looking for the next client takes up a lot of time, so I frequently take short-term contracts, and many short-term contracts I go on result in long-term offers I turn down. (Conversely, every time I take on a long-term job, I end up leaving.)
Anyway, my point here is that I'm kind of unusual. I value variety over security, kind of the same way I value a Lamborghini over a golf kart. Adventure wins over safety every time in my book. I've even walked through gang neighborhoods in gang colors just to see what would happen. I got in a car accident that had me sliding downhill backwards at 80mph, pointed directly at five lanes of oncoming traffic, and I remember it as the most fun I've had in years. Please understand that my methods are not for everybody.
The more common value hierarchy puts security above excitement, and it's pretty obvious to me what I would do if I had more conventional values. The path to success as a programmer is very clear: in addition to studying programming and excelling at it, study marketing and excel at that too. Make sure people know your code, or your ideas, or ideally both. And stay off the job market; only ever even consider job offers if they come from friends.
The reality is, there are great programmers who are underrated, and there are good programmers who are overrated. It's not the code that makes you the money; when it comes time for salary negotiations, it's the rating that matters, whether over-, under-, or accurate. I'm pretty sure no programmer worth the grain of salt with which they take my words would like to hear that, but it's true. Consider: nine times out of ten, a programmer's implementing strategic decisions made above his or her head by some management type who doesn't know a thing about code. Popularity is the only metric by which an uninformed businessperson can evaluate competing technologies, which explains a lot of the bad technology decisons that businesspeople make.
(Although we shouldn't let them off the hook for not finding better metrics.)
As for me, I'll keep going on job interviews, keep blogging like crazy, keep studying acting, keep writing screenplays, keep releasing white label DJ records, and maybe, if I get lucky, I'll start a side business in motion design and release a few Rails plugins. (Don't quote me on that, though.)