I ran across a remarkable paper, “The Camel has two Humps”. Incoming Introduction to Programming students all *want* to learn to program, but about half the class never gets the hang of it and never will. The authors found a test that identifies the students that can learn to program.
The authors’ pretest asks questions about variable assignment: a=10, b=20, a=b. There is a typical meaning for these assignments in programming languages but the incoming students may not know them. So the authors classify the type of logic required to reach different answers and whether the students use the same logic for each question or switch around on different questions. Students who come up with consistent answers for different questions are the students who can learn to program.
Here’s a key figure:
This is remarkable, a way to candle incoming CS students and figure out (mostly) which ones can learn to program.
One notable thing that further research can answer is about the oddballs. The 2-3% of initially inconsistent testers that *do* learn to program–what sort of programmers are they? Do they end up writing different programs than the typical programmer?