A few days ago, Konrad Hinsen asked this on our discussion list:

Is anyone aware of teaching methods that aim at either developing or verifying the students' mental model of some non-trivial procedure? If so, have they been used for teaching the use of computers?

The short answer is, "Yes". Mark Guzdial looked at what it means to understand computing, and referred to Juha Sorva's excellent thesis on program visualization, the first third of which is a great summary of education theory as applied to programming. Independently, Allison Tew has developed and validated a concept inventory for basic computing (paywalled), which shows that there are indeed "core concepts" that can be mastered. There's also Marian Petre's work on expertise in software development, though its focus is people who are more advanced than those we teach.

But computing is far behind math in this area. Long-running research programs in those fields have produced a wealth of secondary literature on evidence-based teaching practices (like this book); we're still trying to collect raw material. One reason is the vicious circle:

  • K-12 schools don't offer programming classes.
  • So there's no incentive for teachers to specialize in computing.
  • So there aren't programs to train people how to teach computing.
  • So there aren't enough teachers to reliably staff classes.
  • So schools don't offer classes.

As a consequence, computer science departments don't recognize education as a career path to the same extent as math departments: to the best of my knowledge, no CS or Ed department in Canada offers an undergrad course in teaching CS. And without that recognition, it's both difficult and risky for grad students to go into the area.

There's no easy way out of this trap, but there are things we can do. One is to become familiar with what we do know: we use this book in our instructor training course, and most people seem to learn a lot from it. Another is to help people who are doing this kind of research by taking part in studies like Perez De Rosso and Jackson's conceptual design analysis of Git. We'll soon be looking for volunteers ourselves to help with the next phase of our study of code review; if you'd like to take part, please stay tuned for further announcements.

This post originally appeared in the Software Carpentry blog.