“programming-first” approach, then, it is necessary to consider more carefully the implications of aligning CT with the three Rs.
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 be-
gin for all students only after they have had substantial practice acting and thinking as computational agents.
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
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 language—a computational thinking language (CTL)—that captures core
b For example, the CS Unplugged program; http://csunplugged.org.
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
24 CommunICatIons of the aCm | feBRuaRY 2009 | vol. 52 | No. 2
References:
Archives