In the midst of our struggle to better articulate why computing is so much broader than programming, a movement of sorts has emerged. It is being called "computational thinking."8 The U.S. National Science Foundation's Computer and Information Science and Engineering (CISE) directorate has asked most proposers, especially those in its CPATH initiative, to include a discussion of how their projects advance computational thinking. Carnegie Mellon University's Center for Computational Thinking says, "It is nearly impossible to do research in any scientific or engineering discipline without an ability to think computationally.... [We] advocate for the widespread use of computational thinking to improve people's lives."1
Computational thinking is seen by its adherents as a novel way to say what the core of the field is about, a lever to reverse the decline of enrollments, and a rationale for accepting computer science as a legitimate field of science. This movement is driven by four main concerns:
- Bringing computer science to the table of science (as partner, not programmer).
- Finding ways to make computer science a more attractive field for students to major in and for other sciences to collaborate with.
- Resurrecting ongoing inquiry into the deep questions of the field.6,9
- Showing that computation is fundamental, and often unavoidable, in most endeavorsa desire to proselytize.
Since starting a stint at NASA-Ames in 1983, I have been heavily involved with computational science and I have devoted a substantial part of my own career to advancing these objectives. Since 2003 I have advocated a great-principles approach to the perennially open question, "What is computer science?"4
Yet I am uneasy. I am concerned that the computational thinking movement reinforces a narrow view of the field and will not sell well with the other sciences or with the people we want to attract. I worry that we are not getting out of the box, but are merely repackaging it with new paper and a fresh ribbon.
In this column, I will examine two key questions:
- Is computational thinking a unique and distinctive characterization of computer science?
- Is computational thinking an adequate characterization of computer science?
My own conclusion is that both answers are no. I will suggest that a principles-based framework answers both questions yes. We are custodians of a deep and powerful discourse: Let's not hide it with an inadequate name.
What is Computational Thinking?
Computational thinking has a long history within computer science. Known in the 1950s and 1960s as "algorithmic thinking," it means a mental orientation to formulating problems as conversions of some input to an output and looking for algorithms to perform the conversions.
Today the term has been expanded to include thinking with many levels of abstractions, use of mathematics to develop algorithms, and examining how well a solution scales across different sizes of problems.1
Is Computational Thinking Unique to Computer Science?
In the 1940s, John von Neumann wrote prolifically on how computers would be not just a tool for helping science, but a way of doing science.
As early as 1975, Physics Nobel Laureate Ken Wilson promoted the idea that simulation and computation were a way to do science that was not previously available. Wilson's Nobel Prize was based on breakthroughs he achieved in creating computational models whose simulations produced radical new understandings of phase changes in materials. In the early 1980s, Wilson joined with other leading scientists in many fields to advocate that the grand challenges of science could be cracked by computation and that the government could accelerate the process by supporting a network of super-computing centers.7 They argued that computation had become a third leg of science, joining the traditional legs of theory and experiment. The term "computational thinking" was common in their discussions.
The computational sciences movement eventually grew into a huge interagency initiative in high-performance computing, and culminated in the U.S. Congress passing a law funding a high-performance computing initiative in 1991.
This movement validated the notion that computation (and computational thinking) is essential to the advancement of science. It generated a powerful political movement that codified this notion into a U.S. federal law.
It is important to notice that this movement originated with the leaders of the physical and life sciences. Computer science was present but was not a key player. Computer scientists, in fact, resisted participation until NSF CISE and DARPA set up research programs open only to those collaborating with other sciences.
Computation is unavoidable not only in the method of study, but in what is studied.
In the middle 1980s, Ken Wilson advocated the formation of departments of computational science in universities. He carefully distinguished them from computer science. The term "computational science" was chosen to avoid confusion with computer science.
Thus, computational science is seen in the other sciences not as a notion that flows out of computer science, but as a notion that flows from science itself. Computational thinking is seen as a characteristic of this way of science. It is not seen as a distinctive feature of computer science.
Therefore, it is unwise to pin our hopes on computational thinking as a way of telling people about the unique character of computer science. We need some other way to do that.
The sentiment that computational thinking is a recent insight into the true nature of computer science ignores the venerable history of computational thinking in computer science and in all the sciences. Computer science is a science in its own right (see the sidebar "Computer Science as Science").
Is Computational Thinking Adequate for Computer Science?
In 1936 Alan Turing defined what it means to compute a number. He offered a model of a computing machine and showed that the machines were universal (one could simulate another). He then used his theory to settle a century-old "decision problem" of mathematics, whether there is a by-inspection method to tell if a set of decision rules can terminate with a decision in a finite number of moves. He showed that the "decision problem" was not computable and argued that the very act of inspecting is inherently computational: not even inspectors can avoid computation. Computation is universal and unavoidable. His paper truly was the birth of computer science.
The modern formulations of science recognize the same truth when they say that computation is an essential method of doing science. In fact, a growing number of scientists are now saying that information processes occur naturally (for example, DNA transcription) and that computation is needed to understand and eventually control them.3 So computation is unavoidable not only in the method of study, but in what is studied.
This is a subtle but important distinction. Computation is present in nature even when scientists are not observing it or thinking about it. Computation is more fundamental than computational thinking. For this reason alone, computational thinking seems like an inadequate characterization of computer science.
A number of us developed a great principles framework that exposes the fundamental scientific principles of computing4,6 (see the sidebar "The Great Principles Framework"). This framework interprets computer science as the study of fundamental properties of information processes, both natural and artificial. Computers are the tool, not the object of study. Computation pervades everyday life.2
The great principles framework reveals that there is something even more fundamental than an algorithm: the representation. Representations convey information. A computation is an evolving representation and an algorithm is a representation of a method to control the evolution.
In this framework, computational thinking is not a principle; it is a practice. A practice is a way of doing things at which we can develop various levels of skill. Computational thinking is one of several key practices at which every computer scientist should be competent (see the sidebar "The Great Principles Framework"). It shortchanges computer science to try to characterize the field by mentioning only one essential practice without mentioning the others or the principles of the field.
The real value of computer science is in the offers we are able to make from our expertise, which is founded in a rich and deep discourse.
Computation is widely accepted as a lens for looking at the world. We do not need to sell that idea. Computational thinking is one of the key practices of computer science. But it is not unique to computing and is not adequate to portray the whole of the field.
In the 1960s and 1970s we allowed, and even encouraged, the perception "CS = programming," which is now to our dismay widely accepted outside the field and is connected with our inability to take care of the concerns listed at the beginning of this column. But given the outside perception, computational thinking is all too easily seen as a repackaginga change of appearance but not of substance. Do we really want to replace that older notion with "CS = computational thinking"? A colleague from another field recently said to me: "You computer scientists are hungry! First you wanted us to take your courses on literacy and fluency. Now you want us to think like you!"
I suggest that the real value of computer science is in the offers we are able to make from our expertise, which is founded in a rich and deep discourse. We are valued at the table when we help the others solve problems they care about. We are most valued not for our computational thinking, but for our computational doing.
1. Carnegie Mellon University Center for Computational Thinking; http://www.cs.cmu.edu/~CompThink.
2. Computer Science Unplugged Web site; http://csunplugged.org.
6. Great Principles of Computing Web site; http://greatprinciples.org.
The Digital Library is published by the Association for Computing Machinery. Copyright © 2009 ACM, Inc.