Hacker News new | ask | show | jobs
by chrisduesing 4226 days ago
Does this imply we are headed towards a future where there isn't a 10x difference between the best programmers and the worst? Where someone comes up with repeatable training that can help programmers advance throughout their career?
7 comments

Probably not anytime soon.

We simply do not spend a serious amount of time on learning/practicing correctly. We spend the majority of our time "cutting code" rather than on skills development.

Even the average google developer mostly does work which doesn't really push them. They are still learning but at a much slower pace than they could be. So we aren't really learning quickly at work.

Maybe 20% of the profession spends a serious amount of time (5+ hours a week) on software development outside of work. Of those the vast majority are either mostly "doing" by working on an idea/open source (aka a lot of the HN crowd) or learning the latest and greatest framework/language etc while ignoring the huge gaps in their fundamentals.

This line comes to mind:

Young Composer: "Herr Mozart, I am thinking of writing a symphony. How should I get started?"

Mozart: "A symphony is a very complex musical form and you are still young. Perhaps you should start with something simpler, like a concerto."

Young Composer: "But Herr Mozart, you were writing symphonies when you were 8 years old."

Mozart: "Yes, but I never asked anyone how."

His father was a famous music teacher and started teaching him at age 4 (and he watched his sisters lessons already at age 3).
If you could take 10 4 year olds and start training them in music that way, you won't get 10 Mozarts. I doubt you'll get one. (I'll concede they may all be very good for 8 year olds though) Different people learn different ways.

I guess my point is, for a given training program, you're going to have a wide distribution of effectiveness of graduates.

While I agree with you (genes and all that) just in case someone doesn't know, someone was set to prove that you can in fact raise a "genius", with success in the case of his daughters http://en.wikipedia.org/wiki/L%C3%A1szl%C3%B3_Polg%C3%A1r
Yes,

But if you take 10 mozarts, who don't have a father who is a music teacher, doesn't have a sister whom he can watch getting trained and his own training doesn't start at 4.

I'd doubt if they would do anything in Music. Let alone become some one like mozart.

There's a real life case study we can use here.

The Jacksons. Joe Jackson pushed his kids really really hard often to the point of abuse. All of them are good singers now but only one of them became Michael Jackson.

But is that because MJ was better than the others, or because his marketing played out better? There might be some factors independent of the skill of the individual that end up making a star.
Mozart was an early prodigy for sure, but from what I recall, he didn't put out any really good music until his 20s, and didn't write a masterpiece until his 30s.
I think its currently true in our industry, although its hard to measure. The difference between "rock-star" and avg developer (even the ones without CS degrees) isn't no were near 10x. Could be because the tech changes so frequently, so everyone starts at zero every 5 years. Another things is that everything is open, open-sourced, books, talks, videos its easy to become a avg developer. I always thought software engineers have a lot in common with athletes; limited shelf-life, make good money (although not as much but within 2-3x over avg career), can retire young (if successful).
"The difference between "rock-star" and avg developer (even the ones without CS degrees) isn't no were near 10x"

It is significantly higher than 10x. The "problem" is that a) talent is wasted, b) talent is concentrated, c) talent is context based, and d) we apply the term "rock-star" to basically anyone better than average.

Usually there is only a 2-3x difference between team members and so a guy at google who is a 10x'er is likely only 2x as good as the rest of the team. But the average googler is in the top20% of the industry and is 3-4x better than the average dev.

Regarding c) I'm a 5-10x'er when working with large legacy code bases in a specific domain. Put me in a lean startup though and I am average at best.

I call BS on this. Your telling me that you can do a avg task in one day while it would take some avg developer 5 to 10 days. The amount of information that is out there -- it would take a simple Google search or a day or two of researching to get enough info to complete the task. I am not saying that there aren't tasks that require highly specialized knowledge -- but this is pretty much not true for most jobs out there.
Of course I can... within my niche anyway! I'll provide some extreme examples to help show you what I mean.

Example 1) A good games developer can easily create a game in a week that would take the average developer months. The average dev has never even developed a game before.

Example 2) Have you ever worked on a large codebase (500,000+ loc)? Fixing a defect in a codebase that kind of size is not something you can easily google. A person who has experience with large enterprise systems knows the kinds of typical architectures they have and if trying to find the source of a bug knows how to heuristically carve up the solution and perform a kind of log n search. A developer without this kind of experience has to look at almost the entire search space.

Example 3) A developer medical domain knowledge can quickly determine if the requirements for a new bit of medical software actually make sense and are a reasonable approach to the problem. A great developer without this domain experience is going to have many more false starts.

Of course in the real world the disparities between individual developers are not that apparent because we work as teams and help each other out. E.g. In the enterprise example a more senior member will usually help you narrow down the search space even if just with a simple "oh for that kind of problem you need to check for x in the audit tables" or a "go talk to Steve about that as he is an expert in that subsystem"

Somehow I got to the opposite conclusion with yours. If the gap is because of practice and training rather than innate ability, the gap would be even BIGGER, not smaller. Essentially because the better you are, the faster you will learn more stuffs (which is already obvious to most people - we just don't really know if there is a threshold on learning, essentially the point of our biological limit). And because while the innate difference is unlikely to be 10x between human, the time spent on practicing and learning can easily reach 10x difference between the top and the average.
For information, what you describe is called "Matthew effect": https://en.wikipedia.org/wiki/Matthew_effect#Education
Is this difference learned or innate? I've assumed that it's mostly learned: the good ones do have a propensity for things that matter (like holding a big structure in their head, or willingness to concentrate for a long time, or the willingness to continually learn new things) but most of the skill comes from continual practice of the craft.
The gap should close over time through better training and improved tooling, but there will always be some delta. Developers would still progress through that training at different rates.
No. Mostly because you cannot measure the stuff that makes a good programmer good.
It is hard because "programming" is a small part of what you are doing, with communication, politics, interpersonal skills, design, user experience, self management etc. that goes with the job. All this needs to be taken into consideration when scoring.

Also a 10 programmer at a startup may suck (or even get fired!) in a traditional corp and vice versa.

Then even just focusing on programming a C++ guru may struggle with Haskell. Just as a football star may not win a 100m sprint against athletes in that field, but will do better than joe average.

Why do you believe that? It seems unlikely.
Give me the metrics of a good programmer, and a way that they could not be gamed ...
I don't necessarily agree with GP, however there is currently no good measure, and that's one reason to bolster his opinion.
Having a good way to measure something is very different from something being impossible to measure...