Since the dot-com downturn, the conundrum we face in computer science is how such a useful discipline can have such difficulties attracting students, despite continuing growth of the IT industry. We attribute the blame for student disinterest to career instability, but similar and even stronger arguments have long existed for other disciplines with little impact on enrollment. Recent data from the National Center for Education Statisticsa indicates the computer and information sciences conferred fewer degrees than either the visual and performing arts or the social sciences and historycertainly not majors that are typically associated with iron-clad career guarantees. Not surprisingly, CS enrollment also lags far behind that of other practically perceived disciplines such as education or business.
Of course, the problem is deeper than just the issue of career trends. Through the years, despite our best efforts to articulate that CS is more than "just programming," the misconception that the two are equivalent remains. This equation continues to project a narrow and misleading image of our discipline3and directly impacts the character and number of students we attract.
In an effort to broaden awareness of and participation in the computing sciences, Jeannette Wing's recent call for teaching computational thinking (CT)6 as a skill on par with reading, writing, and arithmetic (the so-called three Rs) places the core of CS, we believe correctly, in the category of basic knowledge. Just as proficiency in basic language arts helps us to effectively communicate and proficiency in basic math helps us to successfully quantitate, proficiency in computational thinking helps us systematically and efficiently process information and tasks.
But while teaching everyone to think computationally is a noble goal, there are pedagogical challenges. It is not enough to simply repackage CS1, or CS0, and teach it at an earlier stage, as many K-12 programs already do. Perhaps the most confounding issue is the role of programming, and whether we can separate it from teaching basic computer science. How much programming, if any, should be required for CT proficiency?
We believe that to successfully broaden awareness of the depth, breadth, and beauty of computer science, and thereby increase participation in our discipline, efforts must be made to lay the foundations of CT long before students experience their first programming language. In order to pursue alternatives to the traditional "programming-first" approach, then, it is necessary to consider more carefully the implications of aligning CT with the three Rs.
Programming: Describing Computational Processes
While being educated implies proficiency in basic language and quantitative skills, it does not imply knowledge of or the ability to carry out scholarly English and mathematics. Indeed, for those students interested in pursuing higher-level English and mathematics, there exist milestone courses to help make the critical intellectual leaps necessary to shift from the development of useful skills to the academic study of these subjects. Analogously, we believe the same dichotomy exists between CT, as a skill, and computer science as an academic subject. Our thesis is this: Programming is to CS what proof construction is to mathematics and what literary analysis is to English.
The shift to the study of CS as an academic subject cannot, of course, be achieved without intense immersion in crafting programs. In this respect, the traditional programming-first curriculum is appropriate. Knowledge of programming should not, however, be necessary to proclaim literacy in basic computer science. Just as math students come to proofs after 12 or more years of experience with basic math, and English students come to literary analysis after an even longer period of reading and writing, programming should begin for all students only after they have had substantial practice acting and thinking as computational agents.
We need to start teaching computational thinking early and often. But what does this entail in the absence of programming?
Missing in K-12 curricula are the mathematics equivalents of algebra and calculus, and the English equivalents of literature and composition. Missing also is the spectrum of service courses college mathematics and English departments offer to non-majors that enhance their reading, writing, and quantitative skills. Currently, the setting in which students are introduced to CT is also where they first learn programming. This pedagogical approach is akin to teaching basic arithmetic alongside proof construction, and elementary reading and writing with linguistics and discourse analysis. It can be done, but perhaps not optimally. Writing descriptions in unfamiliar formal languages cannot be easy when one does not yet have a solid grasp of the concepts and processes the descriptions are designed to capture. A corollary to our thesis, then, is the following: Substantial preparation in computational thinking is required before students enroll in programming courses.
The redesign and implementation of K-12 curricula to provide adequate exposure to and practice in CT should, of course, be coupled with ongoing efforts to rethink the ways in which we transition students into programming and higher-level CS.5
Learning to Understand Computational Processes
We need to start teaching computational thinking early and often. But what does this entail in the absence of programming? The emphasis should be on the development of human computing skills,b not particular programming language or pseudocode manifestations of algorithms. Gaining familiarity with algorithmic notions such as basic flow of control is important. Also central is the development of skills for abstracting and representing information, and for evaluating properties of processes.
As a glue for connecting these concepts into an identifiable discipline, a languagea computational thinking language (CTL)that captures core CT concepts must permeate the pedagogy. Again, this is not a programming language, but rather vocabularies and symbols that can be used to annotate and describe computation, abstraction, and information, and provide notation around which semantic understanding of computational processes can be hung (see, for example 2).
In grade school mathematics, we already speak of representing word problems, and applying algebraic rules to derive simpler forms. But at a more advanced level, we can augment the vocabulary with the search space of possible algebraic simplifications, induced by the initial state, the final state, and the set of applicable operations. We may explore the process of finding the derivation through a blind or a heuristic search.
Of course, concepts that are presented in association with the CTL must be grade-appropriate. At Grade 3, when students first encounter multistep calculations and small combinatorial problems, the phrase "search space" may simply mean a set of prespecified choices in a multiple-choice exercise, and a heuristic can be explained as a pruning strategy for eliminating those choices that are inconsistent with smaller or related problems to which students know the answer. A nice example is when, as a way of developing reading comprehension skills, students are given the task of putting a set of simple sentences into chronological order. The heuristic for pruning wrong answers is simply to first order a subset of the given sentences and eliminating inconsistent choices. Later in middle school, when permutation is first introduced, the search space concept may be revisited and broadened to include those sentence orderings that result from applying the permute operation to some initial sentence ordering.
As students encounter more complex calculations in middle school, richer CT notation should be introduced as part of the CTL. In particular, basic tuple notation for state representation, together with a simple rewrite system to annotate state changes can assist in clarifying the computational aspects of many problem solving algorithms. As an example, consider the standard notion of the greatest common divisor (
gcd) of two integers a and b, a useful tool that students encounter during the study of fractions. Euclid's classic algorithm, applied to computing
gcd(56,21), for example, proceeds as follows: (56,21)(35,21)(14,21) (14,7)(7,7). Here, "" is an abstraction of the function a,b.if a<b,(a,b-a); else (a-b,b). We can compare the efficiency of Euclid's algorithm to an exhaustive linear search. This comparison further provides a chance to discuss representation and decision. For linear search, a single number captures the complete state since each subsequent state is a unary function of the current state. For Euclid's algorithm, a pair representation is necessary as each subsequent state is conditioned on both of the current values.
Again, note that computers are not explicitly part of this discussion. During the introduction and development of basic CT, students are the computing agents that perform the process execution. Software tools can be used to assist in this, just as they are used in teaching basic language and math skills. But, to reemphasize, the focus here is on developing the computing skills of the students, as computers.c
Through practice and repeated encounters, students will become accustomed to thinking and communicating in the CTL. For students that follow up with more advanced CS courses, starting with programming, the challenge will no longer be in learning to think computationally, but in learning the nuances of new languages, how to formally describe computations in these languages, and in subsequent courses on how such descriptions are executed on a von Neumann machine. For students that do not pursue CS further, their background in computational thinking will be of substantial benefit in their professional careers and in everyday life.
On the issue of enrollment, we suspect that most students major in mathematics, English, and the humanities not for the abundance of career opportunities in these fields, but more for intellectual interests, born out of gradual and sustained exposure. We conjecture that students with similar development in CT will also be more likely to choose CS based on intellectual motivations, and, furthermore, that they will be better prepared for programming and the major curriculum.1 Exposure to basic computer science will raise awareness in students of what CS might be as a field of inquiry, leading to a broader participation of a wider variety of students in our discipline.
Exposure to basic computer science will raise awareness in students of what CS might be as a field of inquiry, leading to a broader participation of a wider variety of students in our discipline.
To truly integrate computational thinking into current K-12 curricula undoubtedly presents significant challenges. It will necessarily be a gradual and evolutionary process, and requires coordination among many constituents of the wider education community. We consider definitive efforts toward achieving broader CT literacy as some of the most exciting, challenging, and necessary next steps in the maturation of the computer science discipline.
c. For a fascinating account of the history of human computing, see4.
©2009 ACM 0001-0782/09/0200 $5.00
Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. To copy otherwise, to republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee.
The Digital Library is published by the Association for Computing Machinery. Copyright © 2009 ACM, Inc.