Introduction
Computational Thinking is argued to be tomorrow’s reality as a crucial skill for the 21st Century workforce. What process one follows to formulate and resolve a problem, and how the abilities of human thinking can be combined with the technical abilities of a computer to do so, are at the core of what Computational Thinking is all about. Following from that, Computational Thinking is a skill everyone should possess. It is a universal basic skill, that should be taught at school. But how does one teach such a skill effectively? Computational Thinking has close ties to programming; with many assuming that by teaching the latter automatically one will learn to think computationally. However, research shows that this is not the case. Duncan summarized a pilot study with primary school students in New Zealand with “We had hoped that Computational Thinking skills would be taught indirectly by teaching programming and other topics in computing, but from our initial observations this may not be the case.”[1] Indeed, Computational Thinking is much more than programming and teaching such a skill requires the use of specific tools, Computational Thinking Tools, that can assist the Computational Thinking process, without the introduction of complicated and difficult programming.
Computational Thinking
The term Computational Thinking was introduced to the computer science community through an ACM Communications article, written by Jeannette Wing in 2006. According to Wing’s both famous and widely acknowledged definition “Computational Thinking is the thought process involved in formulating a problem and expressing its solution(s) in such a way that a computer—human or machine—can effectively carry out.”[2] Through her article, Wing argued that Computational Thinking is “a fundamental skill for everyone, not just computer scientists”3. Computational Thinking should be taught everywhere, in particular at school, and computational ideas should be integrated into other disciplines. However, while commonly used definitions of Computational Thinking are gradually emerging it is much less clear how people acquire Computational Thinking to become computational thinkers. Broadly, Computational Thinking can be defined as a set of specific cognitive skills and problem solving processes. According to Wing, Computational Thinking, among other things, is reformulating a seemingly difficult problem into one we know how to solve, perhaps by reduction, embedding, transformation, or simulation. It is “thinking recursively”.3 It is “parallel processing”.3 It is judging a program not just for correctness and efficiency but for aesthetics, and a system’s design for simplicity and elegance.
To understand better the broad meaning of Computational Thinking as well as its importance, it is useful to define here what this type of thinking is and what it is NOT.
- Computational Thinking is conceptualizing, not programming. It describes a way of thinking at multiple levels of abstraction, not only the ability to program. Actually the Computational Thinking process starts before writing the first line of code.
- It is a fundamental functional skill not a mechanical one.
- The term may include the word computer but it refers mainly to the way that humans think, not computers: computers do not think, we do the thinking for them.
- Computational Thinking is not about thinking like a computer but rather thinking with the computer.
- It complements and combines mathematical and engineering thinking.
- The products of Computational Thinking are ideas, concepts we use to approach and solve problems, they are not artifacts.[3]
While the term Computational Thinking is relatively new, the process implied by Wing can be recognized as a computationally enhanced version of the well-established scientific method. In line with Wing’s definition, Computational Thinking can be considered a combination of mathematical-analytical thinking with natural sciences, engineering and other disciplines. In short, Computational Thinking is conceptualized as thinking with the computer. It is regarded and employed as a way of thinking that uses the computer as an instrument to support the human thought process, to visualize the consequences of this thought process, and to formulate a problem so that a computer supported solution can be introduced. Based on Wing’s definition the Computational Thinking process can be segmented into three stages (Figure 1):
- Problem Formulation (Abstraction): The formulation of a question: How something works; visualising the problem using a diagram on a piece of paper. As it is clear here the use of a computer is not necessary for initiating the Computational Thinking process.
2. Solution Expression (Automation): Non-ambiguous expression of the solution so that the computer can carry it out. Through computer programming.
3. Execution & Evaluation (Analysis): Solution execution by the computer showing direct consequences of one’s own thinking
The three stages describe different ratios of human and computer responsibilities. The solution execution is largely the responsibility of the computer and the solution expression largely the responsibility of the human. While problem formulation is typically considered solely the responsibility of humans, too, it can be argued that it is perhaps more of a mix. Computers can help support the conceptualization process as well, for instance, through facilitating visual thinking. In brief, Computational Thinking is an iterative process describing thinking with computers by synthesizing human abilities with computer affordances.
Since Computational Thinking is such an important skill, education in general and Computer Science Education in particular, should have a focus on creating computational thinkers and not just programmers. Obviously, teaching programming with the hopes of eventually indirectly teaching Computational Thinking will get you there, but probably only through a series of boring and hard learning experiences and risking losing the majority of students along the way. Following from that, Computer Science Education should adapt its focus to support the development of Computational Thinking. Towards that end Computational Thinking Tools are useful.
Computational Thinking Tools
Computational Thinking Tools are educational programming environments that make the teaching of Computational Thinking practical on every school level. By supporting all three stages of the Computational Thinking process and minimizing syntactic, semantic and pragmatic challenges, they render Computational Thinking and programming accessible and exciting. Of course, Computational Thinking can be stimulated by programming like a trip from Chicago to Los Angeles can also be achieved by walking. Ultimately, one needs to better understand the precise goals and potential overhead of specific approaches. For instance, if the goal of programming is becoming a professional programmer versus a computational thinker then different tools and different scaffolding approaches may be necessary. The different purposes of programming in education pulls programming environments into two very different directions. Programming Tools are general purpose programming environments that can be used for a large variety of projects but most interesting programs quickly become elaborate because of accidental complexity.
With their pronounced goal to support the Computational Thinking process, Computational Thinking Tools, have a more narrow range of projects but they manage coding overhead in ways so that Computational Thinking can be expressed with little code. Of course, Programming Tools could be used for Computational Thinking or Computational Thinking Tools could be used to create general-purpose projects but in either case the mismatch between tool and application is likely to cause excessive accidental complexity. This complexity, in turn, may simply be too much to justify educational uses.
Computational Thinking Tools must address the challenges implied by all three stages of the Computational Thinking process: problem formulation, solution expression, and solution execution/evaluation. Problem formulation can be supported by tools that support transfer through explicit abstractions but also verbal and visual thinking. For example, Computational Thinking Tools can support visual thinking by offering various evocative spatial metaphors. Mindmap tools capture concepts as nodes and links. Spreadsheets are two-dimensional grids containing numbers and strings. The versatile nature of grids has helped spreadsheets to become the world’s most used Programming Tools. Tools such as Boxer and ToonTalk employ the notion of microworlds based on containers to represent relationships.
In order to support the stage of solution expression, the visual programming community has explored approaches to make programming more accessible. To that end, and in order to limit accidental complexity, Computational Thinking Tools must also address semantic and pragmatic concerns of programming. Approaches such as drag and drop programming have addressed, by and large, syntactic challenges. The grand challenges of end-user programming are shifting from syntactic to semantic and pragmatic concerns. In terms of semantic challenges, live programming and similar approaches help users to understand the meaning of programs by illustrating the consequences of changes to programs. In terms of pragmatic challenges, domain-oriented or task specific programming languages support users in employing programming languages to achieve their goals. Finally, towards supporting the stage of execution and evaluation, Computational Thinking Tools should aid the debugging process. One strategy is to simply reduce for example the gap between solution expression and solution execution & evaluation. By doing this, Computational Thinking Tools can support Computational Thinking in a variety of disciplines without resulting in unnecessary complexity.
Computer Science Education
In particular, the Scalable Game Design project presents an excellent example of how Computer Science Education can support Computational Thinking through the combination of a game design based curriculum with Computational Thinking Tools. The goal of Scalable Game Design is to get Computer Science back to middle schools, through a low threshold, high ceiling curriculum. This gentle learning slope curriculum allows students and teachers to quickly start with game design activities producing simple classic games but then continue to sophisticated games exhibiting artificial intelligence. For many years, the Scalable Game Design project has systematically trained teachers not only in Computational Thinking but also in teaching Computational Thinking, and evaluated the efficacy of these approaches, using the two Computational Thinking Tools AgentSheets and AgentCubes.
A simple example of how AgentCubes online supports the second stage of the Computational Thinking process, is the way it resolves the accidental complexity that occurs when trying to program the 15 squares puzzle, shown here (Figure 2).
This classic children’s game consists of sliding 15 numbered squares into a sorted arrangement, 1-15, in a 4 x 4 grid. From a Computational Thinking point of view the core idea is simple: click the square you want to slide into the empty space. However, many existing computer program implementations of the game, including those in visual programming languages such as Python and Java, have upwards of 100 – 300 lines of code. If one were trying to learn Python and Java coding, implementing these solutions could have immense benefit. However, exposing students to Computational Thinking necessitates tools that are better suited to solution expression without the addition of unnecessary complexity. The Computational Thinking Tool AgentCubes offers at the syntactic level drag and drop programming, while at the level of semantics, it offers not only live programming but also a technique called Conversational Programming, resulting in a solution that is only four lines of code long (Figure 3).
Computational Thinking Tools and Programming Tools can be integrated technically or pedagogically. While most beginning mandatory courses with highly constrained time budgets may initially be best off to start with Computational Thinking Tools it often makes sense in later elective courses to switch to Programming Tools. There are many ways to technically integrate both kinds of tools. An early version of AgentSheets included an extremely powerful but also somewhat dangerous Lisp block allowing advanced users to enter arbitrary Common Lisp to be integrated into their Blocks program. Alternatively, pedagogical integration would employ scaffolding approaches to transition from a Computational Thinking Tool to a Programming Tool without actually integrating tools technically. An example of such a scaffolding approach is that AgentSheets/AgentCubes can convert blocks programs into Java and JavaScript sources respectively. This can help students to understand to make the transition.
Furthermore, AgentSheets /AgentCubes use the game design motivational characteristics and their ability to support the development of a rich set of skills consistent with STEM and IT competency frameworks but they do so with a focus on supporting Computational Thinking. As a result, AgentSheets and AgentCubes are not just about game design but about learning to think computationally in ways that they can be leveraged by students to build STEM simulations. The Predator/Prey project, for example, can also be built with just 10 rules to investigate the stability of ecosystems (Figure 4). AgentCubes includes plotting tools to visualize data and to export it to other tools such as Microsoft Excel or Google Sheets for further analysis.
Computational Thinking Tools appear to have a purpose bigger than that of teaching Computational Thinking. Besides their pronounced goal to support the Computational Thinking process, Computational Thinking Tools have the potential to transform complicated programming to a highly accessible, even fun learning experience. They have the potential to turn around the persisting assumption that Computer Science is “hard and boring”. The Cognitive/Affective Challenges space (Figure 5) is a conceptual framework exploring how the previously mentioned perception, of Computer Science being “hard and boring,” can be transformed to being “accessible and exciting.” The lower left of this space is the “compute prime numbers” using C++ and Emacs activity which, by the vast majority of kids, is considered to be hard and boring. In the upper right corner is the elusive holy grail of Computer Science Education providing activities that are easy, or at least accessible, and exciting.
Figure 5: The Cognitive/Affective Challenges space
Working within the Cognitive/Affective Challenges space, tools are essential to mitigate some of the challenges. On the affective dimension, domain-oriented tools such as game design, robot programming environments or physical computing play an important role. On the cognitive dimension, taking into account that the very notion of Programming Tools may be too narrow, particularly in the context of Computer Science Education (Figure 5), Computational Thinking Tools seem to serve perfectly towards making Computer Science Education an easy experience.
Conclusion
Focusing on equipping the future generations with the ability to think computationally does not mean focusing on teaching programming alone, but especially for general educational purposes, it means focusing on developing appropriate Computational Thinking Tools that make the teaching of Computational Thinking practical on every school level. Tools such as AgentSheets and AgentCubes online do not only teach Computational Thinking but furthermore have the potential to transform Computer Science Education from “hard and boring” to “easy and exciting.” As Computational Thinking Tools, they support all three stages of the Computational Thinking process and help creating computational thinkers. At the same time taking advantage of the specific characteristics that Computational Thinking Tools possess, they transform Computer Science to an accessible experience. Through for example minimizing unnecessary accidental complexity and managing coding overhead in ways so that simple Computational Thinking can be expressed with as little code as possible. Finally, as game design applications they have the potential to make Computer Science an exciting experience. Overall, Computational Thinking Tools play an important role not only in practically supporting the effective teaching of Computational Thinking but also in reaching the holy grail of Computer Science Education (Figure 5).
Dr. Anna Lamprou is a senior research assistant in Computer Science Education at the Pädagogische Hochschule FHNW in Switzerland
Prof. Dr. Alexander Repenning is Hasler Professor and Chair of Computer Science Education at the Pädagogische Hochschule FHNW in Switzerland and computer science professor at the University of Colorado.
__________
[1] C. Duncan and T. Bell, “A Pilot Computer Science and Programming Course for Primary School Students,” presented at the Proceedings of the Workshop in Primary and Secondary Computing Education, London, United Kingdom, 2015, 39- 48.
[2] Wing, J. M. “Computational Thinking Benefits Society,” 2014 http://socialissues.cs.toronto.edu/index.html%3Fp=279.html
[3] J. Wing “Computational Thinking,” published at Communications of the ACM March 2006/ Vol. 49, No. 3, pp: 33-35. The article can be accessed here: https://www.cs.cmu.edu/~15110-s13/Wing06-ct.pdf