Computational Thinking, - What and Why - Jeannette Wing
Computational Thinking, - What and Why - Jeannette Wing
Jeannette M. Wing17
November 2010bookmark01
In my March 2006 CACM article I used the term "computational thinking" to articulate a vision of how
everyone - not just those who specialize in computer science - can benefit from thinking like a computer
scientist [Wing06]. So what is computational thinking? Here's a definition that Jan Cuny of the National
Science Foundation, Larry Snyder of the University of Washington, and I used; it was inspired by an
email exchange I had with Al Aho of Columbia University:
Computational Thinking is the thought processes involved in formulating problems and their
solutions, so that such solutions are represented in a form that can be effectively executed by an
information processing agent [CunySnyderWing10]
Informally, computational thinking describes the mental activity of formulating a problem so that it
admits a computational solution. The solution can be carried out by a human, a machine or, more
generally, a combination of humans and machines.
When I use the term computational thinking, my interpretation of the words "problem" and "solution" is
broad, and in particular I am not referring only to mathematically well-defined problems whose
solutions are fully analyzable - for example, a proof, an algorithm, or a program - but also to real-world
problems whose solutions may be in the form of large, complex software systems. Computational
thinking therefore overlaps with logical thinking and systems thinking: it includes algorithmic thinking
and parallel thinking, which in turn draw on other forms of thought processes, such as compositional
reasoning, pattern matching, procedural thinking, and recursive thinking.
Broadly interpreted, computational thinking is used in the analysis and design of problems and their
solutions. The most important and high-level process in computational thinking is abstraction: it is used
in defining patterns, generalizing from instances, and parameterizing; to make one object represent
many; and to capture essential features common to a set of objects while hiding irrelevant differences
between them. For example, an algorithm is the abstraction of a process that takes certain inputs,
executes a sequence of steps, and produces outputs to satisfy a desired goal. An abstract data type
defines an abstract set of values, and operations to manipulate those values, while hiding the actual
representation of the values from the user of the data. The design of efficient algorithms inherently
involves the design of abstract data types. Abstraction gives us the power to scale and deal with
complexity.
Applying abstraction recursively allows us to build larger and larger systems, with the base case - at
least for computing - being just bits (0 and 1). In computing, we routinely build systems in terms of
layers of abstraction, which allows us to focus on a single layer at a time and on the formal relationships
(e.g., "uses", "improves", or "implements", "simulates") between adjacent layers. When we write a
program in a high-level language, we do not worry about the details of the underlying hardware, the
operating system, the file system, or the network; rather, we trust the compiler to be a correct
implementation of the language's semantics. As another example, the delicate architecture of the
2
Computational Thinking in Everyday Life
Computational thinking can be applied in everyday life. The Department of Computer Science at
Carnegie Mellon provided me with the following stories:
Pipelining. Randy Bryant, Dean of the School of Computer Science, was thinking about how to speed
up the Sunday School graduation ceremony. He designed an efficient flow by properly positioning
people to stand so that when Mark Stehlik reads each graduate's name, they can receive their diploma,
give him a handshake or hug, and take a photo with him. This channeling allows for a steady flow of
students across the stage (frequently, bottlenecks in the flow occurred when graduates dropped their
caps while giving Mark a hug.)
Seth Goldstein observed: "At buffets, why do they always put the dressing before the salad? And the
sauce before the main dish? Why is the cutlery at the beginning? They need some channeling."
Hashing. After a talk about my vision of computational thinking at a faculty meeting in my department,
Danny Sleator came up to me to tell me that at home they use a particular hash function to store Lego
pieces. According to Sleator, they use dispersion in these categories: thick rectangular blocks; other
thick blocks (non-rectangular); thin blocks (any shape); axles, rivets and spacers; axle ties, balls and
sockets; and miscellaneous. They even have rules for classifying pieces that might fit into more than one
category. He said that "even though this method seems rather crude, it reduces the time spent searching
for a part by a factor of 10." Avrim Blum was listening as Danny told me this story and chimed in to
say, "We use a different spread function at our house."
Sorting. The following story I took verbatim from an email sent by Roger Dannenberg, a professional
trumpeter and computer scientist. "I joined an orchestra, and the director gave us folders with about 200
disorganized scores and a list of about 40 titles, when we were about to give a concert. Everyone began
searching through the pile, pulling out the scores one by one. I decided to order the 200 scores
alphabetically -O(N log (N))- and then insert them -O(M log (N))-. I was still sorting them out while the
other orchestra members were barely halfway through, and I started getting some mocking glances, but
in the end I finished in first place. "That's computational thinking."
Benefits of Computational Thinking
Computational thinking is the new literacy of the 21st century. It allows us to adapt computing to our
needs. Why should everyone learn a little computational thinking? Cuny, Snyder and I advocate the
following benefits [CunySnyderWing10]:
Computational thinking for all means being able to:
• Understand which aspects of a problem are susceptible to being solved by computation
• Evaluate how suitable computational tools and techniques are for a problem
• Understanding 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 computing in new ways
• Apply computational strategies such as divide and conquer in any domain
For scientists, engineers and other professionals, computational thinking also means being able to:
• Apply new computational methods to problems
3
• Reformulate problems so that they are susceptible to applying computational strategies
• Discovering new "science" through the analysis of large volumes of data
• Formulate new questions, which they had not dared to consider or ask about their scale, easily
through computation
• Explain problems and solutions in computational terms.
Final Comments
Computational thinking is not just about computation. The educational benefits of being able to think
computationally transfer to any other domain, improving and strengthening intellectual skills.
Computer scientists see the value of thinking abstractly, at various levels of abstraction, of abstracting to
manage complexity and to deal with scale, etc. We know the value of these capabilities. Our immediate
task is to better explain to non-experts what we mean by computational thinking, and the benefits of
being able to think computationally. Please join me in helping spread the word!
Literature
[CRA-E10] Computing Research Association, Creating Environments for the Education of
Computational Researchers, August 9, 2010.
5
http://www.cra.org/uploads/documents/resources/rissues/CRA-E-Researcher-Education.pdf
[CunySnyderWing10] Jan Cuny, Larry Snyder, and Jeannette M. Wing, Demystifying Computational
Thinking for Non-Experts, work in progress, 2010.
[NRC10] National Research Council, Report of a Workshop on the Scope and Nature of Computational
Thinking, 2010
http://www8.nationalacademies.org/cp/projectview.aspx?key=48969
[Link10] A Dean's Perspective, The Link, September 2010.
[PITAC05] Chairman of the Information Technology Advisory Council, Computer Science: Ensuring
America's Competitiveness, Report to the President, June 2005.
[Wing06] Jeannette M. Wing, Computational Thinking, Communications of the ACM, vol. 49, no. 3,
March 2006, pages 33-35.
Acronym:
ABI: Anita Borg Institute for Women and Technology
ACM: Association for Computing Machinery
BHEF: Business-Higher Education Forum
CISE: Computer and Information Science and Engineering
CRA: Computing Research Association
CRA-E: Computing Research Association-Education
CSTA: Computer Science Teachers Association
CSTB: Computer Science and Telecommunications Board
IEEE: Institute for Electrical and Electronic Engineers
NCWIT: National Center for Women and Information Technology
NSF: National Science Foundation
SIGCSE: ACM Special Interest Group on Computer Science Education
SWE: Society for Women Engineers