Summary: Just because CS is abstract, doesn’t mean we should teach abstractly.
Last semester, I took a seminar discussing how the Computer Science department should offer a course to non-majors on Computational Thinking. With the exception of myself and two or three other students, no one had any kind of formal education background (e.g., had taken classes in Educational Psychology, or Learning Sciences, etc.).
- These students were Content Knowledge experts: they were well aware of and comprehended important subjects in Computer Science.
- But they lacked Pedagogical Knowledge: they don’t know how to teach.
- By extension, they were lacking in Pedagogical Content Knowledge: they didn’t know how to teach the subject they knew so very much about.
These terms are taken from a framework that describes this distinction eloquently: TPACK.
This knowledge gap in my classmates is exemplified by the discussion on Abstraction. Everyone agreed that Computer Science is largely about abstracting: we turn real-world concepts into simplified models with unimportant details hidden away. We absolutely want to teach Abstraction in computer science. Unfortunately, this love of an admittedly powerful tool can be over-consuming, because it doesn’t mesh with how people learn, according to popular, modern theories like Situated Learning and Constructivism. By these theories, people learn by building on prior knowledge and from authentic, contextualized scenarios. Abstracted thinking dictates that we carve knowledge out and make it completely divorced from the setting: “here are facts, memorize them and absorb them; later on we’ll turn these generalized facts into specific ones, but that’s not really that important”, we tell computers. But people and computers learn information so differently! Humans need metaphors and frame stories. “A program is like a recipe, you have a list of steps that you follow”, we tell people.
When you try to teach only abstracted facts, you’re trying to force people to memorize things by rote: in my opinion, this is the biggest waste of time, since you will never beat a computer when learning by rote. Instead, you must provide contextualized experiences for students and build on their prior knowledge. Once you understand the power in the difference, you can see the distinction between Content Knowledge and Pedagogical Knowledge.
I leave it as an exercise to the reader to determine how Technological Knowledge fits into Abstraction. It’s messy to distinguish this category in our field!