Education systems are often criticised when they focus on teaching pupils to learn by rote as instead of how to think. A central part of this learning to think is developing problem solving skills. In the UK, the new computing curriculum is teaching students ‘Computational Thinking’ which is a significant step in the right direction.
Computational Thinking isn’t just about learning to code and program computers, but also how to methodically approach problems by gathering and analysing information. Before we can solve a problem it is important that we first understand it properly, and Computational Thinking is very good for providing this understanding.
A complimentary methodology is engineering design, in which you are often given a specification defining a problem for you, it is then up to you to develop solutions and compare them to select the most appropriate. The engineering design process is excellent at deriving appropriate solutions once you understand the problem.
Computational Thinking and the engineering design process can be combined and applied to a range of problems, from making a purchase to addressing political and philosophical concerns. We already apply these methods in everyday life, for example, when choosing a new phone we’ll decide what features are important to us and weigh them against each other. It is in the retailer’s interests to help us reach a decision, so they highlight important attributes (cost, size, camera, etc) and allow us to sort by them. This is similar to narrowing down solutions in engineering design.
Computational Thinking: Problems
There are many concepts to this which are now taught in British schools from an early age. There are also some very good online resources such as Barefoot Computing to provide further information, however I will give a brief overview of it here.
Logic: An understanding of cause and effect. In computing terms this is generally straightforward, two similar computers will do the same thing in response to the same inputs. With politics and other areas, it’s obviously more complicated. I’ll likely write a longer post on Logic from a philosophical point of view another time, but there’s some excellent Youtube videos on it from Crash Course philosophy already. For the purposes of this post however, it can be condensed into having an understanding of causality.
Decomposition: Breaking down a large problem into its parts. This needs to be done carefully, and is usually a key part of completing any large task. These parts can then be linked together to form Algorithms.
Algorithms: An algorithm is a series of commands or instructions. Cooking recipes are an easy example of this. There are often many ways to accomplish the same task, which can be broken down into an algorithm and compared to find the best one. Route finders on Sat Navs do this.
Patterns: Recognising patterns is very useful for solving problems, as it allows us to come up with generic solutions to apply to the similar problems. e.g. working out the area of a shape by recognising the shape and applying the formula for that shape.
Abstraction: Abstraction is to do with the level of detail required. We can sometimes get too caught up in the details and lose sight of the overall picture. Too much detail can bog you down, but too little can lead to oversights and mistakes. Often this process involves making assumptions and it is important that these are understood and acknowledged.
Evaluation: Evaluation is largely a part handled in engineering design in this post. It is about making objective judgements about problems and the solutions to them. SWOT analysis is one method of completing this.
Computational Thinking also covers various approaches to solving problems such as tinkering (experimenting) and debugging (identifying and resolving problems) which are useful and complimentary to the overall method.
Engineering Design Process: Solutions
This section varies depending on whether you are selecting an existing solution. e.g. you’re making a purchase and trying to select which product to buy, or whether you are making a solution yourself. However broadly speaking you can adapt the approach to either situation.
The first stages in the engineering design process involve conducting research and establishing design requirements. This stage sets the foundations for a project and using the Computational Thinking approaches from above can work very well. In engineering, it often involves a literature review whereby you look at existing solutions, theories, practises and studies. The aim is to not only gain a better understanding of the problem but of how it can be tackled.
The second stage is an open, creative phase whereby you brain storm solutions without critical evaluation of them (Conceptualisation). It is very important to suspend disbelief during this phase and it is often the most fun part. Working in diverse groups can be very beneficial at this stage as different people will come up with novel ideas worth considering.
The creative part can stall sometimes, writers block and being too critical too early can be issues. This blog is something I have planned for months, however I kept being overly critical and never actually getting on with it. I have started writing it in the open, uncritical stage so I can get it moving. Once I have something in writing, I can easily enter the next stage…
Critical evaluation: Once you have generated a lot of ideas you can start to narrow the list down. This is where it’s good to have the problem broken down into criteria which are important to fixing it. How long will it take, how much will it cost, how difficult will it be (feasibility) etc. From this initial pass, you can either just select one solution to develop or take a few forward and partially develop each for comparison (Preliminary Design). It really depends on what sort of problem you’re solving, and how much time and effort its worth putting into it (abstraction).
Once you’ve got a few solutions developed to a far enough stage, you can undertake a SWOT style analysis and take one idea forward, often borrowing viable aspects from alternatives. This is the Detailed Design stage of the process and it is followed by the Production Planning.
In more sustainable development focused design, the end of the life cycle of a product is also considered, how to reduce waste, re-use and recycle parts etc. Life Cycle Analysis of a product may also be undertaken to take account of the impacts of a product in economic, social and environmental terms.
Once you have finalised a design, you test the solution and evaluate it. This is where the Debugging process from Computational Thinking also applies. As in the above diagram, the process is often presented as a cycle of constant feedback and improvement. It is rare that the first solution is perfect, and it is important to gather information on its performance to evaluate it and resolve any issues.
On a side note, is also worth noting that the scientific method is often compared to the engineering design process as the two are very similar, as shown in the following diagram.
Some of the above may be stating the obvious, but personally I find it a very useful overall method to apply to problem solving generally. I see aspects of it used in everything from Exposure Therapy through to buying a new phone, designing cars and architecture. I particularly find it useful when applied to complex problems, such as sustainable development and politics. I intend to write extensively on those latter subjects and hope that some of the methods described above are apparent in my analysis.
I also hope that anyone who reads this finds these methods useful in their own lives for reflecting on effective problem solving. I absolutely do not think that these methods should be restricted to application in computing and engineering. I have only given a brief summary of these methods here, and subjected it to my own interpretation. There is extensive literature available on both for those who want to know more.