My model is that there is something (I am not sure what it is) that is necessary for programming, but we don't know how to teach it. Maybe it is too abstract to articulate, or seems so trivial to those who already know it that they don't pay conscious attention to it . (Maybe it's multiple things.) Some people randomly "get it", either at the beginning of the class, or usually long before the class. Then when the class starts, those who "have it" can progress, and those who "don't have it" are stuck.
The study suggests that this something could be: expecting the same actions to have the same results consistently (even if the person is wrong about specific results of a specific action, because that kind of mistake can be fixed easily). Sounds plausible.
Assuming this is true (which is not certain, as the replications seem to fail), I would still describe it as a failure of the education process. There is a necessary prerequisite skill, and we don't teach it, which splits the class into those who got it from other sources, and those who didn't. -- It would be an equivalent of not teaching small children alphabet, and starting with reading the whole words and sentences. The children who learned alphabet at home would progress, the remaining children would be completely lost, we would observe the "double hump" and declare that the difference is probably innate.
The disappearing of the "double hump" (assuming that the original result was valid) could hint at improving the educational methods.
Even with perfect education, some people will be better and some will be worse. But there will be more people with partial success. -- To use your analogy, we would no longer have the situation where some people are basketball stars, and the remaining ones are unable to understand the rules of basketball; we would also have many recreational players. -- In programming, we would have many people able to do Excel calculations or very simple Python scripts.
If consistence really is the key, that would explain why aspies get it naturally, but seems to me that this is a skill that can be trained... at worst, by using some exercise of giving students the same question dozen times and expecting dozen same answers. Or something more meaningful than this, e.g. following some simple instructions consistently. It could be a computer game!
There has been previous discussion on LW on the topic of how to quickly determine if someone might be good at programming. This is relevant because this is currently a good career field that can be relatively easy to enter, and because programming-style thinking is often relevant to LW topics (eg decision theory). In light of this I've created the following test, which is based on my memory of a test from an interview process for a programming job. It attempts to test common low-level concepts from programming such as sequence, assignment, indirection, and recursion, in a way that doesn't require any previous programming experience (although previous experience will likely make it easier).
This test is aimed at getting a quick clear positive, so the fact that someone does poorly on it doesn't mean they can't become a programmer (ie I'd guess it's likely to generate false negatives rather than false positives). This test is obviously lacking scientific validation, and is probably too short, but I'd like to start somewhere.
I'd like to invite both programmers and non-programmers to take the test for comparison. It should only take about 5 minutes. If you do the test, please also take the short poll in the comments for feedback and calibration purposes, regardless of what result you got.
----- Test begins below -----
This is a 1-question algorithmic thinking exercise that should take less than 5 minutes.
Pen and paper is required. There should be no prerequisites beyond basic arithmetic.
First, write down the following sequence of numbered boxes. You will be writing numbers in some of the boxes more than once, so either use a pencil or make the boxes big enough to cross out and replace numbers.
Following is a sequence of numbered steps. Do the steps in the order they are numbered (unless instructed otherwise). Note that "write a number in a box" means "cross out the previous number and write the new number".
1. Write 1 in box 3, 2 in box 6, 9 in box 4, 1 in box 5, 5 in box 8, and 0 in the remaining boxes.
2. In box 4, write the sum of the number in box 3 and the number in box 5.
3. In both boxes 2 and 5, write the the number in box 8 minus the number in box 6
4. Write 1 in the box whose number is in box 3
5. In box 3, write the sum of the number in box 3 and the number in box 4
6. In the box whose number is in box 6, write the sum of the number that's in the box whose number is in box 4, and the number that's in box 5.
7. Do step 2 again, then continue directly on to step 8.
8. Do step 4 again, but this time with box 4 instead of box 3, then continue directly to step 9.
9. The final result is the number that is in the box whose number is the number that is in the box whose number is equal to 2 plus the number that is in box 4. End of test.
--------------
Expected Results: http://pastebin.com/wA6xDxVb
Thanks for taking the test! Don't forget to answer the poll in the comments too.
I'd also appreciate any feedback on the test, both if you think its going in the right direction or not and if you think there are specific improvements that could be made.
edit: As some commenters have pointed out, there was a previous attempt at such a test that you may have heard of: http://www.eis.mdx.ac.uk/research/PhDArea/saeed/
However, it seems that further investigation found that their test, while better than nothing, wasn't very accurate. The test given in this post takes a different approach.