ArticlePDF Available

Abstract

Various aspects of computational thinking, which builds on the power and limits of computing processes, whether they are executed by a human or by a machine, are discussed. Computational methods and models are helping to solve problems, design systems, and understand human behavior, by drawing on concepts fundamental to computer science (CS). Computational thinking (CT) is using abstraction and decomposition when attacking a large complex task or designing a large complex systems. CT is the way of thinking in terms of prevention, protection, and recovery from worst-case scenarios through redundancy, damage containment, and error correction. CT is using heuristic reasoning to discover a solution and using massive amount of data to speed up computation. CT is a futuristic vision to guide computer science educators, researchers, and practitioners to change society's image of the computer science field.
COMMUNICATIONS OF THE ACM March 2006/Vol. 49, No. 3 33
C
omputational thinking
builds on the power and
limits of computing
processes, whether they are exe-
cuted by a human or by a
machine. Computational
methods and models give us
the courage to solve prob-
lems and design systems that no one of us would
be capable of tackling alone. Computational think-
ing confronts the riddle of machine intelligence:
What can humans do better than computers? and
What can computers do better than humans? Most
fundamentally it addresses the question: What is
computable? Today, we know only parts of the
answers to such questions.
Computational thinking is a fundamental skill for
everyone, not just for computer scientists. To read-
ing, writing, and arithmetic, we should add compu-
tational thinking to every childs analytical ability.
Just as the printing press facilitated the spread of the
three Rs, what is appropriately incestuous about this
vision is that computing and computers facilitate the
spread of computational thinking.
Computational thinking involves solving prob-
lems, designing systems, and understanding human
behavior, by drawing on the concepts fundamental
to computer science. Computational thinking
includes a range of mental tools that reflect the
breadth of the field of computer science.
Having to solve a particular problem, we might
ask: How difficult is it to solve? and What’s the best
way to solve it? Computer science rests on solid the-
oretical underpinnings to answer such questions pre-
cisely. Stating the difficulty of a problem accounts
for the underlying power of the machine—the com-
puting device that will run the solution. We must
consider the machine’s instruction set, its resource
constraints, and its operating environment.
In solving a problem efficiently,
,we might further
ask whether an approximate solution is good
enough, whether we can use randomization to our
advantage, and whether false positives or false nega-
tives are allowed. Computational thinking is refor-
mulating a seemingly difficult problem into one we
know how to solve, perhaps by reduction, embed-
ding, transformation, or simulation.
Computational thinking is thinking recursively. It
is parallel processing. It is interpreting code as data
and data as code. It is type checking as the general-
ization of dimensional analysis. It is recognizing
both the virtues and the dangers of aliasing, or giv-
ing someone or something more than one name. It
is recognizing both the cost and power of indirect
addressing and procedure call. It is judging a pro-
gram not just for correctness and efficiency but for
aesthetics, and a system’s design for simplicity and
elegance.
Computational thinking is using abstraction and
decomposition when attacking a large complex task
or designing a large complex system. It is separation
of concerns. It is choosing an appropriate representa-
tion for a problem or modeling the relevant aspects
of a problem to make it tractable. It is using invari-
ants to describe a system’s behavior succinctly and
declaratively. It is having the confidence we can
safely use, modify, and influence a large complex
system without understanding its every detail. It is
LISA HANEY
Viewpoint Jeannette M. Wing
Computational Thinking
It represents a universally applicable attitude and skill set everyone, not just
computer scientists, would be eager to learn and use.
34 March 2006/Vol. 49, No. 3 COMMUNICATIONS OF THE ACM
modularizing something in anticipation of multiple
users or prefetching and caching in anticipation of
future use.
Computational thinking is thinking in terms of
prevention, protection, and recovery from worst-case
scenarios through redundancy, damage containment,
and error correction. It is calling gridlock deadlock
and contracts interfaces. It is learning to avoid race
conditions when synchronizing meetings with one
another.
Computational thinking is using heuristic reason-
ing to discover a solution. It is planning, learning,
and scheduling in the presence of uncertainty. It is
search, search, and more search, resulting in a list of
Web pages, a strategy for winning a game, or a coun-
terexample. Computational thinking is using massive
amounts of data to speed up computation. It is mak-
ing trade-offs between time and space and between
processing power and storage capacity.
Consider these everyday examples: When your
daughter goes to school in the morning, she puts in
her backpack the things she needs for the day; that’s
prefetching and caching. When your son loses his
mittens, you suggest he retrace his steps; thats back-
tracking. At what point do you stop renting skis and
buy yourself a pair?; that’s online algorithms. Which
line do you stand in at the supermarket?; that’s per-
formance modeling for multi-server systems. Why
does your telephone still work during a power out-
age?; that’s independence of failure and redundancy
in design. How do Completely Automated Public
T
uring Test(s) to Tell Computers and Humans
Apart, or CAPTCHAs, authenticate humans?; that’s
exploiting the difficulty of solving hard AI problems
to foil computing agents.
Computational thinking will have become
ingrained in everyone’s lives when words like algo-
rithm and precondition are part of everyone’s vocab-
ulary; when nondeterminism and garbage collection
take on the meanings used by computer scientists;
and when trees are drawn upside down.
We have witnessed the influence of computa-
tional thinking on other disciplines. For example,
machine learning has transformed statistics. Statisti-
cal learning is being used for problems on a scale, in
terms of both data size and dimension, unimagin-
able only a few years ago. Statistics departments in
all kinds of organizations are hiring computer scien-
tists. Schools of computer science are embracing
existing or starting up new statistics departments.
Computer scientists’ recent interest in biology is
driven by their belief that biologists can benefit
from computational thinking. Computer science’s
contribution to biology goes beyond the ability to
search through vast amounts of sequence data look-
ing for patterns. The hope is that data structures
and algorithms—our computational abstractions
and methods—can represent the structure of pro-
teins in ways that elucidate their function. Compu-
tational biology is changing the way biologists
think. Similarly, computational game theory is
changing the way economists think; nanocomput-
ing, the way chemists think; and quantum comput-
ing, the way physicists think.
This kind of thinking will be part of the skill set
of not only other scientists but of everyone else.
Ubiquitous computing is to today as computational
thinking is to tomorrow. Ubiquitous computing was
yesterday’s dream that became today’s reality; com-
putational thinking is tomorrow’s reality.
WHATITIS, AND ISNT
Computer science is the study of computation—
what can be computed and how to compute it.
Computational thinking thus has the following
characteristics:
Viewpoint
Thinking like a computer scientist means more than being able to
program a computer. It requires thinking at multiple levels of abstraction.
COMMUNICATIONS OF THE ACM March 2006/Vol. 49, No. 3 35
Conceptualizing, not programming.
Computer sci-
ence is not computer programming. Thinking
like a computer scientist means more than being
able to program a computer. It requires thinking
at multiple levels of abstraction;
Fundamental, not rote skill.
A fundamental skill is
something every human being must know to
function in modern society. Rote means a
mechanical routine. Ironically, not until computer
science solves the AI Grand Challenge of making
computers think like humans will thinking be
rote;
A way that humans, not computers, think.
Computa-
tional thinking is a way humans solve problems;
it is not trying to get humans to think like com-
puters. Computers are dull and boring; humans
are clever and imaginative. We humans make
computers exciting. Equipped with computing
devices, we use our cleverness to tackle problems
we would not dare take on before the age of com-
puting and build systems with functionality lim-
ited only by our imaginations;
Complements and combines mathematical and engi-
neering thinking.
Computer science inherently
draws on mathematical thinking, given that, like
all sciences, its formal foundations rest on mathe-
matics. Computer science inherently draws on
engineering thinking, given that we build systems
that interact with the real world. The constraints
of the underlying computing device force com-
puter scientists to think computationally, not just
mathematically. Being free to build virtual worlds
enables us to engineer systems beyond the physi-
cal world;
Ideas, not artifacts.
It’s not just the software and
hardware artifacts we produce that will be physi-
cally present everywhere and touch our lives all
the time, it will be the computational concepts
we use to approach and solve problems, manage
our daily lives, and communicate and interact
with other people; and
For everyone, everywhere.
Computational thinking
will be a reality when it is so integral to human
endeavors it disappears as an explicit philosophy.
Many people equate computer science with com-
puter programming. Some parents see only a narrow
range of job opportunities for their children who
major in computer science. Many people think the
fundamental research in computer science is done
and that only the engineering remains. Computa-
tional thinking is a grand vision to guide computer
science educators, researchers, and practitioners as we
act to change society’s image of the field. We espe-
cially need to reach the pre-college audience, includ-
ing teachers, parents, and students, sending them
two main messages:
Intellectually challenging and engaging scientific prob-
lems remain to be understood and solved.
The prob-
lem domain and solution domain are limited only
by our own curiosity and creativity; and
One can major in computer science and do anything
.
One can major in English or mathematics and go
on to a multitude of different careers. Ditto com-
puter science. One can major in computer science
and go on to a career in medicine, law, business,
politics, any type of science or engineering, and
even the arts.
Professors of computer science should teach a
course called “Ways to Think Like a Computer Sci-
entist” to college freshmen, making it available to
non-majors, not just to computer science majors. We
should expose pre-college students to computational
methods and models. Rather than bemoan the
decline of interest in computer science or the decline
in funding for research in computer science, we
should look to inspire the public’s interest in the
intellectual adventure of the field. We’ll thus spread
the joy, awe, and power of computer science, aiming
to make computational thinking commonplace.
Jeannette M. Wing (wing@cs.cmu.edu) is the President’s
Professor of Computer Science in and head of the Computer Science
Department at Carnegie Mellon University, Pittsburgh, PA.
© 2006 ACM 0001-0782/06/0300 $5.00
c
... Computational thinking is an algorithmic skill used by computer and mathematical scientists and is one of the basic daily life skills that everyone needs [1,2]. Computational thinking applications are ubiquitous in life, and anyone can use computational thinking skills to solve problems [2]. ...
... Computational thinking is an algorithmic skill used by computer and mathematical scientists and is one of the basic daily life skills that everyone needs [1,2]. Computational thinking applications are ubiquitous in life, and anyone can use computational thinking skills to solve problems [2]. CT skills include problem decomposition, pattern recognition, abstraction, and algorithm design as the concept of computational thinking [1,2]. ...
... Computational thinking applications are ubiquitous in life, and anyone can use computational thinking skills to solve problems [2]. CT skills include problem decomposition, pattern recognition, abstraction, and algorithm design as the concept of computational thinking [1,2]. For example, computer programmers who are programming games often break the code into small chunks to control a character's movement and sound effects. ...
... This work is based on the assumption that Computational Thinking (the ability to define a step-by-step solution to complex problems; Wing, 2006) acquired through the practice of Learning by Doing (Bruce & Bloch, 2012) should be a part of every student's curriculum in order to better understand technology and develop a proactive approach to using technology for improving everyday life. The relevance of Computational Thinking (CT) is widely recognised and it is taught at various levels of general education or STEM-focused, from el-ementary schools to universities (Sabitzer et al., 2014;Mannila, 2014;García-Peñalvo & Cruz-Benito, 2016). ...
Article
Various studies have suggested that computational thinking needs to be highlighted as one of the essential abilities and it should be taught in the standard K-10 curriculum. However, the standard K-10 curriculum does not always contain accessible technology that uses interactive teaching methods and efficient analytical skill development. Also, most practical computational thinking applications that are being created seem to be complex and expensive for educational settings. In this work, we introduce PlutoAR, a marker-based augmented reality (AR) interpreter that is scalable, inexpensive, portable, and can be used as a platform for kids to enhance their skills in an inclusive way. PlutoAR incorporates AR through an interactive toolkit to give students the experiences of both the real and virtual worlds, overcoming the limitations of traditional and non-interactive setups. With the help of technology-based solutions, this effort intends to enable students from all demographic groups to engage in the learning process, regardless of their level of competence. The PlutoAR mobile application presently runs on any Android device with a camera. It creates inbuilt AR experiences like stories, basic elementary mathematics, navigating mazes utilising conditional loops to solve them, and the intuition of gravity. The usability of the PutoAR application is verified by performing the qualitative and quantitative analysis through user feedback. The application seems to be acceptable by users with a System Usability Scale (SUS) score of more than 80. In future, we intend to provide flexibility to the user for adding new content inside the application whenever needed and to promote AR-based collaboration among the students.
Article
The study examined the effect of teaching text-based programming with a physical programming tool on secondary school students’ computational thinking skills and self-efficacy perceptions. The study was conducted according to a sequential explanatory design as a mixed method research. The study group consisted of 85 secondary school students. Within the scope of the study, a physical programming tool called Micro:bit was used to teach Python programming for a period of 6 weeks. Data were collected using the Self-Efficacy Perception Scale for Computational Thinking Skill, Bebras: International Challenge on Informatics and Computational Thinking Tasks, tests focused on programming tool, concepts, and processes, and through semi-structured interview questioning. According to the findings obtained from pretests and posttests, a significant and positive difference was found in the students’ computational thinking skills and self-efficacy perceptions towards computational thinking skill. As a result of having received instruction in programming, the students satisfactorily learnt the required programming concepts and processes. Through learning Python programming with a physical programming tool, the students not only gained the skills required to write appropriate syntax, and to test and debug code, but they also learnt programming concepts such as variables, conditional expressions, loops, and functions.
Article
Full-text available
A promoção da educação STEM (Science, Technology, Engineering, and Mathematics) tem sido cada vez mais defendida, não só para motivar os estudantes para estas áreas, mas também para os preparar para os desafios do mundo real. Em particular, tem sido recomendada para promover a aprendizagem da matemática, muitas vezes acusada de contribuir para o problema da insuficiência de licenciados em áreas relacionadas com as STEM. Por outro lado, o Pensamento Computacional é um processo cognitivo que pode ser aplicado num contexto STEM e que requer capacidade de resolução de problemas, assim como pode contribuir para a aprendizagem da matemática. Este artigo apresenta o projeto CarRace que foi implementado numa turma de matemática de alunos de engenharia informática, entre os anos letivos 2017/18 e 2021/22; dele participaram um total de 581 estudantes. Com uma metodologia qualitativa, seguindo um paradigma interpretativo, conclui-se que o projeto promoveu o Pensamento Computacional nos estudantes, num contexto de educação STEM. Os resultados obtidos mostram a importância de implementar este tipo de abordagem com estudantes do ensino superior, nomeadamente estudantes de engenharia.
Article
This study aims to examine the impact of interdisciplinary computational thinking (CT) skills training on primary school teachers’ perceptions of CT skills. The sample of the study consisted of 30 primary school teachers in Istanbul. In this study, where quantitative and qualitative methods were used together, qualitative data were obtained from the teacher identification form. Quantitative data were obtained from the scale for CT skills. After the pre-test was applied to the study group, “CT Skills Training” was applied. During the training, the basic concepts of CT skills and the subskills were covered theoretically and practically. From the quantitative data, the education applied was determined to have had a positive effect on the primary school teachers' perceptions of CT skills. From the qualitative data, it was determined that the participants had a positive opinion about the applied training and thought that they gained skills related to CT.
Article
The purpose of this study was to investigate the collaborative dialogue patterns of pair programming and their impact on programming self‐efficacy and coding performance for both slow‐ and fast‐paced students. Forty‐six postgraduate students participated in the study. The students were asked to solve programming problems in pairs; those pairs' conversations were recorded when they worked on their tasks. Data analysis methods, including lag sequential analysis, cluster analysis and paired t ‐test, were employed, and the results showed that (1) four collaborative dialogue patterns emerged: Lecture, Guide, Question and Answer (Q&A), and Inquiry patterns; (2) Guide and Inquiry patterns significantly increased programming self‐efficacy for both fast‐ and slow‐paced students while Lecture and Q&A patterns significantly increased programming self‐efficacy for slow‐paced students but not for fast‐paced students; (3) Guide and Inquiry patterns played a significant role in improving coding performance for slow‐paced students. The study reveals a complex relationship between collaborative dialogue patterns with programming self‐efficacy and coding performance, critically affecting students' pair programming quality. Further details of the findings are also discussed. Practitioner notes What is already known about this topic Pair programming is promising in promoting problem solving and knowledge transfer and is widely used in programming education. There are different patterns observed in the pair programming process. Collaborative dialogue patterns found in “expert‐novice” pair programming were derived from a single programming task. What this paper adds Four collaborative dialogue patterns of pair programming emerged by increasing the different tasks and experiment duration and expanding the sample size, which further verified the stability of the similar patterns in previous studies. Four collaborative dialogue patterns showed different significant impacts on different students' programming self‐efficacy and coding performance. This study presents the finer‐grained characteristics of collaborative interaction in programmer pairs and contributes to the explanation regarding the different effects of pair programming reported in previous studies. Implications for practice and/or policy Four collaborative dialogue patterns can help the teachers understand the collaborative process of pair programming between fast‐ and slow‐paced students. The collaborative dialogue patterns can be used to formulate effective intervention strategies to stimulate the process of collaboration in pairs and applied in future programming education to provide a new path for cultivating and promoting students' programming abilities. It is worth further investigating the impact of collaborative dialogue patterns on students' computational thinking.
Article
In this article, the relatively new phenomenon of integrating coding and computer science (CS) related concepts and skills into the K-8 grades is analysed through a comparative analysis of related provincial curriculum initiatives in Canada. First, provincial K-8 curricula that include coding and CS related concepts and skills are identified, as well as the placement of these components within the provincial policy documents. This is followed by a comparative analysis of stated aims and objectives of the curriculum components, and an analysis of the selected concepts and skills themselves. Throughout this analysis, context is provided by theory in the field, as well as the general approaches from jurisdictions outside of Canada, which have been found in the literature. What results is a comparative analysis of this nascent curriculum topic as well as important insights for educators, policy makers, and researchers alike.
ResearchGate has not been able to resolve any references for this publication.