This concept of a "great programmer" is something I find very suspicious.
A competently trained engineer who works with distributed systems may implement a trivial fix and save her company tens of thousands of dollars in AWS bills.
Someone with a strong background in programming languages might implement a PHP -> C++ cross-compiler and double the throughput of her company's web servers.
The capability to recognize these improvements does not require some inborn spark of genius. Rather, it requires the prerequisite experience in some programming sub-field. Experience which can be learned.
Moments of rare insight do happen - "hey what if we cross-compile all this crappy PHP to C++?" - but these are a matter of random chance: get enough folks with programming language expertise working on a strictly PHP codebase and eventually someone will have the idea.
The "born programmer" is a myth. A great programmer is often a person with a high level of training in some particular sub-fields, and/or, a person who is very savvy regarding the craft of building software (i.e. "The Pragmatic Programmer").
This is not about being "born".
I personally don't care how somebody got his skill. I really care about three things:
1. the speed with he/she learns new skills/knowledge/points.
2. the depth of knowledge he/she is able to acquire.
3. how much he/she has learned in his/her career.
1. This first measure is important, because in a startup the situation can change drastically and you have to have a team that can adapt.
2. The deeper he/she can dig the broader is the set of problems they can solve.
3. The third measure also plays a large role, because while you can have some body that is really bright and has "the skills" - but if they don't use them over time efficiently enough, their strength in the first two skills won't carry them far.
i.e. personally I would measure the value of a developer has a product of the three factors - they amplify each other.
I think your criteria sound very fair. I would be curious to know how many generalists - which is what you seem to be describing - are able to produce the kind of 1000x returns that PG was describing though. Perhaps your definition of a great programmer is simply more reasonable and accessible?
I believe 1000x is likely a combination of luck and a bunch of pre-conditions. Something like this:
1. you got a 10x-person or a bunch of 2x-5x ppl.
2. your organisation doesn't drag down this constellation; but actually supports it.
3. the right problem arrives and the right tools are close to be at the needed level; but before it's obvious to anybody but a few.
A note regarding the "right" problem. I believe there are a lot of problems that a "10"x won't achieve his/her true potential "10"x speed.
I think the "right" problem is more like a problem that matches the skills of the tea very well. The match might not be that obvious.
This is a very important distinction that a lot of people don't seem to make: you have the language, but you also have the domain. Someone who is skilled in front-end web development is not necessarily knowledgeable in, let's say, digital signal processing, so it's a safe bet that they won't be writing the next FFmpeg.
If someone told you that by merely learning Chinese, you'd be able to give out lectures on fluid mechanics in the language, that would rightfully be a laughable statement. Yet it seems to be a common belief in tech circles that if we teach kids to write some JavaScript, great things will happen and people become technically literate just like that.
I agree. There is all this amazing programmer talent all over then world and it's not about training, but then everyone is trying to recruit the kids from MIT and Stanford?
Having read the HipHop paper, I am pretty sure that most people would not have been able to contribute meaningfully to that type of revolutionary project. Execution is everything.
What advances in computer science were necessary for HipHop? It's a bog-standard JIT system of the kind we'd been building for years. Sure, it's well-executed, but it's hardly a "revolutionary project" to those who weren't born yesterday.
>I am pretty sure that most people would not have been able to contribute meaningfully to that type of revolutionary project.
I agree with you totally. Didn't a lifetime of learning lead to that achievement though? The concept of cross compilation between languages had been around for some time prior to HipHop.
They developed their knowledge and executed on it; but other people could, and would, have made the same connection under similar circumstances. They were experts with a specific set of skills. Not just born to be "great programmers."
A competently trained engineer who works with distributed systems may implement a trivial fix and save her company tens of thousands of dollars in AWS bills.
Someone with a strong background in programming languages might implement a PHP -> C++ cross-compiler and double the throughput of her company's web servers.
The capability to recognize these improvements does not require some inborn spark of genius. Rather, it requires the prerequisite experience in some programming sub-field. Experience which can be learned.
Moments of rare insight do happen - "hey what if we cross-compile all this crappy PHP to C++?" - but these are a matter of random chance: get enough folks with programming language expertise working on a strictly PHP codebase and eventually someone will have the idea.
The "born programmer" is a myth. A great programmer is often a person with a high level of training in some particular sub-fields, and/or, a person who is very savvy regarding the craft of building software (i.e. "The Pragmatic Programmer").