See the PDF.
At the beginning of every semester of our introductory programming course, I ask my students to tell me about their prior programming experiences, if any. I like to cross-reference their self-reported experience levels with their final grades. The first several years I did this, I found that prior experience wasn’t necessarily a great predictor of success. This year I see that most of the As in the class went to folks with prior experience:
Note, however, that I had a total of 36 As in the class; 12 of them did not complete the experience level survey. Even so, the average score for someone without experience is probably lower than those with. This is unfortunate, but no big surprise. People with more experience should do better; that’s why experience is valued. Not just any experience counts, however. The majority of Fs went to folks with prior experience. Some of this within-grade dominance is due to the fact that we just have more people with prior experience in the class that those without:
What’s more important to me is that folks without prior experience still have the potential to do well through a combination of hard work and the formation of relationships with classmates, TAs, and instructor. The first graph suggests that a few people did achieve this potential, but not enough. The students who did are those whose brains we need to dissect.
Should an introductory programming class cater to the experienced or to the inexperienced? If we cater to the experienced, we risk homogenization and equity issues. If we cater to the inexperienced, we lower the value of our degree, whose high standards have earned the respect of local industry. As more middle and high schools begin to offer computer science courses, this disparity will go away. Until that time, however, we need to find some way to serve both demographics. Our solution for the next fall semester is to provide two separate courses, one for beginners and one for non-beginners.