Edsger Dijkstra's 1988 paper "On the Cruelty of Really Teaching Computer Science" (in plain text form here) is one of the most well-cited papers on computer science (CS) education. It's also wrong. A growing body of recent research explores the very topic that Dijkstra tried to warn us away from — how we learn and teach computer science with metaphor.
According to Google Scholar, Dijkstra's paper has been cited 571 times. In contrast, the most-cited paper in all of the ACM Digital Library papers related to SIGCSE has 412 citations (see data here). Dijkstra's paper has been cited more than any peer-reviewed CS education research. Many of these citations might be citing the "cruelty" paper as a foil, like Owen Astrachan's "On the Cruelty of Really Teaching Computer Science redux."
Dijkstra's argument is that computers represent "radical novelty." There's nothing like them in human experience, and we cannot use our past experience to understand them. In particular, we shouldn't use metaphors.
It is the most common way of trying to cope with novelty: by means of metaphors and analogies we try to link the new to the old, the novel to the familiar. Under sufficiently slow and gradual change, it works reasonably well; in the case of a sharp discontinuity, however, the method breaks down: though we may glorify it with the name "common sense", our past experience is no longer relevant, the analogies become too shallow, and the metaphors become more misleading than illuminating. This is the situation that is characteristic for the "radical" novelty.
Coping with radical novelty requires an orthogonal method. One must consider one's own past, the experiences collected, and the habits formed in it as an unfortunate accident of history, and one has to approach the radical novelty with a blank mind, consciously refusing to try to link it with what is already familiar, because the familiar is hopelessly inadequate.
We now know that this is likely impossible. The learning sciences tell us that all learning is based on connecting new experiences to previous, through a process called constructivism developed by Jean Piaget (see a nice explanation here). Trying to learn something without connection to prior experience inhibits learning. It leads to a phenomenon called inert knowledge (see Wikipedia page) where you have memorized stuff to pass the test, but you don't really understand and can't really use the knowledge.
I never really thought much about the metaphors we use to learn and teach computer science until the SIGCSE 2014 paper "Metaphors we teach by." CS teachers and students have been ignoring Dijkstra's admonitions all along. They teach with a variety of metaphors, and though all of them have limitations (Dijkstra was right about that), this paper explored how teachers dealt with the breaking point.
A 2019 paper "Identifying embodied metaphors for computing education" goes a step further, to focus on the metaphors that are based on physicality. From a "radical novelty" perspective, this may seem ridiculous — nothing could be less physical than ideas like "arrays" and "control flow." But from a "constructivism" perspective, nothing could be more natural. The basis for all our experiences are being physical beings in a physical world. When we're dealing with new ideas, we will likely relate them to physical processes.
I'm working with Ph.D. student Amber Solomon, who has been studying how teachers teach recursion and how students learn it. She had a paper this last summer at the 2020 International Conference of the Learning Sciences about the embodied metaphors that teachers use when teaching recursion (see blog post summary here). Teachers gesture and point, but it's not clear to what. They talk about being "here" and "going." They use language that suggests metaphors like the program "says" something.
Amber is co-advised by Betsy DiSalvo and me. The three of us have been spending time coding her videos of CS students understanding and modifying programs that use recursion. These are absolutely fascinating, and once you start looking for metaphors and uses of embodiment, you see it everywhere. I particularly like how students shift metaphors, e.g., talking about the recursive function "going" and then being "stopped" by the base case, then talking about "going down" the stack and execution being different "on the way back up." We know that there is no "down," "back," or "up" in a computer process — these are examples of using concepts from our everyday, physical world to understand computational processes.
In 1988 when Dijkstra wrote this piece, cognitive science journals were only about a decade old, and learning sciences wasn't established until the 1990s. It's understandable that Dijkstra might not have known about constructivism. Today, we know constructivism as the most widely-accepted theory of how humans learn. Using a constructivist lens on learning about computing, we can better understand how to help students use their everyday knowledge as metaphors to learn computer science.
Mark Guzdial is professor of electrical engineering and computer science in the College of Engineering, and professor of information in the School of Information, of the University of Michigan.