Computational thinking, a K–12 education movement begun in 2006, has defined a curriculum to teach basic computing in pre-college schools. It has been dramatically more successful than prior computer literacy or fluency movements at convincing K–12 school teachers and boards to adopt a computer curriculum. Learning problem-solving with algorithms is seen widely as valuable for students. Hundreds of CT initiatives have blossomed around the world.
By 2010, the movement settled on a definition of CT that can be paraphrased as "Designing computations that get computers to do jobs for us." The recommended K–12 curricula were narrow in scope, designed to teach newcomers the basics of algorithms, programming, and using computers. One oft-cited overview lists nine fundamental concepts as the core of CT2:
- Abstraction;
- Data collection;
- Data analysis;
- Data representation;
- Algorithms and procedures;
- Problem decomposition;
- Automation;
- Parallelization; and
- Simulation.
Abstraction has been held up as the first and foremost principle. In their 2021 Turing Lecture, Alfred Aho and Jeffrey Ullman emphasized the importance of abstraction in the design of programming languages and compilers.1
Shortcomings of CT for Beginners
The CT story outlined above is excellent for getting young students started with programming and the powerful principles of algorithmic thinking. Unfortunately, the success of this story has also become a liability because it projects a view of computer science from which many ideas familiar to computing professionals are missing.
We call the basic story for K–12 "CT for beginners." We introduced the advanced story, "CT for professionals," for all the thinking and design practices in daily use by professional practitioners.4 It is time to stop conflating the whole story of computational thinking into one for beginners and to expand to the whole spectrum from beginner to professional.
There are several reasons that this expansion would be healthy. First, one of the original goals of the movement was to describe how computer scientists think. Basic CT is relatively easy to learn but it reveals little of the advanced thinking of computing professionals. Most of the basic practices listed earlier are not unique to computing—they have appeared in mathematics, science, and engineering for centuries.5 Many teaching practices recommended for K–12 make heavy use of generic logic puzzles and games teasers, which intrigue children but do not illustrate the unique ways of thought and practice that make computing attractive to other disciplines. There is no good reason to use generic logic puzzles, when there are numerous examples of puzzles and games that illustrate unique features of computing, as has been done in the CS Unplugged project.3 The current CT story is not meeting one of the original goals.
Second, Basic CT concentrates heavily on how to use the listed concepts to write good programs ("coding"). This is good: programming is central to CT. But such a heavy focus on coding reinforces a common public misconception about computing, often called "CS = programming." We fought long and hard in the 1990s to eliminate this perception. It is disconcerting to see it reviving as an unwitting consequence of the narrow view of computing built into Basic CT.
Third, Basic CT is mostly silent about the thinking and design practices for the real world of large programs, systems, networks, and user communities. It does not describe how computing professionals meet concerns, answer threats, approach problems, rise to opportunities, or communicate practices. It paints for the public—as well as school teachers, parents, and policymakers—a narrow, technical, non-humanist image of computing as a profession.
Basic CT is relatively easy to learn but it reveals little of the advanced thinking of computing professionals.
Fourth, much modern computing relies on simulation and modeling. Simulation builds information models of real-world processes, uses the computer to study their behavior, and then makes inferences about the real processes. Simulation has become a very powerful tool for professionals in computational sciences. As a result of this new emphasis, the working paraphrase definition of CT has expanded: "CT is the mental skills and practices for (1) designing computations that get computers to do jobs for us, and (2) explaining and interpreting the world as a complex of information processes."
Most specifications for K–12 curricula focus on the first aspect of CT and have little to say about the second. In the remainder of this column, we will give some examples of CT for professionals and comment on why these are not implied by the beginner concepts. These advanced practices have emerged over the years as professionals grapple with the work of designing and building reliable software, evaluating the performance of systems, building distributed networks and operating systems, and designing user interfaces.
What's in CT for Professionals
Here are examples of advanced CT that professionals employ.
Neural networks are the engines of many popular AI services and tools today. Some Basic CT curricula mention that neural networks power interactive bots like Siri and Alexa, tag friends in Facebook photos, run face ID on a phone, or drive TikTok's uncanny ability to show videos each subscriber will like. Some also mention that neural networks are trained rather than programmed. But Basic CT does not mention the many challenges professionals face when trying to make neural networks reliable. Professionals design the training regimens, gather and curate the training data, test the reliability of the trained network, work to and integrate the network with other software and user interface. They understand the tensor chips that power neural networks, what kinds of errors their internal algorithms might generate, how the training algorithms might be improved, and how sensitive the network is to small changes of input. They are also involved in research on how to eliminate biases the network inherits from the data, how to explain a network's output that does not make sense, or how to evaluate how safe a network is for use in critical systems such as a driverless car. Fortunately, young learners who want to try many of these ideas at a toy scale can do with Google's Teachable Machine, without having to wait for them to be included in basic CT curricula.
Computational complexity is a unique aspect of computing. It characterizes the time and storage resources to solve a wide variety of problems on computers. Basic CT may mention that some algorithms are easier than others—for example, finding an item in a sorted pile is much easier than sorting the pile. It may discuss that some problems such as designing an optimal transportation system can be too hard for any known computer. But basic CT does not mention what the NP-complete issue is all about, what kinds of heuristics have been devised for finding approximate solutions to the hard problems, or what kinds of machines and algorithms are required to break existing public key encryption. The workings of quantum computers that might solve some of these problems in reasonable time are too advanced for Basic CT.
Good designers combine human insight, social pragmatics, organizational understanding, and machine control.
Software engineering takes a professional's perspective to software development. Basic CT is primarily about what might be called "CT-in-the-small"—programming methodology for small programs used by a single type of user. CT-in-the-small is suitable for beginner programmers to learn how to design and write clean code for their own programs. But designers of large software systems rely on design and project practices to manage the development of systems of many modules produced by many programmers published in many versions. Their concerns include interoperability, cross-platform portability, cross-version compatibility, bottlenecks, and understanding how to design for thousands, maybe millions of users. This "CT-in-the-large" cannot be taught in Basic CT.
Operating Systems and Networks. These complex systems are the fundamental infrastructure for computing. They provide the platforms and connectivity for services such as the Cloud, Commerce, and social networking. They are also the targets of criminals who would steal data and compromise critical systems. Basic CT mentions the existence of these technologies but has little to say about their advanced concepts. Basic CT might teach that, according to abstraction and decomposition, these large systems are assemblies of modules and interfaces—where in reality they are continuously operating "societies" of cooperating dynamic processes or autonomous agents. These societies include many large subsystems, each a complex set of abstractions, and rely on their kernels for correct coordination and reliable operation. They support the Web and Cloud.
Despite more than a half-century of research on how to teach computing in the school, teaching computing concepts to children remains a great challenge.
Distributed Computing and Performance Modeling. Most user jobs require service from multiple servers in a computer network. Computer systems and networks are useless if they cannot provide responses in reasonable times and keep up with a large workload of user jobs. Basic CT barely touches the structure of jobs that require multiple services and says nothing of the effects of competition and congestion at bottleneck servers. Professional performance analysts of distributed systems rely on queueing network models to answer through-put and response-time questions and to configure systems with sufficient capacity to give good service to users.
Interaction design is one of the key skills in advanced CT for professionals. Computers have no intuition or capacity to care about users. The illusion of smart systems arises from the expertise of designers at understanding how to craft software whose behavior appears "intelligent." Smart technology is a triumph of design. Take the iPhone, for instance: its success arises not only from its considerable technical prowess, but also from its support of user identities and fashion statements. Good designers combine human insight, social pragmatics, organizational understanding, and machine control. Great designers understand the social practices of communities, recognize value and worth in different social realities, listen for concerns, recognize and orchestrate emotions and moods, and identify ethical and moral problems in constructing large systems.
Conclusion
Despite more than a half-century of research on how to teach computing in the school, teaching computing concepts to children remains a great challenge. It will keep computing education researchers busy for decades to come. We advocate that CT curriculum developers focus their attention to two things.
First, we advocate that teachers use computing's hard-earned hours in the K–12 curriculum to teach practices unique to our discipline, instead of rehashing generic brain puzzles, mathematics exercises, or perceptual reasoning problems. We are concerned that in the excited rush to develop CT curricula for schools, too many generic ideas may have been introduced at the cost of computing's own disciplinary concepts, ideas, skills, and practices. This ought to be changed.
Second, we advocate that the public face of CT be expanded to cover the rich spectrum of CT insights from beginner to professional. One of computing's perennial challenges has been the public perception of the field as little more than coding. This image of computing is harmful because it does not show the public the vast range of activities people in computing do. We curate and clean data, train neural networks, and use them to make everyday things smart. We find ways to avoid network bottlenecks to get the full power of the world's biggest computing clusters to the fingertips of smartphone users, without them ever noticing any delay. We continuously seek clever heuristic ways to circumvent the limits of computing. We build software that creates virtual worlds that seamlessly fit social communities and their practices.
Since the birth of the discipline, computing has been plagued by the public perception "computer science = programming" combined with a stereotype that only nerdy social misfits can do the programming. Both these perceptions are deeply mistaken. It is time to stop trying to explain computing with Basic CT. We need to retool the public face of CT to celebrate the professional richness of the field.
Join the Discussion (0)
Become a Member or Sign In to Post a Comment