CMT119 Assessment - 1533747

Computational Thinking

What is Computational Thinking?

Computational Thinking (CT), at its core, is a set of widely applicable problem-solving processes that involve expressing problems and their solutions in such a way that they may be understood by both humans and computers (In terms of logic – not literally machine code.). Although the term seems to imply a direct relation to Computer Science, CT is a set of skills transferable across disciplines, useable by anyone and everyone to address a broad spectrum of problems and scenarios regardless of discipline or context.

“CT Involves solving problems, designing systems, and understanding human behavior, by drawing on the concepts fundamental to computer science.”
— from Computational Thinking by J. M. Wing. 2006

There are 4 key elements of computational thinking:

Aside from the blindingly obvious benefit of allowing one to tackle what may initially be overwhelming problems with no clear implied solutions, a CT approach can also make life easier for a team of people trying to work on the same problem – a mutual digestion of problems in the decomposition stage allows a group of individuals to assess and share their thoughts and ideas with ease, as well as keeping everyone ‘on the same page’ throughout Abstraction and Pattern Recognition, thus making life easier when the time comes to divide the workload appropriately and build useful Algorithms to be implemented as a composite solution.

It is also worth noting that applying a computational thinking approach to problem solving does not necessarily lead directly to the perfect solution – often there is no perfect solution to real problems, as complex problems often have many external and sometimes uncontrollable factors. There is an iterative process required to create more advanced and eloquent solutions, which may enable a broader scope of systems, or ‘inputs,’ and allowing for more variables, or to improve the efficiency of your design. Iterative processes also allow subproblems to be identified; sometimes changes need to be made to the initial conditions or statements.

Computational Thinking that anyone could understand

A classic and widely understandable real-world example here would be baking a cake.

So, the birthday of a spouse or family member is swiftly approaching, and you decide you need to get, or make, them a cake. Now you have a problem statement and direction, but you are no closer to a solution – you still need more information to divide this into sub-problems. What kind do they like? Flavour? Style? Do they have allergies or health issues? How should you decorate it, candles, writing?
You also need contextual information: How many people will be eating – how big does it need to be? What environment will the implied event take place in? When is said party – what is your project deadline?

Carrying out some research (asking questions) tells you they like chocolate cake, someone attending has a nut allergy, and there are no other health issues or requirements. Presentation they would like to keep simple, with a ‘happy birthday’ and no candles, and there should be around 30 people in attendance to feed a week from now. This is the first iterative step. Now “I need a cake” has become: “I need a cake for a party in a week’s time. It should be a chocolate cake with simple icing reading ‘Happy Birthday!’ with no candles and not including nuts.

An obvious next step would be to look up existing recipes that will fit our flavouring and dietary criteria, and similarly for the decoration/styling – this is our pattern recognition. Thankfully in this example the ‘customer’ requirements are simple, so meeting deadlines should not be an issue, though in many situations there may be need for abstraction, deciding which elements are most important, and if any can be ignored or put aside for now in order to deliver on time, within the cake-supply example, if a multitude of intricate decoration details were requested on such a short deadline, some may have to be scrapped or put on hold for a time to prevent severely over-running the time limit.

Using your research of ingredients and recipes you would algorithmically follow these steps/rules to produce the cake. It would also be important to consider the order of inputs and actions throughout these algorithms – you can’t throw all the ingredients together, pop it in the oven and expect a masterpiece to assemble itself – steps must be carried out procedurally. Equally, it isn’t always necessary to perform all actions in a series, some may be performed in parallel, like mixing ingredients as the oven heats. This in fact brushes upon a misconception some people might have about computational thinking, which is that the 4 stages are often taught and explained in a certain order, though they themselves need not always be carried out linearly. Sometimes you may have an idea about pattern recognition early on and utilise that for the first decomposition.

Applying CT to basic scenarios allow the fundamentals to be understood even by young children, and is already taught in some early education classrooms – an example of which can be seen here: Code.org children's lesson promoting CT

Personal Relevance

Although I’ve done my best to explain how widely applicable CT is and how anyone can learn to use it, CT does of course have particular utility within my current field of study, Computing, and career paths branching out from this study, not to mention the appreciation employers would have of a candidate with competent problem-solving skills.

Within the academic course itself, we are to be tasked with multiple assignments carrying considerable weight with our final grades – these assignments themselves come in the form of a complex, perhaps initially overwhelming problem to resolved and assessed by determined criteria. Having this structured and procedural approach to almost any problem will be invaluable throughout, and even more so for students such as myself who are newly transitioning into this field with limited-at-best experience, as it supplies a proven method of translating objectives read by a human mind into routines feasibly interpreted by computers when written in a given coding language.

A personal career interest of mine is Data Science and Analysis. This field has no shortage of problems to be solved in either technical or communicative sectors. A branching area from this would be machine learning, perhaps developing a model to classify tumor cells and determine if they are malignant or benign; this is by no means a simple problem to approach from any angle - it would need to be broken down and considered many times; analysis, model building and adaptation, multiple loops of testing and feedback and then finally application to real cases. Even generally approaching any data science project one would rely heavily on aspects of pattern recognition and abstraction even if you have a sufficiently digestible problem statement from the start, there still lies the challenge of asking the right questions to a customer, obtaining all the necessary data, building a model then testing that model, deploying that model as a test for the customer to then reiterate back to the step of obtaining data, adapting the model to the feedback until the finished product is as perfect as can be.

J.M.Wing “Computational Thinking”, CACM viewpoint, vol.49 no.3 March 2006, pp.33-35