What Is Computational Thinking?
Most of the workshop’s discussions focused on exploring different aspects of what participants thought about computational thinking. The presentation of topics in this chapter is not chronological—throughout the workshop discussions, participants returned to topics and ideas mentioned earlier. Thus, the presentation below seeks to organize the discussions by theme rather than by order of presentation. Section 2.1 outlines an overview of some of the intuitive notions of computational thinking held by different workshop participants. Section 2.2 discusses computational thinking as a range of concepts, applications, tools, and skill sets. Section 2.3 looks at computational thinking linguistically (i.e., as a language) and explores the role and importance of programming as an essential aspect of computational thinking as a primary and critical mode of precise expression. Section 2.4 examines computational thinking from the perspective of automating computational abstractions. Section 2.5 looks at computational thinking as a cognitive tool set for certain kinds of intellectual endeavor. Section 2.6 explores computational thinking in contexts that do not explicitly require the use of information technology as traditionally understood. A related section (Section 2.7) explores the question of how and to what extent computers per se relate to computational thinking. Section 2.8 examines the collaborative dimensions of computational thinking. Section 2.9 presents views on what computational thinking is not.
THE LANDSCAPE OF COMPUTATIONAL THINKING
In a 2006 article, Jeannette Wing, then a professor of computer science at Carnegie Mellon University, discussed computational thinking as “a way of solving problems, designing systems, and understanding human behavior that draws on concepts fundamental to computer science.”1 Since then, Wing has assumed the position of assistant director of the National Science Foundation Computer and Information Science and Engineering Directorate. From that podium, she has promoted the idea that as computation, communications, and information become increasingly prominent throughout daily life, computational thinking becomes more useful to the economic, intellectual, and social well-being of everyone (Box 2.1).
Wing’s presentation at the workshop made prominent mention of the “shotgun” approach to sequencing the human genome as a powerful example of how computational thinking might be useful outside the traditional domain of computer science. The human DNA sequence consists of 3.4 billion base pairs, and the determination of this sequence was completed in 2003, in a significantly shorter time than originally estimated, through the use of the shotgun approach. In general, the sequencing of a long DNA string can be accomplished only by dividing the sequence into a number of short fragments, each of which is sequenced and then assembled into the appropriate order.
In the shotgun approach, a long DNA sequence is randomly divided into many short fragments, each of which can be sequenced. To reassemble the fragments, investigators use overlaps between the ends of the fragments—fragments whose ends do not match cannot be connected to each other. However, the presence of a match between fragment ends does not guarantee that the two fragments in question should necessarily be joined, and additional data are needed to resolve these ambiguities. To obtain the additional data, the fragmentation process is repeated—since the division is random, it is likely that the spot where two fragments were separated in the first fragmentation will in fact be contiguous in the second fragmentation. This fact can be used to confirm or reject the match proposed from the first round. Through a series of successive rounds of fragmentation and analysis, the correct sequence can be determined. The algorithm used to analyze the data resulting from this iterative process is widely known as a shotgun algorithm.
This example manifests several aspects of computational thinking. Algorithm embodies the notion of a precisely formulated unambiguous
Who Is “Everyone”?
Workshop participants offered a number of definitions of “everyone.” Many of the examples of computational thinking offered were directed at scientists and engineers. A few examples were connected to the needs of professionals in non-technical fields, such as archeology and law. Thus, by implication, computational thinking was thought to be relevant to a broad swath of individuals with college and postgraduate educations.
Others discussed the possibility of computational thinking for K-12 students. Of course, K-12 spans a broad range. High school students take courses that address some topics that involve the same computational-thinking-related activities found in undergraduate courses. K-8 instruction is the focus of modeling and simulation environments such as Scratch and LOGO, and the NetLogo modeling and simulation environment is used primarily in middle and high schools as well as in university courses. Curricular innovations such as the honeybee example of Joshua Danish (see Figure 2.2) illustrate the possibilities.
Participants did not explore the relevance of computational thinking to noncollege-educated adults in any detail. (Christopher Hoffmann did recount a tale of a group of thieves that attempted to steal a large piece of construction equipment. While the thieves prepared for most of the basic logistics surrounding the crime, they did not ultimately understand the computational-thinking-based technology at work in the system, and their efforts were ultimately thwarted. In particular, several men attempted to steal a piece of Caterpillar construction equipment by loading it on a truck to haul it away. The equipment had an active condition-based maintenance system within it broadcasting its exact location and condition as the thieves attempted to run off with the machine. They did not get far.) This topic will be explored further in the committee’s second workshop.
procedure that is repetitively applied. Search, pattern matching, and iterative refinement can also be seen in the example, and the powerful idea of randomization as an asset in repeated fragmentation is a particularly important aspect of computational thinking.
Drawing on their own intuitive notions of computational thinking, workshop participants offered a number of additional examples of computational thinking in context. For instance, when a device (computer, cell phone, or printer) malfunctions, a reboot is often used to restore it to working condition. A person thinking computationally realizes that by turning it off and restarting it, she can reset the internal state of the device to a known and fresh state and allow the device’s internal processes to execute from that known state. Second, information technology can help to process very large volumes of information. A person thinking compu-
tationally realizes that data-intensive problems such as sequencing DNA may be amenable to solutions based on algorithms and automation. Third, information technology can often be used to help manage complexity in understanding complicated problems. A person thinking computationally realizes that computational modeling can help address complex problems across varied disciplines such as climate change, economic policy, and educational decision making.
Responding to the workshop focus on explicating the scope and nature of computational thinking (with the implied goal of being more effective in imparting to students the essentials of computational thinking), Uri Wilensky offered a caution—that “it is not necessarily the case that the best way to enter into something is to enter it in the way that an expert already understands it.” For those in attendance at the workshop, he noted that “if one is already an expert in computer science, it’s easy to forget what it’s like to enter into the field.” He did not argue that the explication effort was wasted or inappropriate, only that as a community “we should be careful about the process of bringing a lot of people, in a widespread way, into computational thinking. We should do more than present to students expert ways of thinking computationally—attention must be paid to the developmental understanding of students.” Roy Pea made a similar point when he cautioned workshop participants against focusing on the prototypes for computational thinking provided by experts in the field, because such prototypes “may lead us away from the professed goal of everyday computational thinking.”
COMPUTATIONAL THINKING AS A RANGE OF CONCEPTS, APPLICATIONS, TOOLS, AND SKILL SETS
Over the course of the workshop discussion, several participants described computational thinking as a collection of mental tools and concepts from computer science that help people to solve problems, design systems, and understand human behavior. For example, Wing drew the distinction between “metal tools” and “mental tools,” the former being the hardware/software applications that help solve problems and the latter being cognitive and intellectual skills that human beings can use to understand and solve problems more effectively. Participants argued that these concepts feature prominently in computer science but are not exclusive to the field.
Computational thinking was defined in a number of ways. These definitions fell into several categories and are described (in no particular order) below:
David Moursund, along with several other workshop participants, suggested that computational thinking was closely related to, if not the same as, the original notions of procedural thinking developed by Seymour Papert in Mindstorms.2 Procedural thinking includes developing, representing, testing, and debugging procedures, and an effective procedure is a detailed step-by-step set of instructions that can be mechanically interpreted and carried out by a specified agent, such as a computer or automated equipment.
Peter Lee offered a definition of computational thinking as the study of the mechanisms of intelligence that can yield practical applications by magnifying human intelligence. Such a definition includes but is not equivalent to artificial intelligence, which in his view generally consists of efforts to mimic human mental processes. Rather, Lee argued, computational thinking is fundamentally about expanding human mental capabilities through abstract tools that help manage complexity and allow for automation of tasks. Andrew McGettrick supported this view, but went further in saying that computational “thinking” had to involve actual capability and competency with technological artifacts in addition to thought processes. Such an extended view, he noted, would require computational thinkers to constantly immerse themselves and invest in staying technologically current.
Bill Wulf suggested that computational thinking was primarily about process. He noted that other areas of science focus on physical objects, whereas computational thinking focuses on processes and abstract phenomena that enable processes. Wulf objected to the connotations of “computational” as focusing on numbers. Speaking via videoconference, Peter Denning expressed a parallel sentiment, arguing that computer science itself is the study of information processes and that computational thinking is a subset of computer science.
Dor Abrahamson saw computational thinking as the use of computation-related symbol systems (semiotic systems) to articulate explicit knowledge and to objectify tacit knowledge, to manifest such knowledge in concrete computational forms, and to manage the products emerging from such intellectual efforts. He further argued that a semiotic approach had embedded within it a philosophy of the relationship between understanding and personal meaning and helps guide the construction of personal meaning for these symbols.
Gerald Sussman defined computational thinking as a way of formulating precise methods of doing things. Computational thinking is about rigorous analysis and procedures for accomplishing a defined task
efficiently. Sussman pointed to the importance of having precise language for methods and concepts—for this reason, Sussman argued that computational thinking has an “underlying linguistic structure.” For example, situations like “A happens before B” or “do this and then do that” are captured by the general idea of a partial order, and there are techniques for navigating partial orders and reasoning about them.
Wing and Sussman suggested that computational thinking could be seen as a bridge between science and engineering—a meta-science about studying ways or methods of thinking that are applicable across the different disciplines. In this view, computational thinking is the central element of the reasoning that takes place in transitioning from the study of physical phenomena and the application of scientific observation.
Edward Fox emphasized the notion of handling and manipulating intangible abstractions for problem-solving purposes at the core of computational thinking. Fox defined computational thinking as “what humans do as they approach the world [that is, their framing, paradigm, philosophy, or language], considering processes, manipulating digital representations (and [meta] models),” and hence all humans engage in computational thinking to some extent already in their daily lives. Brian Blake argued that computational thinking had to include representations, visualizations, modeling, or meta-modeling. Uri Wilensky pointed out the historical power of representational shifts and argued that, like other such shifts, computational representations would enable greater modeling power and wider access to scientific models. Janet Kolodner noted that computational thinking plays a role in the manipulation of software in support of problem solving. Kolodner stated that “[a piece of software can be] a tool that is being provided so that somebody can do computational thinking and can do thinking in some domain, but there’s [also] some kind of computational thinking they need to be able to do in order to manipulate that tool to be able to use it for their domain.”
Robert Constable would eschew static definitions of computational thinking—rather than a finite set of skills and thought processes, computational thinking is an open-ended and growing list of concepts that reflects the dynamic nature of technology and human learning, and that combines elements of all the descriptions of computational thinking outlined above such as “automating intellectual processes” and “studying information processes,” among others. What makes computational thinking especially relevant is that computers can execute our “computational thoughts” and that “computers have become partners and collaborators” in discovery. He further noted that the list of elements in the first paragraph of Section 1.2 is not merely a list of examples of computational thinking. Rather, it is a partial list of important intellectual concepts and elements that are part of the science of computing and of digital information.
Computational thinking is careful reasoning about the methods of doing things. It’s clearly related to, but not identical with, mathematical thinking. Both [computational thinking and mathematical thinking deeply] are involved with abstraction, and reasoning with simplified models.
COMPUTATIONAL THINKING AS LANGUAGE AND THE IMPORTANCE OF PROGRAMMING
A number of workshop participants advanced the idea that computational thinking could be better understood as a fundamental intellectual skill comparable to reading, writing, speaking, and arithmetic. Functionally, these fundamental skills are all means of describing and explaining complex problems and situations to others, and computational thinking serves the same purpose. In other words, computational thinking is comparable to other basic cognitive abilities that the average person in modern society is expected to possess.
One participant quoted Niels Bohr, who said, “Science is not to tell us about the universe, but to tell us how to talk about the universe.” Along these lines, computational thinking is another language (in addition to written and spoken language, science, and mathematics) that humans can use to talk about the universe and the complex processes within it.
Roy Pea argued that “as soon as we think about the origins of computational thinking and computational literacies, programming has been at the heartland of the definition and the abstractions that are created as step-by-step algorithmic procedures.” Ursula Wolz supported the view that computational thinking is as essential a skill as reading, writing, and other basic language arts skills, pointing out that “programming is a language for expressing ideas. You have to learn how to read and write that language in order to be able to think in that language.” Mitchel Resnick concurred, arguing that “computational thinking is more than programming, but only in the same way that language literacy is more than writing. They are both very important. Yes, it’s more, but don’t minimize programming just because it’s more.” He went on to say that programming is a particularly important form of expression, and that “programming, like writing, is a means of expression and an entry point for developing new ways of thinking.” Eric Roberts also supported the idea that programming is essential to computational thinking and pointed out “a misguided assumption—that just because programming can be badly taught or that
it can be difficult and deter people, it needs to be avoided entirely.” (Box 2.2 describes the thoughts expressed in the 1999 report Being Fluent with Information Technology on the closely related question of the role of programming in imparting FITness.)
Andrea diSessa emphasized the notion of literacy as a social construction and noted that an effort to teach computational thinking (or rather, computational literacy, in diSessa’s terms) to everyone is, in large part, a social problem. Moreover, it is the milieu of today’s society that encourages and/or demands that citizens have this literacy. Owen Astrachan argued that “computational literacy will allow civilization to think
The Role of Programming in FITness
The 1999 NRC report Being Fluent with Information Technology addressed the role of programming in achieving fluency with information technology (what that report called FITness). The report defined programming as “the construction of a specification (sequence of instructions or program) for solving a problem by an agent other than the programmer….[Programming] entails decomposing the problem into a sequence of steps and specifying them sufficiently precisely, unambiguously, and primitively that the interpreting agent, usually a computer, can effectively realize the intended solution” (p. 42).
Computer programming in a standard programming language meets this definition, of course, but programming arises in many other cases in which the agent is a human and the language is English. Giving directions to soccer players to find a particular field in a city, especially one not identifiable by numeric street/avenue coordinates, constitutes programming by this definition. A player is the agent interpreting or executing the instructions. Recipes with precise quantities of ingredients and precisely described preparation and cooking steps are programs executed by cooks. Toy manufacturers write programs, called assembly instructions, for parents to follow, and the Internal Revenue Service (IRS) writes the program that taxpayers follow for deductible IRA contributions.
Critical to the programming enterprise is specification that meets the conditions “precisely” and “primitively.”
Although programming can be as simple as giving a few commands—preheat oven to 350 degrees, combine dry ingredients, stir in eggs, press into greased loaf pan, bake for 20 minutes—most solutions require the use of conditional instructions and repetition of groups of instructions.
Conditional instructions are those that may or may not be performed, depending on the input to the program. Repeated instruction execution is a second essential programming construct, since it allows a program, for example, to process any number of data items rather than just a fixed number. In addition, FITness also requires experience with functional decomposition and functional abstraction. These are the powerful mechanisms used by programmers to solve large problems (functional decomposition) and to reuse their earlier programming efforts (functional abstraction).
Finally, the 1999 report argued that while FITness does imply a basic programming ability, that ability need not be acquired in using a conventional programming language. For example, certain spreadsheet operations and advanced HTML programming for Web pages, among others, demand an understanding of enough programming concepts that they can provide this basic programming experience. Such applications will often yield more personally relevant opportunities to learn programming than will programming in a conventional programming language.
and do things that will be new to us in the way that the modern literate society would be almost incomprehensible to preliterate cultures, but it’s a different kind of literacy than what it means to be familiar. By computational literacy, I do not mean a casual familiarity with a machine that computes.”
Gerald Sussman built the “computational thinking-as-basic-language” metaphor by citing the process of composing poetry as an exercise in computational thinking. A poet’s task or problem is to produce a mechanism that induces an emotion in the reader of the poem. “The skillful poet takes pieces that have parts of that emotional state, puts them together
in the right way—there are going to be bugs and there are going to have to be places where you make interfaces and all that sort of stuff—so as to make a larger structure that has that property.” Sussman went on to cite an essay by Edgar Allen Poe that described the process of composing poetry as an algorithm.
Alan Kay was less enthusiastic about the “computational thinking-as-language” metaphor. Although acknowledging the utility of computational thinking as a language for describing certain aspects of the universe, Kay noted that all human beings have an innate capacity for verbal language, but that the same cannot be said for written language, science, and deductive mathematics, because these are not found in every culture or society. This point suggests that whatever computational-thinking-as-a-language might be, human beings will not learn computational thinking in the same way that they learn to speak. On the other hand, he also noted that a powerful aspect of computational thinking entails the ability to create a language well adapted to a personally relevant purpose—and indeed that this ability could be taught to students.
Edward Fox suggested that computational thinking does have a long historical tail. “Computational thinking is innate in the human species,” he said, and “through telling stories our ancestors modeled and represented reality and they passed that on to other people and they enriched those models to carry out exploring, discovering, and sustaining life.” Today, exploration of and discovery in digital information are central activities of human life. Computers enable modern discovery and allow humans to access and organize information in a way that has not been done before. Despite its novelty, accessing digital information is, according to Fox “still a part of this modeling and representing, something that we do uniquely and have newer ways to explain and enrich.”
COMPUTATIONAL THINKING AS THE AUTOMATION OF ABSTRACTIONS
A number of workshop participants supported the claim that computational thinking focuses on the process of creating and managing abstractions, and defining relationships between layers of abstraction. Robert Constable pointed out that although physics and mathematics are also centrally concerned with abstraction, what is different in computational thinking is that the layers of abstraction are tightly connected in ways that in the natural sciences they cannot yet be connected.
In this view, computational thinking is a tool for explaining and representing complexity through automation. Although mathematics and physics are also centrally concerned with using abstraction to manage and control complexity, computational methods add another dimension
to controlling complexity—that of automation. Peter Lee argued that computational thinking is about “magnifying people’s intelligence through automation and problem solving, as well as managing complexity.” Others pointed to the role of modeling and simulation in enabling automation of the management of complexity.
To complement this view, Andy diSessa argued that abstractions must be paired with grounding if people are to understand the significance of those abstractions. In diSessa’s words, “Abstraction has to connect with their concerns, whether they are menial or whether they are grand. It has to be grounded in people’s beliefs and feelings some way or other.” Owen Astrachan echoed this point, saying that “without the grounded examples, we’ll be talking too abstractly, which might work in a room full of abstract thinkers, but it’s not going to work in rooms full of less abstract thinkers because they need to see what they are really going to do.” Ken Kahn made a related argument that computational thinking provides a concretization—the creation of something concrete and tangible—of subjects that are typically dominated by abstract concepts. Kahn felt that an example of such concretization is computer games—“They are virtual, of course, but they feel very concrete. The important idea is that there is a one-to-one mapping from these concrete things to computational abstractions that are much more difficult for most people to grasp.” Uri Wilensky concurred and described how students interacting with models or participatory simulations of disease spread developed with NetLogo learn to understand logistic growth of infection as an emergent pattern that results from the concrete actions of individuals.
COMPUTATIONAL THINKING AS A COGNITIVE TOOL
David Moursund saw computational thinking as how to think about tools, a view inspired by Donald Norman and David Perkins. In 1988, Norman wrote The Design of Everyday Things,3 which talks about “the design of everyday objects and affordances—not just physical capabilities of the actor, but also their goals, plans, and values, and so on.” An example of affordances created through technology innovation is mass communication through the creation of the printing press, radio, television, and so on. Information technology and the computer are a set of new tools with affordances of their own, and Moursund noted that realization of affordances depends on the education, training, and experience of the user as well as the design of the tool. Some tools, such as a word processor, require more formal training and skills in order to access the affordances they offer. Others, through their very design or through
imitation, are simpler to manipulate and may not require formal training; examples might include telephones or video games.
In the early 1990s, David Perkins wrote about the concept of “Person Plus.”4 In the Person Plus model, three dimensions feed in to augmenting team problem solving (Figure 2.1). Moursund identified these three dimensions as “tools that expand or extend mental capabilities,” such as reading comprehension or mathematical skills; “tools that extend physical capabilities,” such as a car, a telescope, or a rake; and finally, “education and training” that allow one to effectively utilize tools. Moursund’s final component in the model is team problem solving. He stated, “When I talk about problem solving, problem solving is always a team activity. The team might have a person on it, but the team has … whatever that person has learned, the culture they grew up in, the formal/informal education, and so on. So problem solving is always a team-type activity.” This activity usually includes aid from physical and mental tools as well as education. Moursund believes that “computational thinking and computers fit into both categories [of tools].” Both formal and informal education can help people utilize these tools more effectively.
Moursund argued that computational thinking fuses the concepts of affordance and person with respect to information technology and computers. He spoke about the trend of increasing complexity and performance power in each generation of computers and how this trend offers new affordances and more sophisticated problem solving: “You can have a stick and you can weed your first crops with a stick. If you get a hoe, it’s a much better tool. But then, with better tools, we move beyond the low-level augmentation or amplification, as it’s usually called. If you get good enough tools, then you can go shooting off to the Moon and other places.”
Moursund further noted, “What I see in the computer field is that there are oodles of tools where it doesn’t take any formal education to learn how to use them…. So when we talk about computational thinking, we have oodles of tools which are just part of our everyday society and life, and which people can learn to use at a level which is personally satisfying, extends their capabilities and so on, and you don’t have to go to school to learn them. That seems to me like a pretty important idea.” He went on to say that in many aspects of computing and computational thinking, many people are learning on their own and learning from each other and focusing on “learning things that they want to do and need to do versus the deeper level of learning we’re looking for….”
Roy Pea concurred—“If you actually look at what people do when they’re doing computational thinking, as an ethnographer, you see them
immersed with a whole set of tools, they’re constantly thinking about the things that have particular properties, affordances—they’re working with colleagues in a particular way. They’re getting feedback from a whole host of resources there.”
If you give everybody a calculator, math doesn’t go away. Thinking and doing are needed to represent and help solve problems. If you get better tools, you can do better at it. What the computer is doing is giving you the better tools, dealing with harder problems.
COMPUTATIONAL THINKING IN CONTEXTS WITHOUT PROGRAMMING A COMPUTER
Marcia Linn and several other participants discussed computational thinking as a way of approaching complex problems that permeate everyday mental activities made necessary because of the ubiquity and increasing omnipresence of computational tools throughout modern life. This way of thinking involves using methods from computer science such as debugging, search algorithms, and test cases to address everyday problems involving technological resources. Put differently, the affordances offered by modern information technology require reasoning skills such as debugging, test cases, and logical skills to solve everyday problems.
Linn pointed out that even very young children appreciate the Internet and have a sense of search, and they often take advantage of electronic devices such as cell phones and computers to access information they want. When 2-year-old Ben wanted to explain to his friend how a trapeze works, he demanded that his mother show his friend a trapeze on her cell phone. He liked the first example but wanted her to try some of the other search results. After a few minutes the battery of the phone died. Ben told his mother to turn the phone back on. He was frustrated when she tried to explain that it would take time to charge the battery. Ben already understands the power of the Internet and the nature of keyword search. Like many of us, he is confused about the limits of electrical power.
At the other end of the age spectrum, Linn used the example of retirees taking advantage of social networking opportunities to plan trips. Jack reported that he upgraded his computer to use sites like Trip Advisor to find hotels. He gained the ability to select sites that primarily serve leisure travelers rather than business travelers. He has begun to analyze the sites that support advertising—and worries that they promote the advertised products. He prefers sites where the qualifications of the reviewers are available. He has developed a theory about who posts on these sites and has started to realize that many people really do not articulate their criteria. Jack is using his debugging skills.
Joshua Danish presented an example of young students engaging in computational thinking concepts without using computers in a project on honeybees—specifically to understand and represent the process honey-bees use to collect nectar for honey. This process involves a beehive sending out scouts to locate flowers with nectar; these scouts then return to the hive and do a “dance” to communicate the location of the nectar to the other bees. Other bees then return to the specified location to harvest the nectar.
Danish said, “Here [in Figure 2.2] is a student’s representation in four panels of that process, and it’s actually quite nice. Now, there are limitations to that. But we’re starting to see some of the skills and the resources—and this is a 7-year-old’s drawing—and when they’re actually
starting to be quite capable of reducing and extracting that process and describing it for us.”
In the first phase of activity, students engaged in an individualized “creation of representations”—that is, each student drew his or her own detailed picture of a single bee (subject to certain minimum requirements, such as having three body sections and including the proper names of key parts of the bee) and also a series of four panels (Figure 2.2) depicting the process bees use to find nectar, collect nectar, and then communicate the location of the nectar to the hive.
Next, the children were asked to engage in “participatory modeling” of the bees collecting nectar, an idea first introduced as such by Uri Wilensky and Mitchel Resnick.5 Children produced a skit in which they represented flowers and bees and proceeded to demonstrate how a bee goes about collecting nectar. Danish argued that this activity allows students “to leverage their ability and make sense of talk and gesture and body position as a way of refining their model and understanding the parts of it that they may not have formal language for yet.”
For example, the students were able to refine their models through repetition, “debug” their models through collaboration, and explore sequencing. Danish described a boy representing a bee that had just checked for nectar—his peers did not actually see him using a proboscis,
and so “they were challenging his model, saying, we don’t see the part of the bee that’s important for that part of the process.” The teacher is also able to introduce the concepts of sequencing and algorithms by engaging in a dialog with the student:
T: All right, well, there isn’t any nectar at that flower. So if you were a bee, would you stay at the flower?
T: What would you do?
S: I would go back, and not do a dance because I don’t know where to find nectar.
According to Danish, this exchange illustrates how the student is engaging “in a context where he’s able to talk about the sort of if-then choices of the algorithm that the bees follow as they go back collecting nectar. And that can then be phrased in a way that’s incredibly relevant to him.”
In the third phase, students engaged in participatory simulation in which they had to instruct other children to carry out the search for nectar as the bees would. As they tried to act the instructions provided by the scout bees, the children engaged in a real-time debugging process by updating their instructions as they went along. This phase forces the students into “thinking about the implications of their modeling choices. As these students are running around and not quite finding the nectar, it’s easy for this boy to say, ‘It’s by the red rake.’ So there’s some online monitoring of whether or not his instructions or his program were successful. But then there’s also some retroactive consideration, some nice reflection on whether that model did the job. So the student’s then able to say, ‘I should have said by the handle of the rake.’”
Only in the fourth phase did students encounter any actual computer technology—with the help of an instructor, students modeled the process and predicted outcomes using a program called BeeSign, developed to provide a simulation environment for students to model bee searches.
A second example of computational thinking in a non-IT context was provided by Ursula Wolz, who reported on an effort to teach computational thinking skills to middle school students through the journalistic use of interactive media. She described the project as focusing on a “non-didactic collaborative model of problem solving.” Journalism provides an attractive context for students who do not consider themselves technically inclined.
Wolz argued that journalism mirrors many of the processes involved in working with computers, especially programming. “In journalism, one must pitch a story, research it, interview, collect data, shoot video,
write, edit, send it to the editor, re-write, add sidebars, resubmit, fact check, debug the story, and loop until the editor signs off on it. If one assumes the computer acts as an editor, then one can take note of a very familiar series of activities involved in computational thinking.” The students had news teams, supervised by a teacher and guidance counselors, that worked to produce an online magazine. The students researched, interviewed, and wrote stories, and they created video and animation in Scratch. They also successfully used the computing environment used to support the course to collaborate, write, edit, and publish multimedia stories as part of the journalism process.
A third example of computational thinking without computers was provided by Tim Bell, who described the Computer Science Unplugged Project.6 His talk included a couple of illustrations:
User interfaces. Students examine the interface provided in a digital watch. In many digital watches, a button is included that turns the watch face from a clock to a stop watch, and another button that starts and stops the stop watch. According to Bell, “Suddenly the kids realize that this is a very simple interface, which they probably didn’t even think was an interface, on their wrist.” This realization empowers them to recognize interfaces in other objects and apply learned concepts when interacting with those objects. User interfaces are an important element of computational thinking because they create a well-defined decoupling between the parts of the system that interact directly with users and the rest of the system. User interfaces thus afford a structured and systematized method of entering input into a program that in turn affects its behavior. User interfaces also afford users such methods for seeing program outputs.
Routing. Each student wears a T-shirt of a different color (Figure 2.3). Corresponding to each color are two pieces of fruit, and every student except one starts with two pieces of fruit. One student starts with only one piece of fruit of the appropriate color. The goal is to have both pieces of fruit end up in the hands of the child with the corresponding color shirt; that is, “the oranges go to the girl with the orange T-shirt and the green apples go to the girl with the green T-shirt,” and so on. The constraint on any method of passing fruit is that each student can only pass something to someone who has an empty hand, and he or she can only pass something to a neighbor. This puzzle is similar to the kinds of problems that a computer scientist might face, and students can experiment with different routing topologies. Routing is an important element
of computational thinking because it encapsulates the idea of how information can be passed in different paths through intermediate nodes to a specified final destination.
A third example of computational thinking without the use of technology per se was provided in a personal anecdote from Owen Astrachan. He described different solutions to a word puzzle in which the problem solver must change a given five-letter word (e.g., “white”) to another five-letter word (e.g., “house”) by making only a single letter change at each step, subject to the constraint that each intermediate word must also be a real dictionary word. Astrachan’s solution was based on making a graph and doing a breadth-first search through that graph. His solution required 16 steps. His brother, an English major, solved the problem in 15 steps, apparently without using computational thinking. Astrachan then asked why, and saw that his brother’s solution was based on the fact that his brother’s dictionary had more words in it—“sough” was in his brother’s dictionary but not in his. With the addition of that word to Astrachan’s solution, he was able to solve the problem in 14 steps. Astrachan said that this story illustrates computational thinking in action and computational thinking in context, and helps to demonstrate “what’s going on with people around us who don’t think computationally.”
Allan Collins argued that one key feature of computational thinking is representational competence, which he described as the effective application of computational means of representation of knowledge. The illustration Collins offered was a low-tech experiment in developing representational competence in fourth graders who were asked to “find representations for the heights” of various fast-growing plants. The children were broken up into several groups, and each group of kids would try to come up with its own representations. While there were a number of ideas considered, the class eventually decided to “use a bar graph with small ranges of plants … like from 10 inches to 12 inches, and they would have a bar for each two inches.”7
And then in terms of the survey results that we got, the majority … said the most important thing they learned was programming and video editing. And half said that their best work was in programming. And unlike some of the kids that Alan [Kay] and Roy [Pea] were talking about, these are working-class children who would not necessarily have access to this level of computing unless it was through a program like this.
As computation came in, it started producing all sorts of new forms of representation, both structural forms and process forms, particularly the dynamic process forms … things like production rules and frames and semantic networks and the constraint-satisfaction systems were all new ways to think about representing knowledge…. And so my claim is that one of the things that we should be concerned about is how to get this kind of representational competence. We need to start thinking more seriously about how we can convey some of that power.
THE ROLE OF COMPUTERS AND TECHNOLOGY
An obvious question arises in the consideration of computational thinking. How and to what extent do computers per se relate to computational thinking?
A first point is that the term ”computer” can refer to a mechanical or an electronic computer, or to a human computer (indeed, the first connotation of the word ”computer” was that of a human who performed mathematical computations). So a computer is an essential aspect of computational thinking to the extent that it is an agent that can deterministically interpret a set of instructions in an unambiguous manner.
A more common interpretation of the question relates to whether or not a competent computational thinker is necessarily facile with the use of modern information technology to solve problems and to do other useful things. Workshop participants observed that information technology has advanced dramatically throughout its history, and rapid change is likely to characterize future information technology. Moreover, computers and computation will become increasingly important to society and across a number of disciplines. As one participant put it, “I think we are here today to think about what everybody should know” in the face of such rapid change.
Many participants argued that the ability to develop facility with new technologies is a part of computational thinking. Computational thinking in this view involves finding the right technology for a problem and applying the technology to resolve the problem. This might require learning how to use the appropriate technology, debugging the solution, and communicating the outcome. For example, to represent a complex phenomenon such as an ecosystem, the moves in a chess game, or the trajectory of a baseball, the computational thinker might explore alternative technologies, select a candidate, and test its effectiveness. This skill is essential in undergraduate programs, useful in everyday life, and growing in importance in precollege courses. In this view computers and other computational devices enable computational thinking.
One participant argued that what makes computational thinking especially relevant is that computers, whether mechanical or human, are the agents for executing “computational thoughts,” and computers have become partners and collaborators in discovery. Further, unlike household appliances or an automobile, computers are relevant to a vast number of different applications, such as searching for information, developing a budget, tracking individuals, composing music, and so on. While not disagreeing with this sentiment, others at the workshop argued strongly that because computers are not restricted to mechanical computers but instead can refer to human agents, computational thinking becomes relevant to individuals outside the context of mechanical computers—and thus to a much larger cross section of society.
A COLLABORATIVE DIMENSION TO COMPUTATIONAL THINKING
Modern information technology is at least as much about dispersed, real-time communication as it is about automation. Edward Fox noted that “what we see happening a lot today, especially with the Web and multimedia and other things, is that the [computational thinking] reflection takes place with the help of other people, too. We can share videos and we see what other people did and we comment on those. We have Web 2.0 and so forth, where these become social processes, and debugging becomes part of our society, as well as of solving our problems.”
Building on this notion, a number of participants suggested that computational thinking could be regarded as a group phenomenon as well as an individual one. That is, groups, too, can engage in computational thinking to develop representations, debug processes, and so on, resulting in a collective process of discovery that is richer than that of any single individual. Ursula Wolz argued this point when she said that “one of the things that annoys me is when we talk about some of the great discoveries that happened by an individual—they never happened by an individual. There is a huge body of literature emerging, for example, in terms of what Leonardo did and who was around, and the same thing about Newton…. We have to keep reminding ourselves that it isn’t about ownership. It’s about the community and the culture that’s around you that allows you to have the ideas.”
Allan Collins related collaboration to the notion of computational thinking as a fundamental skill analogous to reading and writing literacy. He pointed out that developing reading and writing literacy is not simply a matter of technical skills, but also arguably entails a social community. In Collins’ words, “We learn from the company we keep…. People will learn to read and write if the people they admire and care about, the communities they belong to, are readers and writers.” Thus, he argued, achieving a comparable literacy with respect to computational thinking will require the fostering and development of communities that value computational thinking—some of which exist today, though not in large numbers and not widely accessible.
Kevin Ashley introduced an example of collaborative computational thinking from the legal field. Over time, the legal community performs testing and adaptation of laws in response to changing social contexts. He pointed out, “Often the hypotheticals are informed by changes in societal values over a period of time; this is dynamic. The old law has to be reevaluated, reinterpreted in the context of the changing social values. The hypotheticals—the specific examples that they try out to see how that would be dealt with under the proposed rule and whether that is a
good outcome or not in light of those values—are the dynamic engine for adapting the rules and interpretations to the new circumstances.”
In some sense, I think the message that Roy [Pea] is delivering, that I, [and] Mitchel [Resnick] are delivering, is that we need to start thinking about how to create communities of people who care about computational thinking and who are doing it.
WHAT COMPUTATIONAL THINKING IS NOT
Several participants suggested that it might be easier to articulate what computational thinking is not. For example, Robert Constable argued that computer literacy—traditionally seen as the ability to use specific programs or features of given computer systems such as Word or Excel—does not demonstrate the ability to engage in computational thinking. (By contrast, he noted that one can know a great deal about computational thinking and computing concepts without knowing much about computers beyond how to get on the Internet and use an Internet browser.)
Along with a number of other workshop participants, Gerald Sussman argued that computational thinking was also not equivalent to computer science. Although computational thinking and computer science share some elements, he said that “computational thinking is a certain part of computer science. Mathematicians talk about mathematical thinking. Statisticians talk about statistical thinking. I think that computer scientists should talk about computational thinking.” To illustrate, he said that “scientific thinking is about apples and oranges and how they may be different or the same. Mathematical thinking is about spheres and where they have areas and volume and the fact that they may involve a particularly high number of dimensions. Computational thinking is about how a group of people can cut and share an apple so that each person feels he or she got a fair share of the apple.”
I know some people have been saying things like, computational thinking is a new way to define computer science. Computational thinking is a part of computer science, but is not the whole story.
Great Principles of Computing
In 2003, Peter Denning initiated the “Great Principles of Computing” project, whose purpose is to express the activities of computer science in a framework that is similar to that which guides scientists in other domains in expressing what it is that they do. During the workshop, Denning said that he and his colleagues are very interested in “the fundamentals of the field,” the things that are “timeless and…also illustrate the depth and richness of the discourse that we have built up in computing over the years.” Denning’s Great Principles of Computing break down into seven categories: computation, communication, coordination, recollection, automation, evaluation, and design.
Denning’s framework portrays computer science as a combination of engineering, mathematics, and science. During the workshop, Denning argued that a legitimate science is based on “knowledge, experimental methods, reproducibility, surprising predictions complemented by performing art, and studies of natural objects,” and hence that computer science should be included under this rubric. He acknowledged that “there has always been controversy about whether computer science studies natural objects,” but expressed the belief that “other fields are now accepting that information processes are part of the basic aspects of nature.” He further suggested that this acceptance stems from evolving the definition of computer science away from a strict focus on computing machines—“We are coming to see computation as the principle and the computer as the tool. Instead of the computer being at the center of what we study, computation is at the center of what we study. That shift in perspective allows us to see computation in nature.”
Other participants felt that computational thinking was the outcome of a natural evolution in our understanding of computer science. For example, Peter Denning suggested that computational thinking is not the same as previous conceptions of computer science, but rather another instantiation of the discipline (Box 2.3).
Larry Snyder noted that computational thinking was not the same as fluency with information technology (FIT)8 (Appendix C), although they do share many commonalities (Box 2.4). For example, many of the features often ascribed to computational thinking are also part of a fluency curriculum that include both concepts and capabilities. These concepts include algorithmic thinking, managing complexity, debugging, thinking technologically, universality, and so on. Indeed, he suggested that the
NRC, 1999, Being Fluent with Information Technology, Washington, D.C.: The National Academies Press. Available at http://www.nap.edu/catalog.php?record_id=6482. Accessed December 28, 2009.
On the Relationship Between Computational Thinking and Fluency with Information Technology
A person who is highly capable of computational thinking—a computational thinker—is one who has adopted the thinking habits and reasoning methods of computer scientists. A person who is fluent with information technology is one who has adopted a specific menu of facts, concepts, and thinking habits of computer scientists. In this sense, computational thinking is broader than fluency.
On the other hand, because the fluency menu includes algorithmic thinking and a variety of intellectual capabilities such as sustained logical reasoning and debugging, there is tremendous overlap between computational thinking and fluency. When discussing specific topics (as opposed to levels of understanding of a topic), there are strong similarities between the intellectual approaches embedded in each. Both emphasize abstraction, algorithmic thinking, problem solving, logical reasoning, levels of abstraction, universality, debugging, technological point of view, representations, and so on. Such strong similarities are why the knowledge needed and acquirable as “basic computational thinking” would likely approximate what is known by a person fluent with information technology.
The primary difference between computational thinking and fluency is in focus. In one view of this difference, the primary emphasis of pedagogical efforts in fluency is quite clearly on the general population, and there is relatively little emphasis on its applicability to advanced topics of study. By contrast, computational thinking is believed to be valuable across the board, both for the everyday citizen and for the advanced professional. Indeed, many of the examples of computational thinking that advocates invoke are derived from the application of computational thinking in service of these advanced professionals in a variety of problem domains. Another view of the difference between computational thinking and fluency sees computational thinking as emphasizing conceptual understanding and fluency as emphasizing applications across a broad range of topics and problem domains.
Another difference is that whereas fluency prescribes a variety of skills that enable a citizen to use certain computer-enabled devices daily, computational thinking is not concerned at all with such skills—such skills are assumed. Fluency does include a set of 10 concepts about computing and 10 intellectual capabilities that include many of the habits of mind often captured in descriptions of computational thinking, but an important purpose of including these concepts and capabilities is to support lifelong learning about computing.
Computational thinking and fluency should not be placed in opposition to each other, though they are definitely not the same thing. Computational thinking is a grand vision in which people acquire the thinking habits of computer scientists commensurate with their levels of education; fluency, though not originally formulated this way, can be seen as a practical implementation of computational thinking for all citizens. This difference reflects the differing origins of the studies involved—the Being Fluent report (National Research Council, Being Fluent with Information Technology, National Academy Press, Washington D.C., 1999) and its characterization of fluency with information technology emerged from responding to a request for recommendations on what the public should know about information technology, while the present report on computational thinking emerged from a vision of how beneficial wider use of thinking like a computer scientist would be.
primary difference was the fact that FITness includes a skills component, which is designed to enable individuals to use common current applications. By contrast, computational thinking tends to put less emphasis on specific technical skills in favor of broad problem-solving abilities.
Snyder also called attention to a philosophical evolution regarding computing-related teaching. The FITness report was published in 1999,9 when it was controversial to teach conceptual material regarding information technology to nonmajors. Snyder argued that today, such teaching is routine, at least in 4-year university programs. He thus proposed the following sketch for this philosophical evolution:
The general public is uninformed about and indifferent to information technology.
The general public recognizes the need for computer literacy—how to use a computer—a necessary skill as computers begin to penetrate into everyday life.
The general public begins to see the limitations of skills-only training, which leads to a desire for FITness—fluency with information technology—that exposes citizens to the essential concepts and capabilities of information technology. The skills of FITness are gradually de-emphasized as the citizenry learns to pick up without formal instruction the skills needed to use computer applications.
The general public is increasingly exposed to and literate with the skills of how to use information technology, thus eliminating the need for much formal instruction in skills. Computational thinking, which to first order comprises FITness without the skills component, becomes the emerging focus of formal education. Computational thinking then expands the array of concepts and capabilities beyond those included in the original 1999 formulation of FITness.
Others saw computational thinking as a way of thinking that is qualitatively distinct from fluency and emerging across a broad array of disciplines. The ubiquitous nature of computational tools impacts all aspects of modern life and requires people to adopt new modes of thinking to use these tools effectively. These modes of thinking are emerging not just in computer science but in every field.
NRC, 1999, Being Fluent with Information Technology, Washington, D.C.: The National Academies Press. Available at http://www.nap.edu/catalog.php?record_id=6482. Accessed December 28, 2009.
I would like to propose that this is actually a three-dimensional problem. We have aspects of computational thinking or computing, we have the other disciplines that we are talking about connecting with, and we have pedagogy, the different levels and so forth. We are trying to populate a three-dimensional matrix with the best situations in each of these different settings and figure out which ones are the ones that work.