A critical analysis of Computational Thinking (Whakaaro Hangarau), Computer Science (Mātai Rorohiko) and Computer Programming (Papatonotanga) Digital Technology (Hangarau Matihiko) in New Zealand schools. A dissertation by Marc Williams for the degree of Master of Education, University of Auckland  2022

CHAPTER 2 - COMPUTATIONAL THINKING, COMPUTER SCIENCE, PROGRAMMING

        This chapter looks at the historical use of computing in education and the existing Computer Science and Computer Programming (coding) curriculum to give context to how the new Computational Thinking curriculum integrates, strengthens and enriches the existing pedagogy of computing in New Zealand schools.

2.1 Computational Thinking

        Computational Thinking encourages the use of critical thinking using concepts that relate to Computer Science. Computational Thinking skills are categorised into the fields of; Abstraction, Algorithmic Thinking, Automation, Decomposition, Debugging, Iteration, and Generalisation (Tang et al., 2020)

The idea of Computational Thinking dates back to the 1950s and has been in debate since then (Tedre & Denning, 2016). International research shows that descriptions of Computational Thinking differ, for example Finland and Norway call Computational Thinking ‘Algorithmic Thinking’, Estonia calls it ‘Technological Literacy’, and Poland calls it ‘Informatics Education’ although all these names relate to Computational Thinking and Computer Science education (Bocconi et al., 2018). Jeanette Wing’s influential 2006 article on Computational Thinking has become the most highly cited academic article on Computational Thinking (Tang et al., 2020; Wing, 2006). Wing described Computational Thinking as “the thought processes involved in formulating problems and their solutions, so that the solutions are represented in a form that can be effectively carried out by an information-processing agent(Wing, 2006)

However, the European Commission’s Joint Research Centre policy report ‘Developing Computational Thinking in Compulsory Education’ (Bocconi et al., 2016) concluded that “There is a lack of consensus on the definition of Wing’s landmark definition as a reference point for discussion in the field, providing two valuable perspectives: (i) Computational Thinking is a thought process, thus independent of technology; (ii) Computational Thinking is a specific type of problem solving that entails distinct abilities, e.g. being able to design solutions that can be executed by a computer, human, or a combination of both”. 

One of the objectives of this dissertation is to investigate the emerging status of Computational Thinking in schools and give greater exposure to the intricacies of the subject.  Research shows that technological definitions of the fields of Computational Thinking vary between academics. 

comparison CT.png

Image: (Duncan et al., 2017)

        The European Commission’s report (Bocconi et al., 2016) seeks to give clarity of Computational Thinking termonology by defining each of the fields as; 

Abstraction: “The most important and high-level thought process in one of the most high-level thought processes of Computational Thinking is the Abstraction process. The process of making an artefact more understandable through reducing the unnecessary detail. The skill in abstraction is in choosing the right detail to hide so that the problem becomes easier, without losing anything that is important. A key part of it is in choosing a good representation of a system. Different representations make different things easy to do. An algorithm is an abstraction of a process that takes inputs, executes a sequence of steps, and produces outputs to satisfy a desired goal. Computing is the automation of our abstractions. Computational Thinking is using abstraction and decomposition when attacking a large complex task or designing a large complex system. Abstraction is used in defining patterns, generalising from instances, and parameterisation which is Generalisation”.

Algorithmic Thinking: “A way of getting to a solution through a clear definition of the steps”.

Automation: “A labour saving process in which a computer is instructed to execute a set of repetitive tasks quickly and efficiently compared to the processing power of a human. In this light, computer programs are automations of abstractions”.

Decomposition: “A way of thinking about artefacts in terms of their component parts. The parts can then be understood, solved, developed and evaluated separately. This makes complex problems easier to solve, novel situations better understood and large systems easier to design”.

Debugging: “The systematic application of analysis and evaluation using skills such as testing, tracing, and logical thinking to predict and verify outcomes”,

Generalisation: “Associated with identifying patterns, similarities and connections, and exploiting those features, it is a way of quickly solving new problems based on previous solutions to problems, and building on prior experience. Asking questions such as ‘Is this similar to a problem I’ve already solved?’ and ‘How is it different?’ are important here, as is the process of recognising patterns both in the data being used and the processes/strategies being used. Algorithms that solve some specific problems can be adapted to solve a whole class of similar problems”.

Conversely to the individual definitions of the European Union, Professor Tim Bell (University of Canterbury, 2022d) who is one of New Zealand’s most accomplished Computer Scientists and co-creator of CS Unplugged describes the relationship between Computational Thinking and Computer Science and Computer Programming in a more abstract perception; “A strange connection where Computational Thinking (and the closely related field of Computer Science) are not particularly about programming, yet programming can be a key focus for Computational Thinking. While Computational Thinking isn’t directly about programming, when you write a program it provides a thorough test of your Computational Thinking, the computer is completely unforgiving and will follow your set of instructions exactly, so students receive instant feedback if their Computational Thinking is sound. Computational Thinking isn’t about thinking like a computer; it’s about getting control over digital devices by understanding them. This requires a higher order of thinking and reasoning than a computer can do, and a different kind of reasoning to what we are used to in the physical world. Computational Thinking gets students to look behind the screen at what is really happening, and empowers them to know that they can influence it, and even create things behind the screen for themselves. In the same way that students need to understand some science to form a view on climate change, or they need to understand social and cultural issues to form a view on politics and conflicts, they need to know some basics of the concepts underlying digital technologies to make reasonable decisions about the digital systems that they interact with(Ministry of Education, 2017).

Historically, schools that offered Programming meant students would learn to code without learning the overarching concepts of Computational Thinking or Computer Science.

Text-based programming is a traditional way to type various characters from a syntax, however it is rather passive and inaccessible to general students. Approaches to learning that predominantly rely on computer devices fail to promote advanced computer concepts necessary for programming(Threekunprapa & Yasri, 2020). Some research suggests negative attitudes towards computer education (Delal & Oner, 2020). The term Computational Thinking was first used by Seymor Papert in 1980’s (Papert, 1980). Jeannette Wing put this term in front of the computer science community, thereby giving everyone a glimpse of the importance of computational thinking and its role as an integral part of education. Wing further added that computational thinking is a universal skill set for everyone, not necessarily only for computer scientists (Arora, 2019).

 

Contemporary educational pedagogy of the New Zealand Digital Technologies | Hangarau Matihiko curriculum now integrates the overarching principles of Computational Thinking and Computer Science into learning to strengthen the practice of Computer Programming.

2.2 Computer Science

        “Many of the key ideas in Computer Science existed before computers did; for example, the main logic that is the basis of all digital computers is Boolean algebra, developed by George Boole (1815-1864). The word Algorithm is derived from the name of a Persian mathematician, Muḥammad ibn Mūsā alKhwārizmī (780-850AD)”. (Ministry of Education, 2017).

The first published definition of Computer Science was in 1967 “The study of computers and all the phenomena surrounding them” (Perlis/Simon/Newell) (Guzdial, 2021).  

 

Computer Science is the study of computers and computer concepts, their systems, design, development and use (University of Auckland, 2022). Computer Science is characterised into the fields of; Human Computer Interaction, Computer Graphics, Coding Introduction, Compression Coding, Encryption Coding, Error Control Coding, Software Engineering, Algorithms, Artificial Intelligence, Programming Languages, Formal Languages, Computer Vision, Data Representation, Network Protocols, Complexity and Tractability.  

 

Computer Science careers include; Computer Scientist, Software Developer, Website and Mobile  App Developer, IT Solution and Infrastructure Architect, Systems Administrator, Network Engineer, Hardware Engineer, Database Administrator, Security Engineer, 2D/3D Modeller and Animator, Visual Effects and Graphic Designer, Multi-Media Artist, Games Programmer and Hacker. 

        In a school context, Computer Science education promotes logical thinking, problem solving and abstract thought within the frameworks of; Digital Information (digital tools and systems for managing information), Digital Infrastructure (hardware and networks, including installing software), Digital Media (video, audio, layout/design, web, graphics, animation, games, web), Electronics (electronic and embedded systems), and Programming and Computer Science (concepts from Computer Science and Software Engineering, designing and implementing programs). Historically New Zealand students at years 11, 12 and 13 had the option to create digital technology outcomes to demonstrate their understanding of Computer Science for a variety of New Zealand Qualifications Authority or Cambridge International Education assessments. However, the New Zealand Ministry of Education’s mandate that by 2020 all schools from Years 1 to 13 adopt the new Digital Technologies | Hangarau Matihiko curriculum, which includes a new Computational Thinking pedagogy, is a significant shift from the existing Digital Technology curriculum being optional for Years 11 to 13. “Computing in school curricula is often diluted because it has to cover three quite different directions: (1) using computers as a tool for teaching (e.g. e-learning), (2) using computers as a tool for general purpose applications (sometimes called ICT), and (3) computing as a discipline in its own right (including programming and CS). Sometimes administrators and leaders confuse these roles, and this can make it difficult for Computer Science to be visible as a discipline in its own right. Many of the difficulties implementing effective computing curricula are common to a number of countries, and the New Zealand experience has reflected the experience of others(Bell et al., 2010).

 2.3 Computer Programming and Coding

 

        Computer Programming is often confused with Coding, although they have similar meanings they are not the same thing, Coding is a subset of Programming. Computer Programming “is a method of designing an end to end software or product that adheres to particular guidelines and accomplishes a certain purpose(Scaler Academy, 2021). Coding is writing a set of instructions in a programming language like Python or Java and inputting it into a computer so it can perform a task. The New Zealand Qualifications Authority Programming assessments require students to learn programming languages to write lines of code to create a digital technology outcome. “Coding is explicitly regarded as a key 21st century skill: "Coding is the literacy of today and it helps practice 21st century skills such as problem-solving, teamwork and analytical thinking" (Bocconi et al., 2016).

This image is an example of code written in Python that will convert any PDF into an Audiobook (Nyakundi, 2021).

code.png

        There are two categories of Programming languages; High Level and Low level. 

High level languages like Python, C, C++, C# Java, JavaScript, Visual Basic, PHP, Perl, Kotlin, Julia Ruby, Swift, Dart and Scarla are programmer friendly with easy to understand syntax (specific sets of written information defined by the structure of the language that instructs computing devices to perform tasks), are simple to debug, can run on any platform and are widely used in the industry. Low level languages are machine dependent, tough to understand, complex to debug, complex to maintain, need an assembler for translation and are not commonly used but have advantages like being able to run programmes quickly with a low computer memory footprint. All programming languages have different syntax coding attributes for developing various digital technology outcomes like websites, mobile apps, 3D virtual and augmented reality, databases and cloud platform services.

 

There are approximately fifty (TIOBE, n.d.) popular high level programming languages and an estimated 8945 programming languages (HOPL, n.d.). Examples of the programming languages that multinational technology companies use are; Apple (Swift), Google Android (Java), Google Search (Python), Linux (C), Microsoft Windows (C and Visual Basic), Unity (C#) and Unreal Engine (C++). Python is one of the most popular programming languages for beginner coders due to its short learning curve and straightforward object-oriented syntax which can run on multiple operating systems like iOS, Windows and Linux. Research shows it's better for two students to peer-assist learn together when learning to code (Altintas et al., 2016). A benefit of Python’s open-source platform is that it features an extensive collection of built-in libraries of code packages so you don't have to write individual code, you can index library extensions. It’s estimated that Google runs on two billions lines of code (Metz, 2015), whereas an iPhone or Android app is about 500 lines of code.  

Young children ages 5-7 can learn the basics of coding using ScratchJr (MIT Media Lab et al., n.d.) which is based on a Visual Programming language, a drag-&-drop block-based coding application. “Data reveals that countries with robust Computer Science initiatives such as the UK and the Nordic countries have high usage of ScratchJr” (Bers, 2018). Scratch (MIT Media Lab, n.d.) designed for 8-16 year olds is the world's largest free block-based coding community. Alice (Carnegie Mellon University, n.d.) is also a popular block-based coding platform. 

International Computational Thinking academic literature research (Tang et al., 2020) from 2006-2018 has found that the third most popular citation based academic research article is ‘Scratch: programming for all’, Resnick et al (2009) (Resnick et al., 2009) which introduces a game based programming tool that facilitates individuals to access coding activities. Game construction involving both design and programming activities can enhance students’ learning of Computer Science concepts, Denner et al. (2012) (Denner et al., 2012). Game design can facilitate Computational Thinking cultivation, enabling students to solve problems in real life, and empower them to apply educational knowledge into the practical world, (Denner et al., 2012). “Through programming practices, students learn to generalise abstractions, process information and detect errors systematically, compose and decompose problems structurally, and think in iterative, recursive, and parallel ways” (Grover & Pea, 2013; Tang et al., 2020).


This image is a screenshot of block-based programming in Scratch (MIT Media Lab, n.d.).

scratch.png

Minecraft also features block-based programming that auto creates lines of JavaScript text code so you can switch between and compare code instructions of the visual based blocks and JavaScript text editor programming using Microsoft’s MakeCode platform (Microsoft, n.d.). In 2014, Alfriston College pioneered the use of Minecraft for the New Zealand Qualifications Authority Computer Programming assessments using MakeCode, JavaScript and Code Connection (Alfriston College, 2021).

 

This image is a screenshot of a block-based programming project showing the block and JavaScript code in Minecraft (Marc Williams, 2019).

minecraft.png

Generally, the first lines of code you learn to write in any language is ‘Hello World!’ 

This image below shows the variety and complexity of coding languages and their syntax to produce the same result of writing Hello World!

hello world.png