How does Computer Science equip us for life?

Mr Ian Richardson, Head of Computer Science at WHS, examines the broader transferrable skills that pupils can develop in the subject, and how these can help pupils to prosper in life away from the screen.

Computer Science is a unique subject which is developing at an incredibly rapid pace. In many conversations with parents, it seems that everyone grasps the importance of understanding how computers work and of being able to bend them to our will. However, since the change from the Information and Communication Technology syllabi, a number of parents and colleagues are still unsure as to what it is we, as Computer Scientists, do in our classrooms.

The simple principle is that our pupils should be able to sit down at a computer and be presented with a problem. They should be able to start from nothing but a blank page and then design, implement, test and evaluate a program which solves that problem. The scale of the challenge is significant, whether at A Level or Year 7. The little victories and celebrations along the way are what get students into coding and make teaching the subject so enjoyable. In this article, I am going to look at what I think are the key transferrable skills for the subject.

Coding
Above: From Gov.uk

The Essential “Tools” for Computing

The curriculum for the subject is designed to promote thinking skills and metacognition. The first key skill with which pupils become acquainted is abstraction. A simple everyday example of abstraction at work is the map of the London Underground; the map does not depict the geographical placement of stations, but simply the connections between them. Abstraction is the skill of seeing the woods, despite the many trees that could obscure the view. By teaching our pupils the skill of abstraction, we can teach them to think beyond the details of a problem and to think about the patterns and the connections which in turn teaches them to make generalisations to help solve a problem.

Next comes decomposition; breaking a large problem down into increasingly smaller sub-problems until they can be solved easily. It is instinctive for most pupils, when presented with a problem, to worry about the entirety of it. It takes practice to learn to develop a structure, to work out the key parts of a solution and to build from there. Students learn to “Divide and Conquer” for success and this approach can help students to solve problems in any future learning tasks which require design skills.

Finally comes the programming itself. It can seem that there are simply huge numbers of confusing commands to learn within programming. However, it is the structure of the program which is of the greatest importance and in this respect there are relatively few things to learn. As a student continues, they may become familiar with subroutines, classes and modules but on the whole, it boils down to sequence, selection, iteration. Individual commands and keywords can be looked up in reference books, but the skill of structuring program takes time and practice to develop. It takes time to master (think Anders Ericsson and 10,000 hours) but encourages pupils to approach problems methodically.

As well as those all-important subject skills, Computer Science has the capacity to help us grow and develop as individuals.

Failure as a Stepping Stone to Success

Coding is a discipline which gives us unparalleled opportunities to conquer our fear of failure. It is often estimated that the industry average for errors is “about 15 – 50 errors per 1000 lines of delivered code.”[1]. It can be daunting to receive error messages when you first start to learn to program and it seems like you struggle to type a single line without making a mistake. Over time, pupils can learn to:

1 – Accept that they have made a mistake

2 – Accept that they have the capacity to put it right

3 – Analyse their own work to find the error (often as simple as a missing parenthesis or extra space)

Exposure to lots of low-stakes risk-bearing situations through programming and debugging can teach resilience, independence and curiosity. It also helps to develop patience and a sense of humour can go a long way too.

Creativity and Curiosity

Computing can be easily overlooked when thinking about creative subjects. Computer programmers use the tools at their disposal to solve challenges every day. Successful computing students learn to master the simple techniques at their disposal and begin to apply them in new scenarios. Over time, they start to think up their own projects and to investigate their own ideas. Perhaps they start to see ways in which a project in another subject might be enhanced with some automation.

Flow

Programming can become an all-encompassing activity. There is always one more bug to fix, or one further improvement to make. Along the way, there are also small moments of joy and times when a pupil can make a computer do something fun or exciting. Between the two extremes of frustration and celebration, it is easy to lose track of time. The ability to focus on details and to deliver with precision are yet more useful skills that pupils can develop through the subject.

Independence

Whilst the theory aspects of the subject can be taught in a more traditional manner, the practical elements of Computer Science have to be learned rather than taught. Whilst individual students require more or less scaffolding to come to an answer, the PRIMM model for teaching (Predict, Run, Investigate, Modify, Make)[2] encourages independence of thought and a structured approach to tasks and trains the student to analyse and learn from what is presented to them, rather than expecting a teacher to impart knowledge.

Evaluative Thinking

One of the key skills that pupils are taught in computing is to evaluate. It is one thing to know how to understand or to build a program, but quite another to be able to compare two different algorithms for completing the same task.

Pupils are taught to look at algorithms such as “Bubble Sort” and “Quicksort”, to understand the differences between them and to make judgements as to which is best in a given situation. As they continue to study, they learn formal language for explaining the comparisons, as well as how to spot patterns in code that may lead to inefficiency.

In addition, given the impact of algorithms on everything from advertising to politics via driverless cars, it is also crucial for students to be able to articulate the ethical arguments for and against the use of technology. Students of the subject learn to understand the potential and the limitations of computers and have the potential to lead the debate in the future.

Conclusion

There is more to studying Computer Science than people first think. Students can equip themselves with a whole host of transferrable skills ranging from abstraction to patience, all of which will positively impact their school studies, their further education and beyond. To assume that Computer Science is simply about computers would be wrong.


REFERENCES

[1] S. McConnell, Code Complete: A Practical Handbook of Software Construction, Microsoft Press, 2nd Edition June 2004, p521

[2] S. Sentence, J.Waite and M.Kallia, Teachers’ Experiences of using PRIMM to Teach Programming in School (Author Pre-Print),[website], January 2019, https://primming.files.wordpress.com/2019/01/pre_print_teachers__experiences_of_using_primm_to_teach_programming_in_school.pdf,  (accessed 31 January 2020)