The Programming Talent Myth
HughPickens.com writes: Jake Edge writes at LWN.net that there is a myth that programming skill is somehow distributed on a U-shaped curve and that people either "suck at programming" or that they "rock at programming", without leaving any room for those in between. Everyone is either an amazing programmer or "a worthless use of a seat" which doesn't make much sense. If you could measure programming ability somehow, its curve would look like the normal distribution. According to Edge this belief that programming ability fits into a bi-modal distribution is both "dangerous and a myth". "This myth sets up a world where you can only program if you are a rock star or a ninja. It is actively harmful in that is keeping people from learning programming, driving people out of programming, and it is preventing most of the growth and the improvement we'd like to see." If the only options are to be amazing or terrible, it leads people to believe they must be passionate about their career, that they must think about programming every waking moment of their life. If they take their eye off the ball even for a minute, they will slide right from amazing to terrible again leading people to be working crazy hours at work, to be constantly studying programming topics on their own time, and so on.
The truth is that programming isn't a passion or a talent, says Edge, it is just a bunch of skills that can be learned. Programming isn't even one thing, though people talk about it as if it were; it requires all sorts of skills and coding is just a small part of that. Things like design, communication, writing, and debugging are needed. If we embrace this idea that "it's cool to be okay at these skills"—that being average is fine—it will make programming less intimidating for newcomers. If the bar for success is set "at okay, rather than exceptional", the bar seems a lot easier to clear for those new to the community. According to Edge the tech industry is rife with sexism, racism, homophobia, and discrimination and although it is a multi-faceted problem, the talent myth is part of the problem. "In our industry, we recast the talent myth as "the myth of the brilliant asshole", says Jacob Kaplan-Moss. "This is the "10x programmer" who is so good at his job that people have to work with him even though his behavior is toxic. In reality, given the normal distribution, it's likely that these people aren't actually exceptional, but even if you grant that they are, how many developers does a 10x programmer have to drive away before it is a wash?"
The truth is that programming isn't a passion or a talent, says Edge, it is just a bunch of skills that can be learned. Programming isn't even one thing, though people talk about it as if it were; it requires all sorts of skills and coding is just a small part of that. Things like design, communication, writing, and debugging are needed. If we embrace this idea that "it's cool to be okay at these skills"—that being average is fine—it will make programming less intimidating for newcomers. If the bar for success is set "at okay, rather than exceptional", the bar seems a lot easier to clear for those new to the community. According to Edge the tech industry is rife with sexism, racism, homophobia, and discrimination and although it is a multi-faceted problem, the talent myth is part of the problem. "In our industry, we recast the talent myth as "the myth of the brilliant asshole", says Jacob Kaplan-Moss. "This is the "10x programmer" who is so good at his job that people have to work with him even though his behavior is toxic. In reality, given the normal distribution, it's likely that these people aren't actually exceptional, but even if you grant that they are, how many developers does a 10x programmer have to drive away before it is a wash?"
On academic programming courses - of which I've taught on many - the grade distribution is definitely bimodal and there is a clear gap between those who can and those who can't. Of course, there is variance among those who can but the difference is largely that those who can largely get better whilst those who can't never get even get it.
Actually, you don't have this U-curve with musicians. But many people just see the low end (the child of the neighbours screeching away on the violin when you want to take a nap), and the top end (the star violinist in the news). This creates the false impression of an U-curve. But there are hundreds and thousands of violinists you usually don't see, because they play in some university orchester in a small town you've never visited, or they play at marriages and 50th birthday parties, or they earn their money as bar violinists. And most of them are average.
Fuck you. I'm the best. I write all my own libraries and never use anyone else's code.
What annoys me is that despite the Mythical Man Month still being the only vaguely scientific analysis, and despite the fact that it demolished a bunch of received wisdom and only created ONE fact of its own - the existence of the 10x programmer - somehow because it was written a long time ago that means it "no longer applies".
Of course your misrepresentation of the 10x rule isn't helping. The 10x rule is that the best developers are 10x as productive as the worst 10 developers. That's all it says. So you can replace them with 10 worse developers, that's the whole frickin' point of the 10x rule.
If you wish to invent another rule, that some tasks are so hard that only some programmers can succeed at them, you can go gather your own evidence, but don't pretend it's "the 10x rule" because it isn't, and your rule did not come out of the only vaguely scientific analysis that's been done, and you shouldn't pretend that it did.
I agree that many people can play instruments if they work hard enough at it, but I don't think that you can draw a direct comparison between something like playing violin and programming.
I think that the music equivalent of programming would be something like song writing or composing. With playing a song, your are really just following the instructions that somebody else gave you, like following a recipe in a cook book. Most people can learn to do this well. However, composing an original piece of music is more like making up a recipe of your own from scratch and having it turn out well. I know people who are very good at following recipes and make amazing food, but who are unable to figure out which spice to substitute for another when they are out of an ingredient. Or are unable to take a random bunch of stuff they have left over in their cupboard and turn it into something good.
Relating this back to programming, I think that programming is quite hard to grasp for a lot of people. It's easy enough for them to grasp the basics. Tell them the exact specifications of small function, such as "write a function that removes all the vowels from a string", and they could probably do a pretty good job of it. However, give them a larger problem without a direct answer, like for instance, "write an application that allows 2 users to send messages to eachother" and they are completely lost. They have no idea how to plan out the application and will probably take 10 times longer to complete the project than a good programmer would.
There's a huge problem, even with people already working in the field, who can't do something as complicated as Fizz Buzz. That should be a simple function, and yet a lot of people fail even this simple test.
Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
A downward slope would just be non-normalized data. If there are a lot of bad ones, bad just becomes the mean. Programming talent, like most things, probably falls neatly into a bell curve.
The U curve the article is referring to is a bimodel distribution, which is rare even in nature. It occurs for something like a disease that effects immune compromised people. Thus the age distribution of infected would be the very old and very young.
Brilliance without wisdom, power without conscience. Ours is a world of nuclear giants and ethical infants.
Now, what's a hyperbola?
It's something that people on the other end of that U-curve of math knowledge from you all know about.
I would agree with this in the same way I would agree that anyone can learn to play a musical instrument. However, I still think it take an innate talent as well a (lot of) training to become an orchestral soloist.
Not to overwork the metaphor, but there are also people who would work in menial jobs so that they could program at night if it weren't for the fact you can make a living programming - the same people who have jobs coding and write software, say for open source projects, on weekends.
The real problem is weeding out the people who have no interest but still try to make a living writing code. I can only assume that those people write some of the websites out there, such as the ones that insist you enter credit card numbers without spaces or other punctuation. It's a 16 digit number, you can ignore anything that isn't a digit and feed it through the payment service to see if it's valid.
many users inexplicably believing that programming requires a "special mind", dividing people in to two groups: "can program" and "can never program".
This is not "inexplicable". It is obvious to anyone who has taught programming to beginners, or any type of introductory abstract math. About a third of the population is simply incapable of abstract reasoning. If you think otherwise, I invite you to come to my house, and I will give you a free dinner while you explain "vectors" to my 15 year old daughter. Good luck with that.
My wife the business woman {who does more math than I do on any given day} has bailed out and now I'm only one left to help my son with his freshman algebra because "Algebra!?!?!?"
Anyway I found very quickly that the key to helping him understand algebra is to pry the cell phone from his hands and turn it off.
Since you can't measure programming ability "somehow" or otherwise, you don't know what the curve would look like.
Except that you CAN measure it. Just give each person a few programming tasks that should take ten minutes or so. I do that all the time. It is called a "job interview". My experience is that most applicants are incapable of programming even trivial solutions, or even getting the syntax right ... and these are people applying for programming jobs. A fair number can come up with reasonable solutions. Only a few come up with elegant out-of-the-box solutions that I was not expecting.
The distribution is not "U" shaped, and it is not normal (bell shaped). It is high on the left, and slopes downward to the right.