We do not think there can be "computer science" without a computer. Some efforts at deep thinking about computing education seem to sidestep the fact that there is technology at the core of this subject, and an important technology at that. Computer science practitioners are concerned with making and using these powerful, general-purpose engines. To achieve this, computational thinking is essential, however, so is a deep understanding of machines and languages, and how these are used to create artifacts. In our opinion, efforts to make computer science entirely about "computational thinking" in the absence of "computers" are mistaken.
As academics, we were invited to help develop a new curriculum for computer science in Scottish schools covering ages 315. We proposed a single coherent discipline of computer science running from this early start through to tertiary education and beyond, similar to disciplines such as mathematics. Pupils take time to develop deep principles in those disciplines, and with appropriate support the majority of pupils make good progress. From our background in CS education research, we saw an opportunity for all children to learn valuable foundations in computing as well, no matter how far they progressed ultimately.
Nobody knows exactly the right CS curriculum for the average five-year old, as we have not taught them CS before, but we are unconvinced of the coherence of many current curricula: an underlying intellectual and developmental framework seems to be missing, and such a framework is our principal offering to the curriculum.
We understand both the desperate calls from industry to meet the labor market demands of the digital economy, and the extraordinary environment that will be our children's, with ever more blurring of digital and human worlds. Hence, we wanted a curriculum that properly grounds their understanding of that non-human world and gives every child the opportunity, should they wish, of a future career in our area. Our school systems have these aspirations in teaching about the natural worldwhy not the digital world also?
In March 2017, the new curriculum was formally adopted at government level, and its delivery has started. A teachers' guide is herehttp://www.teachcs.scotand we encourage interested readers to look at the full guide.
All curriculum design requires compromise. We have balanced: our initial vision of a curriculum that captures the essence of computation at the heart of the digital revolution; the practical realization that only a small amount of resources are available for teachers' professional development; the requirement to reuse a varied body of existing early-years computing educational material; and the desire from government to direct computing education down a narrow agenda to fill a perceived skills shortage.
All curriculum design requires compromise.
Nonetheless, we have kept in view throughout our overarching framework consisting of three main points that we think is the real contribution of the curriculum, and the three points are the focus of this column. We will describe the essence of our proposed three-point underpinning, developing three essential strands of learning, and the way these have been eventually interpreted in the adopted curriculum.
We aimed to identify a core framework for the discipline that is equally relevant to a child, a university student, or a software engineer. The essence of computation is clear: the Church-Turing thesis. Some kind of computational mechanismwhether the Scratch programming environment, a Turing Machine, or the Lambda Calculuscan be used to model any tail-recursive numeric function ... and therefore anything that can be computed ... and furthermore all such mechanisms are somehow equivalent.
To be of interest, such mechanisms should be restricted to those that can perform some kind of modeling function over another domain or world. That is, they can be set up in such a way that their operation, when viewed in the context of the other domain, can be seen as simulating some aspect of that domain. Hence, a programming language can be used to model an aspect of the real world; a processor can be set up with appropriate machine code to model a computation expressed in a programming language; a lambda calculus expression, under the application of reduction, can provide the result of some recursive function.
A deep understanding of computer science requires the following three aspects, our three-point framework, which can be neatly separated as the understanding of:
- Domains that can be modeled by computational mechanisms;
- The computational mechanisms themselves; and
- How to use the computational mechanisms to model aspects of the domains.
It is our belief that a computer scientist is habitually and implicitly aware of these, and indeed is expert at quickly assimilating new instances of them. We believe this is a core skill with many applications to a modern process- and information-driven world.
Computational thinking, as well as the learning delivered via the Unplugged approach, are, we believe, largely captured within the first aspect. The skill of programming, as taught even at university level, is mostly within the third. The second all-important aspect seems to be often neglected, at least until the later stages of a computing degree. It has long been a wry observation of the authors that, while "programming" is taught right from the start of university computing courses, more "advanced" topics such as programming language syntax and semantics are typically taught much later on. This begs the question: How can one learn to program in the absence of such knowledge? Research shows that concentrating on explaining how programs work, rather than writing them, helps students early on to learn programming. Could it be that we normally teach "by example" only, rather than ever properly defining the domain in which the modeling is performed, or even the domain being modeled?
The resulting curriculum is formally structured around these three aspects. Here we outline how they are presented to non-computer scientistssee the detail at http://www.teachcs.scot. The vocabulary and concepts used are accessible to those who need to read them; the difficulty of this should not be underestimated, it is hard for an academic computer scientist to communicate with a teacher of early years computing.
Each of our three main aspects persists through the five defined levels of the curriculum, from ages 315; the text here is mostly aimed at teachers of the lower levels.
Understanding the world through computational thinking. The first aspect looks at the underlying theory in the academic discipline of Computing Science. Theoretical concepts of Computing Science include the characteristics of information processes, identifying information, classifying and seeing patterns.
This aspect is about understanding the nature and characteristics of processes and information. These can be taught through Unplugged activities (fun active learning tasks related to computing science topics but carried out without a computer) and with structured discussions with learners. There is a focus on recognizing computational thinking when it is applied in the real world such as in school rules, finding the shortest or fastest route between school and home, or the way objects are stored in collections.
Learners will be able to identify steps and patterns in a process, for example seeing repeated steps in a dance or lines of a song. In later stages, learners will begin to reason about properties of processes, for example considering whether tasks could be carried out at the same time, whether the output of a process is predictable, and how to compare the efficiency of two processes.
Learners will identify information, classify it, and see patterns. For example, learners might classify and group objects where there is a clear distinction between types or where objects might belong to more than one category.
Understanding and analyzing computing technology. This aspect aims to give learners insight into the hidden mechanisms of computers and the programs that run on them. It explores the different kinds of language, graphical and textual, used to represent processes and information. Some of these representations are used by people and others by machines, for example, a verbal description, a sequence of blocks in a visual programming language such as Scratch, or as a series of 1s and 0s in binary.
In this aspect, learners will learn how to 'read' program code (before writing it in the next aspect) and describe its behavior in terms of the processes they have learned about in the first aspect, processes that will be carried out by the underlying machinery when the program runs. For example, learners could read a section of code and predict what will happen when it runs or if lines of code change order. Learners will learn and explore different representations of information and how these are stored and manipulated in the computing system under study.
Designing, building, and testing computing solutions. The third aspect is about taking the concepts and understanding from the first two aspects and applying them. Learners will create solutions, perhaps by designing, building, and testing solutions on a computer or by writing a computational process down on paper. In doing so, they will learn about modeling process and information from the real world in programs, and what makes a good model to represent or solve a particular problem.
Learners will create representations of information. For example, learners could make lists, tables, family trees, Venn diagrams, and data models to capture key information from the problems they are working on.
Learners will use their skills in language to create descriptions of processes that can be used by other people. For example, a computer program is a great way to describe a process.
Although solutions can be created in many ways, it is expected that all learners will experience creating solutions on computers.
Learners will understand how to read, write, and translate between different representations such as between English statements, planning representations, and actual computer code. For example, developing skills in writing code could be scaffolded by studying worked examples or by giving learners jumbled lines of code and asking them to put the lines into an appropriate order.
Although solutions can be created in many ways, it is expected that all learners will experience creating solutions on computers. This shows learners that computers implement exactly what theythe learnershave written, which is often not what they intended, as well as giving them practice in debugging.
We have presented a curriculum that explicitly connects computational thinking with the more mechanical aspects of computing, with particular concentration on the explicit modeling of computational domains by computational mechanism. Not everyone needs to become a software engineer or computer scientist; the curriculum provides valuable learning at all levels, including the essential foundations for those who wish to study the subject further. While our curriculum is informed by previous educational computing research, we emphasize quite different learning outcomes via our three-point framework.
The Digital Library is published by the Association for Computing Machinery. Copyright © 2017 ACM, Inc.