The problem with the argument that "Programming skill can't be bimodal because that would be elitist and make me feel bad about myself being an elitist" is that there's a lot of evidence that programming skill is bimodal. Look at fizzbuzz as an obvious, if not entirely complete, example.
Would it make us all feel better if programming skill weren't bimodal? Sure. But a roomful of people clapping at that proposition doesn't make it true.
I think you can break it down further into four groups. People who, when presented with FizzBuzz on their first day of learning programming would:
(1) Not even try, because it's "too confusing." (c. 90% of the population).
(2) Be able to finish only with significant assistance from others.
(3) Be able to finish on their own through trial and error.
(4) Finish quickly, and wonder why they were asked to solve such a boring problem.
Note that programming ability is a function of interest in the subject as well as intelligence. I'd say that most people who go into programming are somewhere between groups 2 and 3, while most who end up being successful at it in the long term are somewhere between groups 3 and 4.
Group 1 will never be programmers, group 2 is where I fell the first time I tried it. Group 3 probably have some training and group 4 probably have some programming related experience, or maybe they are superheroes. At any rate, anyone in groups 2-4 can become excellent programmers if they apply themselves and get the help they need. They can be plotted on a programmer competency bell-curve. Group 1 are the people who will never learn to code because they refuse to try. They probably make up the first hump of the perceived bi-modal competency graph. But they were never really in the running at all.
I can think of at least 2 people in my 30-person cohort in college who did not know how to code, and would fall in the first hump of a bi-modal competency graph, despite having passed 2 years of programming courses.
So my theory is that the second hump is a normal bell curve, and the first hump is people who won't try.
so lets say if i solve fizzbuzz quickly iam clever.
i have solved it but in a shitty confusing way but i have solved it.
but someone who solves it through trial and error and learns new stuff about what can go wrong and how it works is not so clever?
coding is always trail and error because you cant think of all the possibilities and through error you learn and become better so yeah give me more of 3 then of 4
> Look at fizzbuzz as an obvious, if not entirely complete, example.
I am not entirely convinced this is not partially a resume screening and talent pipeline problem. Has anyone ever given Fizzbuzz problems to everyone who applied to a position? If you haven't, have you ever considered that your screening process may be broken in the sense that you are passing too many liars who then bomb the Fizzbuzz portion, but who bump competent people off the stack entirely so you never test them?
I find this idea that there are lots of fake programmers kind of nuts.
Presumably, when you do a resume sift, you look for people with either a qualification or work experience. Either they somehow faked it through those, or your test is bad. Fizzbuzz actually tests if you know what % does. Is that critical knowledge for a webdev?
> I find this idea that there are lots of fake programmers kind of nuts.
I don't know about "lots", but there are definitely people out there who claim to be programmers but lack the basic competencies they claim. I've encountered several.
A couple of years ago, I was part of a battery of interviews for a candidate who claimed a Master's in CS. Their resume said they had done advanced work in parallelization of video compression. I asked them about it - I wanted to know how they had handled synchronization and locking.
The candidate looked at me blankly for a couple of seconds. Then they began, haltingly, to talk about web sessions and logging.
We didn't hire the person, but there was definitely some bullshit along the way...
I don't think there are "lots", but I think there are enough to distort the view of the labor pool. Additionally, there is the issue of these fakers staying in the pool much longer and spraying their resumes out more often further distorting the view.
As for how they get through the screen, I think they just blatantly lie on their resume hoping to get a company that doesn't do its due diligence in determining if the stated experience is real.
I've interviewed people for programming positions with work experience who had trouble articulating solutions to very simple problems. I don't know that I'd call them "fake programmers", but "bad programmers who lack the ability to reason about code and instead rely on StackOverflow answers to provide solutions to the problems they're faced with" are all over the industry.
The world of actual programmers is NOT filled with fake programmers. The world of people actively applying for advertised programming positions IS dominated by fake programmers. That's why FizzBuzz is an effective screen.
As to your last question, a "webdev" who doesn't understand integer modulus is a fake programmer. Is it critical? I suppose it's not if your grid is never wider than one column and you never want to alternatively style rows in a list or table.
We give fizzbuzz style tests to all our candidates. Most fail, but it's not an indicator of experience at all. Some of the quickest to pass just got out of GA and never worked in the industry before. It really tests aptitude at a specific type of problem. Because of this it does not make or break the interview. We also look at their portfolio/code samples as well. After interviewing many candidates I've found the one's who pass our fizzbuzz tests also have much better code.
Because of this I'm convinced that aptitude and passion are significantly important to the ability to program. Just grinding your way through CS classes will not a programmer make.
I should add we let the candidates use google, so even if they don't know modulus or whatever, they still can prove their ability to look up things.
> Because of this it does not make or break the interview.
You mean that you continue the interview process for a coding position with someone who failed FizzBuzz algorithmically/structurally (not for a trivial syntax error)?
At a prior game company we gave what I felt was a FizzBuzz-level task on paper: in C, given a string of characters representing a hex number, return the long it represents. (basically, write strtol(input, NULL, 16); without using strtol)
I was appalled at the number of people who couldn't come close (not subtle bugs or mis-handling case issues, but rather: show someone else their code and have that person guess what function the person was trying to write).
When the Fizzbuzz blog post(s) came out, representing a much simpler problem, I couldn't believe that someone would bother to shower and leave the house to interview for a programming position and be unable to do Fizzbuzz. So I gave Fizzbuzz to a few candidates, often in a joking sort of way (so as to not offend any qualified candidates). Results were predictably shocking and dismaying. It's a problem simple enough that you either can do it or not; there's precious little middle ground. (As other posters mention, these are the people that interview over and over, so hopefully the actual employed population of programmers is overwhelmingly able to do it.)
In which case it becomes bimodal in the sense there are people who consider themselves programmers but who do not meet enough skill to be considered one.
As someone that works in the game industry and interacts with programmers and artists (not only graphical art, I am also counting here writing, music, etc...) daily it is BLARINGLY OBVIOUS that both skills require certain brain patterns.
Although there are some rare people that are both great programmers and great artists at the same time, usually the person is a programmer, or an artist, they might know skills of the other side (example: I am a programmer, but I have a design bachelor's degree, and know how to use lots of artists tools and correct art made by others, but I would never call myself a good artist) but they are clearly one thing, not two.
This usually is also reflected in their behaviour, for example programmers frequently act in more logical or common sense manners (or sometimes in a extreme logical manner that go against common sense, but still logical), and can be viewer in some ways as "boring", and tend to prefer things rooted in reality.
The artists are not uncommon to do things that are unexpected, or to like outlandish stuff, for example when playing an RPG with extensive character customization you will usually see the programmers min/maxing the stats or trying to go for realistic stats, and outfit the character in realistic clothes, or the best equipment in terms of stats. Now when you look at an artist character they frequently are different, for example you might see a orc magician, or a space marine with low accuracy stats, high charisma and that paints his armour pink with yellow dots.
Then when we get to real work, the need for talent is obvious: Innate programmers frequently make boring art, IF they can make good art at all. Innate artists sometimes can make some code, but usually it is badly engineered code (prone to bugs and breaking), and that is, sometimes, most artists can't code at all, you can try to teach them all you want, and they just don't understand, even those that might grasp the syntax still end never getting past basic logic.
Of course, sometimes you find some people that are exceptions, for example the Falanghe brothers:
Felipe Falanghe is the creator of KSP, he, and his twin brother, studied with me at university, they are clearly artists, during university their highest grades were always in pure art related classes, they could make amazing drawings, and they had a band and were both fairly good singers and guitar players, yet both of them decided to learn Flash and Unity coding, and although their code was frequently broken, hard to read, confusing and had huge amount of memory leaks, clearly it was possible to do something with it, since KSP is a success, and Felipe Falanghe started coding it by himself in Unity.
Isn't this akin to claiming that drawing is bimodal because most people can't draft a portrait in an interview. Or, worse, that there is an element of gender influence in ability because, "otherwise there would be more female programmers."
I certainly agree that there is likely a gulf between good and great. Probably another above it. I'm curious to know what actual evidence there is.
Drawing seems like a great analogy because it definitely is also bimodal. Some people can draft a portrait in an interview and those people would be the ones you would want to hire to be your portrait artists.
This cuts to two important points. First, you will be hiring as if it was bimodal.
The second point, though, is more whether or not it actually is bimodal, or it is just taught into a bimodal distribution? That is, is it intrinsically this way, or is that a biproduct of how society values and teaches it?
Yes, I will be hiring bimodal and it's worked very well for me. Whenever I relax my process and hire someone I'm not sure is a great developer I always regret it later when they can't perform and their work brings down others. The more experience I have, the more I stick to working with the best people I can. There are just too many ways to fail and having a team of experts is the best mitigation you can have against it.
Apologies on possible tone misunderstanding. I did not mean that point one was bad or at all incorrect. Just stating my follow on point that there is open research as to how something like that came to be.
More, I think something like this can not really be attacked at the point where we are looking at people being hired for a job. The causes for a bimodal distribution in ability will likely stem much farther back than that and will have to be addressed as such.
Consider the mythical patient that says it hurts to bend their knee. First, yeah, stop bending your knee in a way that hurts it. Second, lets find out why you can't bend your knee that way.
I agree that any talent shortage is likely to be an upstream problem from hiring.
I don't agree that eliminating a bimodal model is desirable though. We don't really need more people in the middle of the talent trough because they don't actually add much value and can often detract value (in my experience). Successful programming is the grappling with immense complexity. You really only want the best and brightest doing it. As long as the people with the desire and capability are being given the opportunity to enter the field, I think we've succeeded. Trying to lower the bar or get people who wouldn't excel into development would be a mistake though.
I didn't realize I put forth that the bimodal should be eliminated. Just that I don't think it should be taken as a natural fact. It may be that eliminating it is meaningless. It may be that keeping it is meaningless.
Consider, do you really care about having the best and brightest doing something. Or just getting the best results. Odds are high that those align at least somewhat with each other. I don't know if it is a foregone conclusion, though. Study will show.
If you have experience that a normal distribution brings down the top end, I'd be interested in seeing it. If it is just a gut feeling, it is something that can be tested. If it can't be tested...
I wish I had the resources to formally test the hypothesis but alas I don't. However anecdotal my experience is, it has been consistent and enough that I'm not willing to risk my career hiring anyone other than the best I can find. It's actually a lot easier to hire mediocre developers so I wish that produced great results. It hasn't for me though.
I want to be clear that I am not asking you to formally test anything. And, I would extend "you" to the entire industry, at some level. I do not expect companies to try and tease out the reasons for distribution in workplace for most things. Affirmative action not withstanding.
What I do applaud, is research to into the problem. Which begins, largely, but asking the question.
Most people can't draft a portrait in an interview for a programming job. Most people interviewed as portrait artists would, as would quite a lot of people in related trades (such as graphic designers).
The fact that programming interviewers give this kind of test and it's widely failed shows what a bad state objective evaluation of programmers is in.
Would it make us all feel better if programming skill weren't bimodal? Sure. But a roomful of people clapping at that proposition doesn't make it true.