A Definition of Computational Thinking from Jeannette Wing
I met with Jeannette Wing yesterday, and we discussed the need for a good, authoritative definition of computational thinking. I told her about the CE21 Community Meeting where I saw K-12 evaluators looking for a definition that they could use to develop an assessment of computational thinking at the middle school level. Some of these evaluators were using the CS:Principles materials which made me uncomfortable — we designed those principles and practices to reflect what we saw as the core of computer science and as being appropriate for an advanced placement course. We didn’t write these to be a guide to what middle school students need to know about how to think about and with computing.
She gave me a copy of the most recent The Link, a CMU publication, in which she has an article, “Computational Thinking — What and Why?” She offers a definition and a rationale for the definition, taken from a work-in-progress paper by Jan Cuny, Larry Snyder, and Jeannette, “Demystifing Computational Thinking for Non-Computer Scientists.” She gave me permission to blog on the definition and the rationale.
Computational thinking is the thought processes involved in formulating problems and their solutions so that the solutions are represented in a form that can effectively be carried out by an information-processing agent.
The article goes on to expand on this definition and offer examples. She says, “Computational thinking overlaps with logical thinking and systems thinking. It includes algorithmic thinking and parallel thinking, which in turn engage other kinds of thought processes, such as compositional reasoning, pattern matching, procedure thinking, and recursive thinking.” Jeannette pointed to a section of the paper on “Benefits of Computational Thinking” as being key:
Computational thinking enables you to bend computation to your needs. It is becoming the new literacy of the 21st century. Why should everyone learn a little computational thinking? Cuny, Snyder and I advocate these benefits [CunySnyderWing10]:
Computational thinking for everyone means being able to:
- Understand which aspects of a problem are amenable to computation,
- Evaluate the match between computational tools and techniques and a problem,
- Understand the limitations and power of computational tools and techniques,
- Apply or adapt a computational tool or technique to a new use,
- Recognize an opportunity to use computation in a new way, and
- Apply computational strategies such divide and conquer in any domain.
Computational thinking for scientists, engineers, and other professionals further means being able to:
- Apply new computational methods to their problems,
- Reformulate problems to be amenable to computational strategies,
- Discover new science through analysis of large data,
- Ask new questions that were not thought of or dared to ask because of scale, but which are easily addressed computationally, and
- Explain problems and solutions in computational terms.
This definition is still pretty high-level, but is still much better than having no definition. It’s a broad definition that encompasses a lot of powerful cognitive skills. We can move away from trying to draw lines between what is and what isn’t computational thinking, and instead focus on implications. What parts of this are appropriate to see at the middle school level? How do we teach these abilities? How would we measure them?