I've been reading "Language-independent conceptual 'bugs' in novice programming", an apparently classic work from 1986 by Roy D. Pea (https://eric.ed.gov/?id=ED319373). Incidentally, I was 10 when it was written and I learned LOGO around that time, so while my school wasn't in his study, I was learning it at the same time he was interviewing other 8-12 year olds.
Anyway, it's so interesting.
The paper identifies three types of error that he argues are likely derived from one larger conceptual "super-bug" -- the idea that something inside the machine or programming language has intelligent interpretive powers.
Specifically, students have a predominant analogy that guides their behavior, when as novices, they write programming instructions to a computer. This analogy is conversing with a human. Their pragmatic strategies for using natural language with other humans lead them astray as they try to deal with programming, because programming is a formal system that interprets each part of a program in terms of rules that are mechanistic.... This fundamental feature of programming systematically violates human conversational maxims, such as the cooperative principles outline by Grice, and developed in theories of natural language pragmatics.
I think what I like best about this paper is that, although it focuses on conceptual "bugs", it treats them respectfully as a natural consequence of the learner's situation -- similarly to the best work I have seen on misconceptions in physics education: "First, we need to be aware of the pervasiveness of programming misunderstandings that arise from the tacit applications of human conversational metaphor to programming. This is powerful transfer, to be sure, but it is misleading."
I've been feeling the struggle on transferability lately -- my experience in the fall data analysis class was that almost nothing transferred. What seemed to me identical problems, taken up on successive days, resulted in exactly the same set of confusions and difficulties the second day as the first. So much of programming seems situation-dependent in a way that is very difficult for students.
But I feel a bit of hopefulness in thinking about the conceptual "super-bug" as an example of over-transfer. On the one hand in the remarkable facility with which humans handle all kinds of different human situations, on the naturalness of trying to apply that reasoning to new situations, and for the future of computer science instruction that tools are getting better and better to reduce some of that disconnect.