The camel doesn't have two humps: Programming “aptitude test” canned
retractionwatch.com
retractionwatch.com
The retraction is that the strong/definitive proof that "the camel has two humps" was fabricated/exaggerated.
The converse - that it has one hump hasn't been proven. From the quote, Richard Bornat doesn't say that they re-crunched the numbers and now there is proof of one hump.
The camel has gone back to having an unknown number of humps
Some sources even go as far as saying there is no camel involved at all, and might have never been.
Or “It follows a distribution similar to other skills involving mathematics.”
The paper presented an unusual hypotheses, that there was this sharp distinction between those who can program and those who never will, and that this distinction was somewhat orthogonal to other measures of scholarship. So for example, one might be a good architect but never get good at programming no matter how much one tried.
You’re right we haven’t disproven this hypothesis, but given its novelty, the burden of proof is on "the camel has two humps." With the paper retracted, we do not presume it has an unknown number of humps, we presume that skill writing programs is going to be similar to other skills we observe.
As this article observes, unusual outcomes in attempting to teach programming may just as easily be explained by the fact that in a young field, we may not know how to teach programming.
If we’re going to chase ‘humps,’ perhaps we should look for unusual distributions in the skill of teaching programming. We may be terrible at it, and perhaps the skill we are really observing is the skill of learning to program in spite of didactic and structural obstacles.
It is anecdotal evidence, but there are people with innate ability.
Also - natural distribution makes the one hump camel the default hypothesis.
Still, I'd assume that with programming like I assume for most skills (music, athletics, lawyering, foreign language, whatever), some people start out with more aptitude than others, and find it easier than the others. I wouldn't assume it's a markedly more pronounced or separated distribution in CS/programming than for other things though.
(Also, I have actually been programming since I was 12, and additionally believe I do have some aptitude for it that makes it easier for me than for some others, I'm pretty good at it -- and I still remember how hard it was for me to understand pointers in Pascal when I first learned them, which seem so straightforward to me now I have no idea why it was challenging at first! And I'm glad I had good teachers in formal coursework.)
The concept itself still sounds trivial to me though.
Programmers are far too egalitarian for our own good and our increasing marginalization and stagnant wages are the inevitable consequences.
Although it's always tough to compare fields, I do think that some ways of measuring the skill set and educational requirements for a software developer do place it in one of the most rigorous fields out there.
Majoring in computer science at a reputable university (I don't mean an elite one, I just mean one that requires the standard curriculum) typically requires two years science and engineering track calculus (not the easier one year, slower paced track available to econ or bio majors at some universities). Physics is often a requirement, as is an additional year of upper division mathematics (differential equations, calculus based probability), along with some classes that intersect with mathematics had have a heavy computing component, such as numerical analysis which generally involves computational methods to solve mathematical problems that aren't amenable to closed form solutions, or mathematical algorithms that require so many iterations that they aren't practical to solve by hand, optimization, graph theory. Then you add in compilers, operating systems, and other demanding electives. And keep in mind, CS or other Math/Physics/Eng students typically must take a far more substantial general curriculum in humanities than humanities students must take in quantitive fields. We don't get out of writing papers the way they get out of difficult math.
People often point out that a field like law requires a three year grad degree, but honestly, in many ways, I think is is like comparing people who run at a 8 minute mile pace for 70 minutes vs people who run at a 6 minute mile pace for 40 minutes. You can't just compare the time spent, you have to compare the rigor of that time. Attrition rates for computer science are typically high even in elite schools, including at the graduate level (elite law schools, by contrast, often have attrition rates below one half of one percent, and many of the students come from fields like history or poly sci - nothing wrong with those fields, they are interesting, but they really don't have anywhere near the same attrition rates as CS or related majors). And if you do get a grad degree, then I'd say you've honestly gone through something much more difficult if you did it in Math/CS/Eng/PhysicalScience.
Of course, you don't have to strictly major in CS or a related field to be a programmer, but consider what it takes to get through the google interviews. Try out some of the medium to difficult questions from "cracking the coding interview", and think about the poise, communication skill, analytical ability, and coding ability it takes to do a good job on these question sin 45 minutes at a white board (as an unsuccessful google interviewee myself, I assure you you are expected to make substantial progress on these problems, and medium to difficult is surely fair game!) You could get to this through self-study or formal education, but either way, it most definitely is not a low barrier to entry.
Ok, not everyone works at google, and many of us work on crud apps. However, I have yet to see the mythical "simple crud app" that people refer to when they talk about how most programmers don't have hard jobs. These apps usually don't have deep algorithmic complexity, but they are hard to work with. You often inherit a difficult and poorly documented code base that you need to follow through, logically, with a fine toothed comb. You often have to get up to speed with a new framework, or an older one that uses deprecated methods during an era of substantial churn. You need to tease out often elaborate business logic and calculation pipelines from analysts or other non-technical workers that they have trouble communicating to you. And you often have to do this under intense pressure to provide estimates and meet deadlines, often from people who work in much more predictable fields and see your hesitance to commit as a sign of unreliability or a lack of professionalism. These, in my experience, are the "easy" crud projects. Honestly, I think researching and applying a novel machine learning algorithm to a data set can be a lot easier in many ways.
That turned into a rant, but in short: this is a really hard job (and JoBrad, I hope it's clear to you that none of this is in disagreement to what you wrote, more riffing on the theme here…). Programming it isn't easy at all. I do think the reason that there is an alleged "shortage" is largely due to the fact that people who can handle this kind of work (it requires a huge about of logical reasoning, quantitative reasoning, consulting and working with vague requirements and end users, and presentation skills under pressure) have a lot of options out there. The market is actually working, pay and working conditions need to improve quite a bit to draw people away form those other things they're doing and into programming in the numbers silicon valley employers would like to see. And it won't happen overnight, ramp up time takes a while, this will be (if it happens) a pretty painful transition that will force the tech industry to dig pretty deep.
First, one can dispute “programming ability is distributed in two humps” without implying that “everyone can program.”
Second, your proposition isn’t even a consistent proposition. If programming talent really is rare, then being egalitarian won’t have any effect on wages: Some people can, some cannot, and the free market will quickly sort out that you cannot build pyramids with thousands of unskilled programmers.
If wages are stagnant, one possible explanation is that more people can program than you would care to admit. Which explains why you are ranting about spreading the myth that programming ability makes you a special, delicate flower. If you can socially engineer people into not becoming programmers, you believe there will be more money for you.
What you fail to realize is that as an industry, “a rising tide lifts all boats.” The more talented people there are, the larger the pie we get to share. More programmers equals more software, equals more tools, equals more companies, equals more hardware, equals more demand for software, and so it goes until software has finished eating the world and it becomes a mature, stagnant industry.
If you feel your wages are not rising as quickly as you like, perhaps you should look into other possible causes, such as a lack of skill in negotiation, or choosing to be an employee instead of an entrepreneur, or wage-fixing by companies with no-hire policies, or the practice of handing out paper stock options in lieu of cash for startup employees.
Yes, but people are disputing “programming ability is distributed in two humps” despite there being clear evidence of that being the case, and no evidence to contradict it. The distribution has not changed, or been retracted. Only the unsupported notion that the distribution is innate and unchangable.
Please cite this "clear evidence" you speak of.
But that’s not all. It’s not enough to summarise the scientific result, because I wrote and web-circulated “The camel has two humps” in 2006. That document was very misleading and, because web documents persist, it continues to mislead to this day. I need to make an explicit retraction of much of what it claimed. Dehnadi didn’t discover a programming aptitude test. He didn’t find a way of dividing programming sheep from non-programming goats. We hadn’t shown that nature trumps nurture. He had, however, found a predictive phenomenon, though he had no explanation of it.
How do you read these paragraphs, or what part of the retraction supports the "two humps" claim and how do you understand that claim?
The guild that is infamous for exalting the "leet", nurturing cliques, and projecting disdain towards n00bs, laypeople and "idiots" is too egalitarian?
> our increasing marginalization and stagnant wages are the inevitable consequences.
IMO, our increasing marginalization and stagnant wages are the consequences of programming being not that hard (as far as the general demands of the industry). Programming is not exceptional or arcane, it's just new and with tooling and pl advancements making it easier and easier to meet industry demands, it's only natural that wages will stagnate.
I am pretty sure everyone could be a lawyer if they wanted to be. The couple of lawyers I have talked to about it say that it is all about hard work not smarts or any special skill.
Also, let's not forget that sometimes the truthfulness of the assertion takes a back-seat the the desired effect it will have. Very often we tell children "You can be a doctor" when at certain points we know the likelihood of that is very, very small (for any number of reasons, such as aptitude, circumstance or history). The urging may not make them become doctors, but if it makes them expand their ambition and try for a hard goal, the end result may well result in a better outcome for them, regardless of whether they indeed become doctors.
I know several elderly and accomplished medical professors who claim that they would not have been accepted into medical school under today's conditions. They got in during a time when it was very much easier academically (but harder financially).
The hypothesis there was that time spent on assignments and grade obtained are two essentially independent variables.
And right now the zeitgeist in tech is to increase diversity.
You don't want to be the subject of the next Two Minutes Hate?
And of course, I can't ask you for a source that studies are getting stomped out by political pseudoscience, because those sources will also have been stomped out. So I should instead ask you: how did you get this impression?
In fact, all studies should do so to avoid endless blathering on the Internet.
I'm also curious what you mean by 'all studies should do so'. Do what, exactly? Analyze the demographic of white heterosexual upper middle class differently? I'm sure that might be interesting, but it's already a very specific demographic that fits class, sexuality, race, and gender identity. What other categories are being neglected that are skewing the view of demographic majorities in the technology industry?
And that was all there was to my post. But since you are playing Tipper Gore to my Dee Snider:
Why I get that impression - because science is also political. As are the people that do it, write for it, fund it and so on. We people are stupid, biased, and conformist. We fall in line. We do what will bring us money or social capital. We twist our reality to fit the desired outcome. We shred to pieces papers we disagree with, but only skim the one that confirm out initial assumption. We love to offer post facts justification how we were right all along.
I am from former communist country - I know how whipping science and arts to fit the party line is done. I have seen it.
In the west it is not different just subtler. People are more afraid of being on the wrong side of society, than being wrong.
That is how the world works.
And with tech powerhouses like Japan, China, Taiwan and South Korea and India that both produce, utilize domestically and export a lot of tech talent - I am not sure how white is tech.
You're correct there. I was under the impression one would be focusing mostly in the oh so legendary Silicon valley.
Other than that, thanks for your generosity with your perspective. If I could have another question, what do you consider the warning signs of a psesudoscience or bad science being used for political gain? Also, how do you tell when a methodology is found flawed because of political gain vs a methodology is found flawed because it is flawed and in bad science?
If science was apolitical they both would be laughed away.
My opinion is that in the real world - both will gain acceptance at the fringes, but while one of the papers will just be burried and ignored, the other will be career ending move and will be shredded, and careers will be launched disproving it.
Same will be with any paper that perpetuates the white dominance narative and tries to disprove it.
There are bigger penalties in going in one of the possible directions of the accepted truth.
So we have built in conformation and confirmation bias in system.
And the antivaxer paper is stellar example of using pseudoscience for political gain.
With diversity in tech - you lose nothing by spinning any fact into pro diversity argument.
That isn't even the current demographic. Indian and Chinese people are more disproportionately represented than white people are.
I'd be really surprised if that was the case and I'd like to see your data, please.
Camel has gone back to be assumed to be typical gaussian camel as for many camels we don't know much about.
Almost certainly the former. Notice the dismissal of scientific evidence because they dislike the implications. Every study on the subject has shown clear racial IQ differences. That is not "pseudo-science". Arguing about why that observation exists is fine, but pretending the observation itself must be wrong because it hurts ones feelings is not reasonable.
>The retraction is that the strong/definitive proof that "the camel has two humps" was fabricated/exaggerated.
It isn't even that. The bimodal distribution is very clearly there, the "retraction" is just to the claim that this is an innate characteristic. Something which was widely repeated, but which the actual paper never even claimed.
>The camel has gone back to having an unknown number of humps
It still has two humps, we just don't know why. But we never knew that in the first place.
No, if you want to retract it, then make a case why this is not true. We don't believe that article because we trust the author.
Here's the retraction: http://www.eis.mdx.ac.uk/staffpages/r_bornat/papers/camel_hu...
Well then, why not set the bar for who can program and who can't on who can code in Prolog, rather than who can write FizzBuzz? If the point is to sort out the men from the goats, or whatever uncle Joel said we're trying to sort out, surely using Prolog as the sorting tool would leave many, many fewer "real programmers" than FizzBuzz. Hell, we could even combine the two: FizzBuzz in Prolog! See how well you can do at that, internets!
And why stop at Prolog? There's languages that are way, way harder to program in! Hey, if you're a Real Programmer you should be able to write FizzBuzz in, dunno, Ook. Brainfuck. Leboge? Mondrian? Perl, even?
Or maybe, I don't know, we can start asking people to show us what they can do instead of trying to find things they can't? Does that make sense to anyone else? I'd personally love it if people who want to hire me took the time to check out my github and the git repository I'm serving off my public server, in order to get an idea of the things I have already done (and so demonstrably can do) rather than trying to catch me with my pants down in front of a whiteboard.
Look. I write a lot of code. I go over a lot of code I've written. I'm an idiot 80% of the time, but the other 20% of the time I figure it out, fix my bugs and go to town. It works, OK? If interviews can't appreciate this balance then they 're useless.
http://webcache.googleusercontent.com/search?q=cache%3Aretra...
2. I still wonder why around 30% of people with programming experience who have applied to a job when I was recruiting couldn't solve FizzBuzz[1] or string reverse. All of them either University MSc or years of programming experience.
The article hints at using the wrong teaching methods.
[1] Given the written instructions: 'Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”.'
The "trick" is the first hump - a goat.
Even a simple programming question can stump someone not trained in it. I've seen people who (supposedly) have computer science degrees fail on FizzBuzz.
In the end, it makes some sense to "talk shop" about programming issues. If they can't follow, it's probably not a good idea to hire them.
That being said, I'm assuming the failure mode we're discussing is 'flailing at the whiteboard and would never make any progress given infinite time' and not 'wrote an off-by-one error that a unit test would catch.'
fizz = 3
buzz = 5
both = 15
for i in range(1, 101):
if i == both:
print "FizzBuzz"
both += 15
fizz += 3
buzz += 5
elif i == fizz:
print "Fizz"
fizz += 3
elif i == buzz:
print "Buzz"
buzz += 5
else:
print istring reversing in place trick: stopping at the middle else it's an identity function.
Any time you spend with Fizzbuzz, you could spend it on more complete quizzes, discussing past experiences, taking references etc.
When I asked these kinds of questions I would execute the program in my head, and tell the candidate things like "your reverse() methods moves some stuff around, but the end result appears the same as before". Or "this fails with ArrayIndexOutOfBounds on line X". Typically it only took a few minutes to find the bug and fix it, and I learned about how the candidate solves problems.
I find it much more likely that the fizzbuzz failers are the students who wanted to copy my programming projects in undergrad.
I've seen this for people that were hired and proved excellent.
Everyone can do Fizzbuzz or reverse a string on the job. Much less can do it correctly the first time, on a whiteboard, in a job interview. When you hire a carpenter, you don't ask him to hit a nail with a plastic hammer while you watch.
Even in these circumstances I've had a decent proportion of candidates never able to even begin to outline some code, let alone get far enough in to enounter "tricks" or "pitfalls". These are candidates I'm comfortable assuming have not learned to code.
I code for fun mostly and I feel like even my 'basic' level knowledge should be able to outline code for a simple problem like fizzbuzz or string reversal.
Mind still blown? Yeah, well, it happens more than you think. Varying definitions for "SDET" are out there, but I think most would agree that an SDET should be able to code. I've had SDETs with Microsoft on their resume that couldn't even match curly braces, let alone write something that would compile and work.
So I use FizzBuzz or an equivalent. I tell the candidate up front that it should take them single digit minutes. I offer points for creativity if they find it too simple. And once in a while a candidate with ten years experience shows up who can't do it. Glad we didn't start with that red/black tree implementation, then.
[0] Why more common with SDETs? My theory is that SDET is easier to fake, and if your SDET "development" consists of var foo=FindUIElement("bar");foo.click(), then FizzBuzz could give you trouble.
Same here.
When this happens to me, people in the interview tell me something like "This is easy, are there strings attached I can't see?"
Whatever happened to, "he seem to be able to code, let's try it for a couple weeks"?
Happened to me twice where everything was fine and then after having been interviewed by 5 or more people, one of them has a bad feeling, and you're not given a chance to prove yourself in a probationary period. Situations like that made me wonder if freelancing is a better path.
'Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”.'
[1] if stuck on modulo I usually suggest to assume there is a function divisible
How can you expect to be a professional software developer if you can't get some specs, then develop a solution?
If someone perceives "FizzBuzz" to be a "trick" question, he's exactly the kind of person FizzBuzz question should weed out as fast as possible.
'Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”.'
It spells out in words what needs to be written in code.
String reverse is: Write a method/function that returns the reverse of it's argument. Would be interested to learn how these are trick questions.
If the solution is fine, I ask were they see problems. Some mention UTF-8/16. I'm happy if someone tells me this is tricky and there is a working solution in library X or they would google for a solution that works with UTF-8/16.
They are the exact opposite. They are practical, very simple, introductory questions. Fizzbuzz is literally "do you know what a loop and a conditional are?".
On the one hand, I'm tempted to say everyone should be able to do that, on the other hand, they do feel like a type of programming that isn't super common in a lot of applications. FizzBuzz is probably a bit better in that regard.
Programming is all about abstraction. And fizzbuzz is an abstraction of a huge range of programming work.
Namely:
go through this data
pull out bits, based on these conditions
then do something with it
Some version of that underlies the vast majority of programming work.
A priori you might expect to find that there were lots of candidates who could do string reversal and fizzbuzz but nothing else. This doesn't seem to be the case.
I like the kinds of interviews where you assign a coding problem before the interview and review the code, or where debugging is part of the tech interview.
'Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”.'
people should not be able to write the code? Just by hearing the answer 6 to 7 times ("By the end of interviewing 6 or 7 people") someone knows the answer?
"Possibly you, before you put together your list of interview tech questions."
No actually given the instructions I could write the code in one go. So I'm mystified as why someone applying to a developer position could not do this in your opinion.
It feels a little like a window to the programmers mind. Some of them are disturbed by the simple repetition and come up with obfuscated or infective solutions etc.
I'm asking because if you do a whiteboard test then it's easy enough to get things wrong on both sides of the interview. Humans are just not as accurate as compilers, not even for the simplest of things.
Besides that there's always nerves, misunderstandings, cultural differences etc. In one place I interviewed they asked me to write a factorial method in Java. I assumed they wanted a recursive method, because, factorial, right? Classic recursive example. So I gave them a recursive factorial in Whiteboard Java™. I turned around from the whiteboard to see the interviewers staring at me, their mouths hanging open. And not in a good way. It turns out all they wanted was to see if I could write a simple loop. Instead of marvelling at my amazing recursion powers, they got the impression I was needlessly flashy and probably had my head up my arse. Also, seeing them staring I completely panicked and I totally screwed the iterative version: the loop went up instead of down, I was adding where I should be multiplying... a shambles.
So they didn't hire me.
Shit happens in interviews and it's not because "Johnny can't program". It's because "Johnny can't pass a programmign interview" (or at least many of them).
I tell people they can use the language I hire (Ruby,JS,Java) but I'm fine with other languages or pseudo code.
I tell people I don't care about semicolons or braces, I don't hire them for being a compiler.
Factorial I also use sometimes. Recursive is fine with me if it works, I've seen many people to go the recursive way - hey it's factorial - and then screw up. I sometimes ask people to do an iterative solution, or I ask if the recursion went flawless to write it as tail recursion.
You can definitely step through your program by hand and follow the logic etc, and you should totally be able to do that, but most programmers will not be in the habit of doing this. And neither should they, because it's slow, tedious and error-prone to hand-simulate your algorithms, or even just your for-loops. Not to mention recursive, or larger stuff.
I guess what I'm saying is that programmers are used to "lean on the compiler" and you don't have that on a whiteboard exercise, so it's a bit artificial.
[Full disclosure: I'm in the habit of hand-simming my stuff especially in the last year where I've been developing a grammar induction algorithm, so I'm not worried that I'll have to stand on a whiteboard and not know how to step through a loop, but I still think it's not very useful to make people do that).
What language did you do your high-school level stuff in? I assume it wasn't Java, because in Java there are no good reasons to use recursion (it provides iterative primitives, unlike say Haskell, Prolog, Lisp etc) and there are good reasons not to (its compiler doesn't (or didn't) do tail-call optimisation).
Not to mention, any language without pattern matching is a bit shit for teaching recursion anyway: you tend to miss the point because of all the bookkeeping.
Recursion is generally considered hard by most programmers, hence why my interviewers thought I was showing off. You can google a bit and see that people do indeed have trouble getting their heads around it.
take a world 100m running champion and ask him to run the 30m with making 360 deg rotation left on each 3rd step and rotation 360 deg right on each 5th step... That would be such a fun, like a drunken duck...
If someone describes staying up all night as a 13 year-old because they had to finish the code they were working on, that's someone who was passionate about programming before they found out it's one of the better paying professions.
If someone points to finished projects (especially side projects or OSS), then they also have the ability to focus. If someone points to a bunch of barely started projects, they might have great ideas but in a business you also need to execute.
So ... passion and focus, plus a reasonable amount of domain knowledge will make a great employee.
So, you're explicitly selecting by class background and upbringing? This particular metric also tends to select against women, if you have any applying.
I can remember on two occasions bosses of mine who helped kids with some form of homework assignment. If your dad (or mum) isn't technical then you are less likely to get an early start.
I'm not disagreeing, because I agree that side projects show passion, but I'm not sure a lack of side projects necessarily points to a worse employee. Someone could be a great developer in an enterprise environment, from where they obviously wouldn't be able to show you code snippets, but have no side projects because they might have other hobbies.
I don't think anyone is seriously questioning the fact that some people have more aptitude or intelligence than others. That's pretty commonly accepted fact. However, the general belief is that intelligence follows a roughly Gaussian (bell curve) distribution, and that it's roughly continuous. Mechanistically, one can imagine that intelligence is a convolution of genetic and other factors that are so thoroughly mixed that there are no discrete steps.
The theory behind a two-humped camel model of aptitude or intelligence would then be that some magic x-factor is so significant that it splits the underlying distribution in two, into the "cans" and the "can nots".
While the existence of such an x-factor would be a really interesting finding, it wouldn't change the underlying fact that some people have more innate ability to program than others, just like some people have more innate ability to be doctors or lawyers or concert pianists than others. It would just tend to make that difference much starker.
What it also wouldn't change is the fact that innate ability doesn't always correlate to success in a given career, or in life. Many other factors other than innate ability, such as drive and ability to collaborate with others, affect whether someone is going to be successful at their job. Also, people can learn. Even someone who doesn't have innate talent can become very skilled, if they work really hard at it.
So, even if the study were valid, which it's not, the finding itself is more of an academic interest than an excuse to start treating coding job interviews as a "sword in the stone" test of whether you've got "it" or not.
This may well be to due the fact that psychologists have been using parametric statistics instead of nonparametric statistics. In a lot of cases us nonparametric types have given up a little statistical power for "cheap and cheerful" methods that are harder to get wrong.
Psychs and medicals find it very expensive to treat thousands and thousands of patients correctly and carefully observe the results. This is why those Cochrane reviews for the case for almost any drug or other treatment are so depressing -- maybe they need all the statistical power they can get.
For an easy example of why (if true) this would be a valid criticism, consider IQ, which is normally distributed. I will give you an IQ test and assign you into one of two categories: smart or dumb. If you are below the median, you're dumb, if you're above the median, your smart.
It should be obvious why this makes little sense; the large number of people very close to the median are divided in two and put in the same category of those with either very low or very high IQs.
To assign people to one of two categories, one would want to see a distinct bimodal distribution, then there would be a small number of people for whom which distribution they belong to is ambiguous, and the majority could be confidently assigned to one or the other.
However, I fail to see much discussion about the subsequent paper [1] that addressed these failings and featured improved experiments that seem to still uphold the hypothesis.
[1] http://www.eis.mdx.ac.uk/research/PhDArea/saeed/SD_PPIG_2009...
>Despite the enormous changes which have taken place since electronic computing was invented in the 1950s, some things remain stubbornly the same. In particular, most people can't learn to program: between 30% and 60% of every university computer science department's intake fail the first programming course. Experienced teachers are weary but never oblivious of this fact; brighteyed beginners who believe that the old ones must have been doing it wrong learn the truth from bitter experience; and so it has been for almost two generations, ever since the subject began in the 1960s.
http://blog.codinghorror.com/separating-programming-sheep-fr...
emphasis:All teachers of programming find that their results display a 'double hump'. It is as if there are two population
emphasis:Experienced teachers are weary but never oblivious of this fact; brighteyed beginners who believe that the old ones must have been doing it wrong learn the truth from bitter experience
So the disparity has presented itself in all known historical forms of pedagogy. Some have learned while others haven't, some have even learned with entirely self-directed pedagogy.
When a array of teachers has been giving it their all for decades but the disparity remains, should we really blame the teachers?
The search space of possible ways of teaching programming is so large, and the field so young, that I'm not convinced we're anywhere near optimal.
What I think needs to be criticized is a tendency to go on these wild goose chases searching for a magic factor that will explain everything, when there are other obvious factors nearly staring us in the face that we don't want to address.
It's the opposite of Occam's razor.
Despite working in these types of place, I still got a shock, though, when I started doing freebie work on open source software and worked out that such an aptitude-less programmer was managing a large open source project developing a programming language. Perhaps some people doubting the double hump are from places like Google where all engineers are vetted via Computer Sciences degrees, and they don't have repeated everyday experience of it.