Over the past 18 months, I’ve had the opportunity to be part a team led by Joyce Malyn-Smith of EDC for her NSF grant, Computational Thinking from a Disciplinary Perspective. The project was inspired by earlier work that Joyce conducted with Irene Lee. (Irene is the creator of the Project GUTS curriculum for learning science and computational thinking via modeling and simulation).
In their work, Joyce and Irene interviewed a variety of practicing scientists to reveal how they used computing to do science. Through these interviews, they elaborated a variety of practices which include profound and creative uses of computing, often invented by the scientists themselves.
Since the publication of Jeannette Wing’s 2006 paper on computational thinking, our community has been engaged in a sense-making process: what exactly is it? The initial description of “thinking like a computer scientist” is a bit tautological—and not terribly helpful for someone who isn’t already a computer scientist.
I have personally been struggling with understanding the relationships among the broad categories of computer science, programming, and computational thinking. For example:
Q. Can you do computer science without programming?
A: Yes of course; we can analyze the complexity of a search algorithm, realize the need to use hashing to speed a table-lookup, etc.
Q. Can you do programming without computer science?
A. Probably. Beginners’ spaghetti code might be an example. “Hacking” in general suggests building things without an underlying theory (though there may be an implicit one). But let’s say yes to this too.
So, where does CT fit in? Is it in the intersection? Many people think you can do CT without doing programming, so perhaps not. How is CT not just another word for computer science then?
Jeannette Wing’s more recent paper (2011) provided this definition of CT: “Computational thinking is the [human] thought processes involved in formulating problems and their solutions so that the solutions are represented in a form that can be effectively carried out by an information-processing agent [a computer].”
To me, this still sounds like “thinking like a computer scientist.” This is what we do! We formulate problems and their solutions so that a computer can carry them out!
So what’s the difference between doing CT and doing computer science?
Thanks to my collaboration with Joyce and Irene (and our whole team), I now see an answer.
Computational thinking is about connecting computing to things in the real world.
Here are some examples.
A starter program we may often have our students write is to model a checking account. Our students will use a variable to represent the bank balance, and build transactions like deposits and withdrawals. Maybe they’ll represent the idea of an overdraft, or insufficient funds.
Let me argue that this simple example captures the essence of computational thinking.
What makes it so is that we are connecting a concept in the world—money in a bank account—to its representation in a computational system. This sounds pretty simple. But there is surprising complexity. What sort of numerics should we use—e.g., should we represent fractional pennies? For a beginning student, we could ignore this. But in a more elaborated solution, this intersection of computational considerations and real-world concerns is crucial—and this is computational thinking.
Here is another example. Consider how we usually represent colors. We use three bytes of information: 0 to 255 amounts of red, green, and blue (RGB) light. For web HTML, we’d use the hexadecimal notation. For example, #8020C0 is 128 (decimal) of red, 32 (decimal) of green, and 192 (decimal) of blue, or this color:
This RGB representation was created at the intersection of the neurophysiology of human vision, the physics of how we build displays, and practical considerations of computing. Why do we mix only these three wavelengths of light? Because the way our eyes and brains work, we can mimic practically any color with just these three. Why use just one byte of information for each color intensity? It turns out the ~16 million colors which can be represented this way is quite powerful—and good enough—for how we use computers now.
So the whole notion of the RGB representation of color is computational thinking in action.
For a more elaborated example, let’s consider the JPEG file format—of the Joint Photographic Experts Group. This team included computer scientists, neurophysiologists, and artists. Their insight was that we could compress images by a factor of ten or more by discarding information that the human eye doesn’t see anyway. What a fabulous insight—and the very essence of computational thinking, because it connects concepts in computing (like compression algorithms) to understandings of our physical and perceptual worlds.
To revise our illustration, now CT is the “connecting tissue” between the world of computer science / programming expertise and the world of disciplinary knowledge:
To “do CT,” you need to know about both worlds. You need to know how to create solutions using computing. You need to know something about a domain in the world. And CT is the knowledge, skills set, and disposition of intermediating between these two.
Now, Jeannette Wing’s 2011 definition makes perfect sense: “Computational thinking is the thought processes involved in formulating problems and their solutions so that the solutions are represented in a form that can be effectively carried out by an information-processing agent.”
Yes! The key is recognizing that there is a non-computational domain—something in the world that we care about—which is being transformed (represented computationally) in this process.
To close the loop back to Joyce’s project: In addition to myself and Irene Lee, Joyce’s team had project advisers Michael Evans and Shuchi Grover, her EDC colleagues Paul Goldenberg, Lynn Goldstein, Sarita Pillai, and Kevin Waterman, and project evaluator David Reider.
In a series of planning meetings and then a pair of 2-day workshops with K-12 CS practitioners and researchers from around the country, we developed the idea of how computational thinking is transformed by connecting it to scientific disciplinary practice.
We created a framework with a set of five “elements” which illustrate the integration of computational thinking into disciplinary understanding.
Please stay tuned for work to come from our group, presenting this idea of “Computational Thinking From a Disciplinary Perspective.”
It’s given me a whole new way to think about what computational thinking can mean.
It’s about connecting computing to the world.