Separating Programming Sheep from Non-Programming Goats

A bunch of people have linked to this academic paper, which proposes a way to separate programming sheep from non-programming goats in computer science classes – long before the students have ever touched a program or a programming language:


This is a companion discussion topic for the original blog entry at: http://www.codinghorror.com/blog/2006/07/separating-programming-sheep-from-non-programming-goats.html

"Programming ability is not known to be correlated with age, with sex, or with educational attainment

Uh, it is known to be correlated with sex. In fact, it is glaringly obvious. Are these people jokers?"

Unless you mean correlated with having sex (which in inversely related, I think…), you are wrong. Fewer women attempt to become programmers, but those that do they are just as capable as the males. The ACM and IEEE are trying to engage more women in the the field, but the are hitting a wall with the sterotypes of the field, not the ability of women to code.

Uhm … you’ve fumbled the variable assignments in the first question.

Aw, c’mon, it was a one-character typo. Ain’t there no love in the 'hood?

It’s only tangentially related to the above entry, but I found this great article, “Johnny can so program”, here:

I wonder if there’s another variable at play. Perhaps the students who scored with a consistent view had already been exposed to programming. When I was in college, I remember the students in my classes who had trouble were ones who were entirely new to programming. The rest of us had either been in programming classes previously or had been coding for fun since we were kids.

2 Likes

I wonder how many of the people who fail programming classes also fail algebra classes?

1 Like

The interpretation of the results of the above assignment test make me feel angry. I am not a teacher but I am confident that I can teach (in less than 15 minutes) any person smart enough to be admitted to a computer science class how to pass the above test. The results speak volumes about the utter ignorance of educators regarding the nature of human knowledge and how to acquire it. It is a tremendous act of injustice to blame the students and not the teachers. Now if a student is unwilling to learn the material then that is another question. But to blame the poor education methods on students willing to acquire the knowledge is just ridiculous.

“unteachable”? How is this teaching being done, would changing the teaching method affect the results?

1 Like

Anibal, yes changing the teaching methods would definitely change the results somewhat. Maintaing 100% accuracy with humans is nigh on impossible.

It is a good paper, I was at its presentation. I look forward to the follow up work that will be done on it. Unfortunately most computer science departments are not in the position to turn away students, so I think the best application of this(if it turns out to work well in all institutions) would be for streaming the class into honours students and pass students.

Generally in CS Education Research you’d need a multi-institutional, longtitudinal study to have fully verified results, so I guess we’ll wait and see what comes out of it.

I liked the paper, but the acedemic snobbery in Section 5 pissed me off no end:

“The consistent group seem to be much easier to teach. We speculate that they divide into two groups: the very successful ones find programming easy and may perhaps be those who ought to follow a conventional computer-science education, with lots of formal content; the moderately successful perhaps are the software engineers, those who can program but can’t imagine that they will ever enjoy it, and are content to submit to management discipline and to be drowned in UML (ugh!).”

Poor software engineers, doomed forever to management discipline, UML, and a lack of formalism, all in a job that they’ll never enjoy!

It’s an incorrect question. B has NO new value, only an old value, ergo all the answers are wrong.

This is what happens when you let subliterate engineers design a test: they screw it up. Right there, in the directions.

There are plenty of 17/18/19 year olds insecure enough that they are going to read the question like an actual English sentence (which it is not, it DOES NOT COMPILE given the correct answer, but you coders seem to have ZERO respect for the actual language us humans use) and believe that B HAS CHANGED, MUST HAVE CHANGED.

Such total crap.

I would add ‘indirection’ as hurdle number 3 between recursion / iteration and concurrency. Unless you treat indirection as part of recursion? Anyway, I observed of my fellow students that, whether expressed as explicit pointers or references, or as reference semantics, many of them simply never got the concept of indirection.

iProgramming ability is not known to be correlated with age, bwith sex/b, or with educational attainment/i

Uh, it is known to be correlated with sex. In fact, it is glaringly obvious. Are these people jokers?

I’m by no means an expert but I’ve been teaching high school computer science for 14 years. Was a “real” programmer before that.

I did link a comment to this post and to the orginal study, because I find both fascinating.

Over the years, I’ve had actually three groups of students.

1 group vows very to get involved with programming again. 1 group absolutely loves it (I was in the group myself), and can’t imagine doing anything else. A third group can do it, but doesn’t like it much.

The good news, since I’m teaching high school, it gives them an opportunity to find out which group they belong in without shelling out any money.

The funny part is the high number of parents who are upset that their student isn’t in the 2nd group. I keep telling them that their kids are normal but they don’t always believe me.

And yes, the first group is the most prevelant.

I get both gifted and talented students, regular students and special ed (not many of those), many of them who have no clue what computer science is, but think it might be cool to sit at a computer for an entire class period. Many of my second group have come out of the group that didn’t have a clue if they would like it or not.

Another good article that’s food for thought. This site always has good stuff!
I always wondered about that glazed stare I sometimes get back from some smart, though non-techie people when I try to explain something. Am I not communicating well?
Too much jargon?
Have I not simplified the question or explaination enough?
Do I have something between my teeth?
It usually happens when I’m trying to gather requirements or when explaining what happens when they do a particular action within an application and how that might effect other things in the system.
It’s sort of like that Friends episode when Phoebe tries to teach Joey French.
I’ll have to keep this article in mind and change how I explain things or ask question when I get the “look.” Instead of trying to explain why the computer behaves as it does and getting myself and the user more frustrated, take a different tack completely.

3 weeks of programming classes taught me nothing, except what textbook the lecturer had helped write and wanted us all to buy.

The problem in a current educational setting is deciding which languages (of the thousands out there) to teach students. Majoring on .Net and Java will teach them useful work skills, but some time spent on Ruby, Python or other languages might be more useful in teaching them that there is more than one way to solve a problem.

I was taught COBOL, Miranda, Assembler and SQL - except for the last one, a more useless set of languages you would be hard to find. My best learning experience was on the job learning the actual languages I needed to use.

I haven’t read the paper yet, only the test, so excuse me if I’ve overlooked something. But at first sight I find that assignement operator is a (unfortunate) convention of certain programming languages that we just have to learn, but it has no logic as seen by anyone that has learned the meaning of “=” in maths.

I wonder what would have happened using a different notation like “-” or “:=” that risks no confusion with equality operator. I think it’s called “usability”. Maybe that explains why most programmers are unable to design decent user interfaces.

hi jeff

the example given seems very tilted toward people with experience in a C-like language.

if instead of:

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

it was in a more verbose format:

Variable a is integer
Variable b is integer
set a = 10
set b = 20
set a = b

then clever kids with no programming experience might have a fairer shot at it.

otherwise you need to use the ‘code-cracking’ part of your brain to try and infer a meaning from an unknown syntax.

i know that the biggest barrier to learning in the earliest CS subjects i took was the quality of the lecturers, not the material itself.

interesting article still. best of luck.
lb

I think what most commenters are missing is that the results of the test don’t change after 3 weeks of the students being taught programming, by which time they would have been taught the syntax etc.

1 Like

I’m a latecomer to this discussion, but in my experience as a late-blooming 30 year old CS undergraduate senior, I’ve found the programming classes to be useless, and less badly taught as un-taught. I’ve only been to a community college and then the University of Illinois in Chicago, but the introductory programming classes were:

  1. Object-oriented, which left students with little or no understanding of procedural methods, and

  2. Weed-out classes. The classes consisted primarily of descriptions of different types of problems and the mathematics behind them, rather than ayntax and structure, for which people were told to just read the book.

Code was barely directly acknowledged until the Data Structures core, and then it still depended on which instructor you got, some being very code light and some being nicely code heavy. You could tell that it was a big temptation for teachers to be code light at this point, because if they concentrated on code, they would also have to concentrate on teaching students who had been in a computer science course for two years how to program.

Since coding is a hobby for many young people, I think that educational institutions have relied on that to establish their expected learning curves, leaving people who had little to no experience programming when they entered school no choice but to cheat like crazy, spend all of their spare time studying code, or switch majors. And it isn’t a necessarily a deficit in abstract thinking in my experience, because everyone I know who dropped out of CS ended up in Electrical Engineering, which is nothing to shake a stick at on the abstract front. They still don’t know how to program, while doing math that I can’t make heads nor tails of. Most absurd memories:

  1. Java as the required programming language. I’m not going to bash Java here, but wouldn’t it be nice for students to have to learn their own garbage collection? And wouldn’t pointers be a nice thing to learn, even if we never decided to program in a language with them again?

  2. Taking a core class on operating systems theory, after being being deluged with Java, and finding out it was in C (of course) without even one C class on campus?

Of course, I’m thirty, and also one of those people who always programmed, so I had no problems, but I saw plenty of people who I knew were better at abstraction than me (from Calculus, DiffEQ, and physics classes before) and their total agony at trying to finish a program that had been stacked against them.