Could you provide an example what such an amazing programmer knows?
In my experience beyond a level employers cannot even measure your knowledge, because that would require them to be really good at what you know best.
If you are an extremely good developer, you can get a job at Google or at a similar company, and you will receive slightly better than average compensation.
But getting 5x market rate? Being a good programmer is not enough for that I think, no matter how good you are (unless you built something truly special, like solving NP problems in P.:)). You have to build up your personal 'brand' for that I am afraid.
Edit: I am really curious who are those extremely smart programmers.
I'm 13th on the TopCoder list (1st in US). I'm not sure that the list matters as much as you think. I can solve algorithms problems (those similar to what you see on TC) very quickly, but they just don't come up that frequently at my job. That skill does make job interviews a joke.
The main difference is that I have spent a lot of time working on writing code quickly and correctly. Every time I competed in TC I would read the code of the best people and try to figure out why their code was so much simpler than mine. Now I think I can write clean code faster than most.
The downside is that I have spent a ton of time working on 50-200 line projects. Throw me into a 500k line code base and I'm no longer world class.
Getting to where I am is mostly a product of spending a ton of time in college practicing for programming contests. In college I saw a very strong correlation between time spent programming outside of class and programming skill.
When I'm interviewing programmers, I would define "amazing programmer" as a combination of 3 things:
1) Talented: Can they code well, even when things get tricky? This loosely correlates with things like TopCoder rank, but it leans more towards software engineering and debugging skills.
2) Driven: Are they relentlessly productive, even without supervision?
3) Solves the right problem: If there's a solution which provides 80% of the benefits for 20% of the cost, do they find it? Do they also know when it's time to turn a nasty ball of hacks into a rigorous model?
If you have these 3 things, then you will easily create 5 times more value than the average programmer. Note that you won't necessary get paid 5 times more, because that also depends on your negotiating skills, your marketing ability, and how much money your clients or employers have.
I live in Eastern Europe. I have worked at the local branch of several multinational companies. When I applied to a job, I solved the interview problems and then I was offered a slightly more than average salary the same way as my colleauges. None of the interview questions were deep enough to mirror how I think about really hard problems. The only way I can really measure myself is to work on problems like the Netflix prize, build my hobbyprojects (and I participated in math competitions when I was a child), etc.., but these are not related to my day-job. I earn $36000 a year currently.
I once started a topic on HN where I have written this: please give me a very hard 'test' task (which can be solved in one or two days, but very tricky), and if I can solve it I would be interested in remote work for more than $36000 a year. (Which is slightly above market in Hungary) But no one answered.
About your 3 points: I agree that having these in one person is a good combination. However people are rarely exceptional in all 3 points. Some guys are exceptional algorithmizers, others have really good intuition for enginering, creating an amazing design (for code), yet others have exceptional memory so that they can dive into huge bloated shitty code, and yet others deal well with monotony (when you have to do unchallanging tasks, or deal with other people's shitty code). Some people are fast like hell, others can grow beautiful thoughts if you give them days to think about a problem. But I agree that a bit of all of this is needed mostly. Also being strong in one territory you can emulate other strengths. If the tasks are not on your limit, you can emulate fastness with smartness, and emulate smartness with being fast. But when the problems are hard enough that you are at your 'limit', this emulation no longer works.
One of the most amazing programmers I've ever worked with was Vadim Zeitlin, a core contributor to the wxWidgets project and resident of Paris. We hired him to port Quake 2 to run on top of the wxWidgets, and it took him 3.5 days. His work helped save a multi-million dollar project. Now, his daily rate wasn't cheap, but we were delighted to pay it.
If you want to earn more than average, here are some suggestions:
1) Contribute heavily to an open source project, preferably one used by people with lots of money. This demonstrates your talent and drive more clearly than a few interview questions.
2) Learn how to market your skills and how to negotiate. For the former, study patio11's career. For the latter, try reading "Getting to Yes" from the Harvard Negotiation Project.
Thanks.
I am creating a component-based GUI lib right now which is written in pure Javascript and which is all painted on a HTML5 Canvas. (it is intended as a Flash/Flex killer) (5200 lines is ready currently) I've implemented all the styling, dynamic layout and painting from scratch. I will open source it, so even if it will not be successful as a startup, I hope at least it will be good to convince clients/employers that I can design/program nontrivial things.
I think that employers generally don't pay employees significantly above market salaries. Certainly not double, even if they're worth 5x or 10x another employee. Their HR departments won't let them. To do significantly better, you need to be starting a business or contracting. And if it's contracting, you'll probably have to be doing fixed bid contracts, something that divorces your hours worked from the amount paid - so that you don't run into a "we pay no more than $x/hour" clause, where x is whatever the local lousy body shop charges.
Knowing things isn't really the tip off of a good programmer.
Put them in a foreign environment, with a foreign language/api/framework/application/etc and within a short learning curve they will find solutions to problems 1) you didn't know you had, or 2) you had long since given up on finding a better solution to.
If you can replace the programmer with books (and time to read them), they can't be that valuable. You don't pay one person 5 times market rate if 5 people at market rate can do their job. You pay someone for the concentration of talent.
You don't need provide 5x to the value, you just need to convince the employer you are.
Also, much of a programmer's worth pays off over time: specifically how easy is it to maintain their code? Writing truly maintainable code is HARD and difficult to quantify.
Yes, and I think you cannot convince them on a standard job interview. A job interview is like this: you solved the problems we gave you, congratulations, we hired you (for slightly more than market rate). They will not give you harder and harder inteview questions and finally give you 5x market salary in my experience.
Earning 5x market rate is not only about capabilities but more about building a very interesting track record, personal brand, which helps you differentiate yourself and helps you convince clients about your value. It is a bit like a long-term strategy game.
Edit: I am really curious who are those extremely smart programmers.
Guys on the top of this list?
http://community.topcoder.com/tc?module=AlgoRank
Or guys who were at the top of the Netflix prize top scores list?
Those are some truly gifted guys (one in a million caliber), but even most of them don't earn 5x market rate.