Monday, July 17, 2006

40% of you will never get this

Apparently my egotistical rantings about how you either are great at software programming or not was not just my ego talking. According to this PHD paper, a group of researchers have come up with pretty simple test that can weed out the (and I swear their PHD paper actually includes this line), "programming sheep from non-programming goats."

Basically, they decided that there are three models that people need to be able to conceptualize:

  • assignment and sequence
  • recursion / iteration
  • concurrency

They claim that even good programmers have great difficultly getting a good model of concurrency (which I will attest is one of the most difficult concepts to wrap your head around in CS). But they also claim that simply testing students for a mental model of assignment and sequence before they ever see a single programming book is an excellent predictor of CS aptitude. For example, this is the very first question on their test:

Read the following statements and tick the box next to the correct answer.

int a = 10;
int b = 20;
a = b;

The new values of a and b are:

[ ] a = 20 b = 0
[ ] a = 20 b = 20
[ ] a = 0 b = 10
[ ] a = 10 b = 10
[ ] a = 30 b = 20
[ ] a = 30 b = 0
[ ] a = 10 b = 30
[ ] a = 0 b = 30
[ ] a = 10 b = 20
[ ] a = 20 b = 10



As someone who does this for a living, I have trouble believing anyone could get this wrong (the correct answer is (2) by the way). Yet when these UK researchers ran their students through a set of questions like this, fully 39% would fail the test. 39%! And weirdly the things you would expect to affect this, like overall intelligence, GPA, or access to computers has absolutely no effect on this number! Its almost like the good programmers are different not because we are smarter, but because we have a natural ability at creating consistent models of machine logic. Moreover, this number appeared to the researchers to be very difficult to move. Even after 3 weeks of tutoring, "there is very little movement from consistent to inconsistent". That is, either you have a consistent model of assignment, or it is very likely you will never have one!

Ok, all well and good so far. But it begs several questions

  1. If this really is a great predictor, would it be ethical to require it from freshmen CS?
  2. What if the school decided that this test would be their entrance criteria for beginning CS classes?
  3. Would your answer change if I pointed out that the test was not 100% accurate (It's more like 80%)?
  4. Given this information, is it fair that most engineering schools now require at least one programming class on all students? If we know that at least 30% of students are not wired to understand this stuff, is it fair to make Mechanical Engineers learn Java?

6 comments:

Eric said...

My point was not to be smug:) It was more a fascination with this idea that despite the happy go lucky message we give childern that you can be anything you want to be, the reality might be very different.

And I'm curious more about the ethical question that such a test brings up. Imagine in your case that their was a test that could consistantly tell you if you are going to do a good job of helping others work through mental issues. Would you want to take it before you started down the 8 years to your PHD?

R said...

If someone cannot grasp the core competencies of their intended field of studies, they will eventually flunk out of that major and choose something else.

And there ain't nothing wrong about the school collecting tuition money during that time of "self-discovery," as it were.

Basically, Eric, your premise can be brought all the way back to a child's first education. Given a 3 year old who cannot yet read, and you give them a children's book to assess their ability to excel in kindergarten, of course they're not going to be able to read.

"Oh, this kid can't read yet. He's destined to be a complete moron."

Ridiculous? Yes, and so is giving potential Computer Science majors a test in logic to "weed" them out before they may even learn. Just because they don't get it doesn't mean they won't.

Anyway, I never liked CS majors. They're arrogant, self-centered assholes who like to flaunt their deluded sense of superiority over everybody else.

Thank God I became a computer engineer. ;)

Eric said...

But according to this research paper, the issue is not these people don't undertstand assignment yet. The issue is that this test seems to show whether you will ever build a consistent model of assignment. Their research seems to show that the answer is in fact no.

You say the university has every right to collect money during that "self-discovery" phase, and I 100% agree. I guess my question should instead be, "If I had a test that would tell you with fairly high degree of confidence that your money would be better spent taking classes in another major, would you want to take it?"

R said...

"If I had a test that would tell you with fairly high degree of confidence that your money would be better spent taking classes in another major, would you want to take it?"

If I was easily discouraged, yes.

R said...

Remember, though, failing is itself an act of learning and discovery. One might even say that we learn more from failing than we do from succeeding.

Sue said...

I wish that more Doctor's would be tested so that arrogant assholes could not be allowed to murder innocent people for practice. Just my thought.... It has been my experience that even complete morons can get through a program through many means. Just because you graduated from a program does not mean that you are any good at a job. I have seen this in my first career and my second. I wish I did not see it in Nursing. Luckily though with computer people, you will not automatically kill someone if you make a mistake and you can work on learning how to do your job by fucking up huge and learning from that. In my work, you fuck up and someone dies... Just another way of looking at things. :o

Eric, you are the greatest programmer alive! He has found his niche and just works magic on programs. I cannot explain it, but if you saw him work you would understand it. I am amazed and so very proud of him.