“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 be-
We need to
start teaching
computational
thinking early
and often.
But what does
this entail in
the absence of
programming?
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
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
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