"All teachers of programming find that their results display a 'double hump'. It is as if there are two populations: those who can [program], and those who cannot [program], each with its own independent bell curve. Almost all research into programming teaching and learning have concentrated on teaching: change the language, change the application area, use an IDE and work on motivation. None of it works, and the double hump persists. We have a test which picks out the population that can program, before the course begins. We can pick apart the double hump. You probably don't believe this, but you will after you hear the talk. We don't know exactly how/why it works, but we have some good theories."
(Via reedit: joel.)
Here is a direct link to the original paper. I looked at the test script and all it tested was assignment. And they were not complex assignments that you might expect to see in a program that supports it. For instance, in Ruby, you can do this:
a, b = c, d. Nope, nothing like that. Just plain simple
a = b.
Some of you might be wondering why a test like that can actually measure programing aptitude. Here is my opinion on that.
- You need to understand what variables are. For instance, a and b are just names for some value. And they can be easily replaced by some other name like 'cat' and 'dog'. This indirection is even more important when it comes to pointers and other data structures.
- You need to remember state. For instance if you assign a to be equal to 10 at the beginning and change its value somewhere else, you need to remember that a can only take on the latest assignment.
- You need to understand what sequence means. Programs do not just jump around, There is a proper sequence to the execution of each line.
- You need to know when words that you do not understand will not affect the outcome much. For instance, regardless of whether you know what 'int' means, you should be able to guess that the next statement does. This is really important when you learn a new language. Good programmers are familiar enough with programming concepts that different syntax will not throw them off.
- The ability to notice that sometimes any relations between the value themselves are purely coincidental. For instance, having the first three odd numbers might throw someone else off to think that this question is different from the previous one. While it is important to notice trends in the numbers, it is also important to realize that those trends can be purely coincidental. The underlying principles of assignment do not change with different numbers.
I looked at the answer script. It does not only demand the right answer. Instead it assigns different categories for different answers. This would be the proper way to grade a test such as this. For instance, some people might prefer to do left to right assignment making the result of
a = b being that b gets the value of a instead of the other way around.
I am going to read the draft of the paper later tonight. Any updates will be posted here.
Update: It seems that the survey was done only with 61 students. Hardly a conclusive figure I would say. And the paper is a bit too colloquial to merit much academic attention. Therefore, I do not believe that their postulation has been proven.
Update: Head over here for more discussion on the topic.Tweet
comments powered by Disqus