Computational Thinking

Scroll this

As someone who is fascinated by human dynamics, it has struck me that there are different skills involved in doing the building or writing of code compared to being able to communicate or explain what you’ve built to someone else. In terms of what this means for the New Branch of Engineering, I am left with questions like “Do practitioners of the NBE need to be good at both building and communicating?” or “Is it more about building diverse teams that collectively have both of these skills?”.

I’ve immersed myself in a variety of different ways that people communicate what they’ve built or coded to others. Some reflections on these communication methods are below:

  • #comments. Adding in comments to coding files is one core way that coders communicate decisions or approaches they’ve made. There’s an inherent tension between writing sufficient comments to explain what’s happening and the need to be succinct in the space afforded by the coding format. Coders writing comments often do so for their own benefit (that is, to remind themselves of what they’ve coded and why) and also as a way of sharing what they have done with others. My experience has been that different coders assume different levels of prior knowledge. For a beginner, sometimes comments are very difficult to interpret (thereby defeating their explainability purpose).

  • Github / Gitlab. These are widely used version control platforms that allow people to collaborate on code, using a system of push/pull to draw down a master code, edit it in your own branch and then request for it to be added to the master. It also allows for comments, explaining what has been changed and why. These platforms have a lot of advantages and have certainly supported a sentiment of open sharing in the coding community. As an ‘outsider’ to this community, it must also be noted that there is a barrier to entry to engage in these platforms for newbies – understanding how the push/pull systems work and how it interacts with your IDEs can be a mindboggle to begin with. There is also a generally high level of coding literacy required to engage with what has been posted. For example, for a complete newbie, it may not be obvious to you whether the code you’re looking at is in the language that you are coding in.

  • YouTube videos. There are so many of these out there in both coding and electronics worlds. My experience has been that they can be difficult to navigate, they’re often created with a very specific issue in mind and they often assume a lot of knowledge. For a beginner, these can be a minefield and lead down a load of different rabbit holes. I have also observed that these videos are nearly all led by men. This is a notable diversity dynamic at play in terms of who is making these videos and for what audiences and learning styles.

  • Live mentoring / collaborative coding. The process of actually looking at the same code at the same time with someone who is more experienced with coding and can communicate their work has been a great way of understanding what is going on. A core disadvantage is that this mode is not always accessible when you need it.

All of these methods have generally been focused at the level of a specific example. It is then part of the process that over time you infer from these examples a broader set of skills around what is called ‘computational thinking’.

It has made me wonder whether there is another way of learning computational thinking skills.

Unpacking computational thinking

What is computational thinking?

Computational thinking can be thought of as ‘thinking like a computer scientist’. Jeannette Wing (VP of Microsoft Research at the time) defines computational thinking as:

Computational thinking is the thought processes involved in formulating a problem and expressing its solution(s) in such a way that a computer – human or machine – can effectively carry out.

Informally, computational thinking describes the mental activity in formulating a problem to admit a computational solution. The solution can be carried out by human or machine. This latter point is important. First, humans compute. Second, people can learn computational thinking without a machine. Also, computational thinking is not just about problem solving, but also about problem formulation.

Jeannette Wing (2014). Computational thinking benefits society.

Computational thinking is defined in the Australian Curriculum as ” A problem-solving method that involves various techniques and strategies that can be implemented by digital systems. Techniques and strategies may include organising data logically, breaking down problems into parts, defining abstract concepts and designing and using algorithms, patterns and models.”

JULES (2017) Overview of computational thinking

According to JULES (a Singaporean EdTech social enterprise focused on digital literacy curriculum specifically), computational thinking can be thought of as skills in decomposition, pattern recognition, abstraction and algorithmic thinking.

Algorithmic thinking is defined in the Australian curriculum as “A logic behind breaking down computing problems and information systems into step-by-step processes in order to solve problems or achieve specified outcomes. It involves sequencing and abstraction and leads to algorithmic statements.”.

How might computational thinking be learned and applied?

In considering these definitions further, it has also emerged for me that immersing myself in computational thinking may not necessarily overtly involve coding examples and direct experimentation with code, but can also be learned through engaging with other modes of understanding. One alternative route in to computational thinking can be through various forms of ’embodiment’. Some places where I have seen this include:

  • Researching about DynamicLand – a computer with an interface that does not involve a screen, mouse or keyboard, but physical everyday objects like a table, a post-it note or the wall. This is an example I came across when researching new human-computer interfaces in practice and saw how computational thinking skills of abstraction, pattern recognition and algorithmic thinking can be enacted with everyday objects.
Snapshot of DynamicLand
  • Reading a chapter from Forsythe’s 1969 textbook “Computer Science: A First Course” as part of the Questions course. In it, Forsythe describes the logic of a generic language SIMPLOS with pictures of robots as a Master Computer, a Reader, An Assigner and a Sticker Affixer. By visually depicting the embodiment of the parts of the process as small robots, she is making visible the invisible work of computing and illuminating what is needed to break a problem down into something a computer can work on. This could also be viewed as a demonstration of decomposition.
Example of how SIMPLOS is depicted in Forsythe (1969) Computer Science: A First Course
  • (In a different but analagous context), during the first fortnight of the course we engaged with Boho Interactive in a live participatory play where we made decisions about how to create the best festival ever and watched the story unfold literally before our eyes as a result of our collective decisions. In this example, we were physically part of deconstructing systems.
Our experience as a cohort with Boho Interactive.

All of these experiences influenced my choice of stretch task in Fortnight #4 of the Build Course where we were asked to communicate to a particular audience what exactly our tic-tac-toe agents did. I was keen to unpack how to embody the experience of the tic-tac-toe agent, without directly using code or usual coding tools in order for people to understand it. I think that my degree of proficiency is intermediate in computational thinking and intermediate to advanced in communication of that thinking. I anticipate that these skills will improve over the course of the second semester through engaging with the practicalities of turning a set of design requirements into instructions for a cyberphyscial system.

Putting these learnings into practice:

Agent Tic-Tac-Toe – an interactive game for computational thinking

As a result of this exploration, I created an interactive spy game – “Agent Tic-Tac-Toe” where students are spies (Agent Jamie Bond) following the instructions of their Boss “M”. An overview of the concept and the lesson objectives is below.

Creating a lesson in this way was a new endeavour for me. I learned a lot about curriculum development and design by researching and discussing with my sister who is a teacher. I would love to see this game tested out in practice (perhaps for future 3AI Masters Cohort students).

A complete set of resources including classroom materials, curriculum notes and teacher notes can be found in the downloadable file below. A slideshare version is also included below for faster access (for full access to teacher notes, please use the download).

Slides are available for editable download from file link above. Created by Lorenn Ruster

More reflections as part of the Build Learning Portfolio: