Computational Thinking

When studying the principles of computer science one of the things to get your head around is computational thinking. This involves being able to think about problems in relation to computer programs. Four key elements of computation thinking are decomposition, algorithm design, pattern recognition and pattern generalisation. An overview of each type of computational thinking skill is outlined below:

Decomposition: This involves identifying a problem or process that needs to be broken down. After this you will need to break the problem or process into small manageable steps. When the steps of the problem or process have been identified, you can create a clear set of instructions to dissect them. The final step of decomposition in relation to computation problem solving is being able to communicate the key features of the problem to other based on how the problem has been broken down. This would include providing technical information and how the internal operation of the feature or function being described works.

Algorithm design: In computational thinking, algorithm design is used to break a problem down into a number of step-by-step instructions to solve it. Algorithm design involves thinking about the mathematical requirements and information flow of the problem. The first step is to clearly define the problem and then model what it may look like. A high level overview of problem can be modelled using a high level language such as pseudo code or a flow chart. After the algorithm is designed like this it should be tested and all possibilities explored to make sure it works as expected. when happy with the algorithm it can then be implemented as computer code to make sure that the algorithm solves the problem in the real-world context. To make sure that others involved in the problem solving and programming are well informed the design of the algorithm should be documented so that it can be easily updated in the future if needed.

Pattern recognition: This is all about identifying common elements, occurrences, data type or features within a computer system or computational problem. The purpose of doing this is so that similar methods and structures can be used for problem solving. In pattern recognition, small differences in similar features should also be identified to see how problems can be broken down. When patterns are recognised the features or functions within the patterns should be outlined and analysed. Reuse of code segments and clear definition of objects with similar features can speed up problem solving if pattern recognition is used cleverly within computational thinking. Another part of problem solving in this way is to spot patterns in data and system performance to make predictions about the future performance of the system.

Pattern generalisation and abstraction: An extension of pattern recognition pattern generalisation is making sure that all information required to solve a problem is clearly specified. This will make defining specific features and functions that have similar aspects to others easier to do. Information that is not required is filtered out to make sure that problems are clearly defined after the general features of common objects are identified. Abstraction can be used to define the complexity of the problem to form a high level understanding and to define specific requirements by looking at how variables, inputs, outputs and key processes of components work. The key element of computational thinking used here is to try and make sure that pattern recognition is used to see common features and then cut down design and development time by reusing or sharing as many elements as possible across a system or service.

Here we have explored 4 key principles of computational thinking: decomposition, algorithm design, pattern recognition and generalisation and abstraction based on patterns. Understanding these methods of thinking enable you to clearly understand how to define a problem and work towards a solution in a computer system. Developing these thinking skills and knowing when and where to use each is important to make sure that everything that you do in as refined as possible and that future updates to systems are made easier and can be based on the clear structures that were defined when identifying and solving the original problems of the system.