In part 1 we discovered that STEM subjects have common practices that can be shared and taught in the same way to reinforce and improve students’ learning. In part 2 we look at a possible approach to problem solving in computing and how this touches other STEM subjects.
Solving problems in computing – a possible approach
Computers process data. Problem solving with computers involves taking old information (in the form of data) and creating new, useful information.
Jeanette Wing famously 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” (Cuny, Snyder, Wing, 2010, cited in Wing, 2011, p.20) ... “these solutions can be carried out by any processing agent, whether human, computer, or a combination of both” (Wing, 2006).
While its importance is universally acknowledged, there is little guidance on how to support problem solving by students. In this excellent paper (Teaching Programming with Computational and Informational Thinking), Greg Michaelson of Heriot-Watt University offers an information-driven approach, combining unplugged activity with programming. Fundamentally, the approach involves understanding the structure of information. This is achieved by thinking about information in familiar contexts such as shopping lists, family trees, underground maps and so on. Some excellent unplugged resources are available to help students learn more about these.
Once the information structure is identified, we ask why we want to access it and in what way. Michaelson recommends that implementation of the solution is not considered at this point, as it can bog-down thinking. Instead, by applying computational thinking skills of pattern recognition, abstraction and so on, the student is led towards considering the problem using abstract data types. Although these are not required until GCSE, A Level and beyond, they are fundamental to understanding information and its processing, and should not be avoided.
At this point an algorithm is created, ideally in pseudocode, which describes the sequence of computation required to traverse and manipulate the data. Iteration or recursion may be required, and Michaelson doesn’t shy away from explaining recursion to young learners with the aid of metaphor. We still haven’t touched a computer, although at this point it is possible to implement a full solution in the programming language of choice.
The approach aligns well with Vygotsky’s ‘zone of proximal development’, moving learners gently outside of what they already know by allowing them to link to prior knowledge. As stated in part 1; to impact learning, make links to things students know about, to solve problems they care about.
So how does this help across the STEM subjects and in the classroom? Worked examples are a teaching practice shown to impact positively on a student’s ability to plan solutions, especially in the early stages of learning. Mathematics teachers employ these often, and design and technology teachers and science teachers model effective practice, talking through their own thought processes as they do so.
Our next article looks at the wider benefits of debugging as a problem-solving tool and how we can transfer this across other STEM subjects.