Computational Thinking: A Beginners Guide to Problem Solving and Programming

Karl Beecher

Published by
ISBN 9781780173641
RRP £19.99
Reviewed by Roger Davies, Director of IT, Queen Elizabeth School and Editor, Computing At School, Tenderfoot Training Project

9 out of 10

How do the small coding challenges, attempted by beginners, link to the marvels of software that drive our world? The connection, sadly missing from most programming guides, is made through Computational Thinking (CT) - a problem solving framework of value to all, regardless of experience.

Do not be confused by the book’s title; this is not another ‘getting started’ guide. It will resonate most with those who have started already.

In two distinct but related sections, Karl Beecher distils the core concepts involved, drawing from a reservoir of everyday analogy, laced with ideas from computer science. Logic provides the starting point; algorithms the precise means by which decisions are stitched together. But whilst algorithms lie at the heart of computational processes there is, unfortunately, no algorithm for solving problems. Rather our eyes are drawn to the creative art of CT.

Decomposition and other key ideas, such as pattern recognition and generalisation are introduced in plain English. No prior familiarity is assumed or required, making this less a synopsis, more a blueprint for teaching. From generalisation discussion turns naturally to a key notion, abstraction, exemplification of which provides concrete contexts for introducing modelling. The book makes clear, as Part 1 concludes, how these thinking tools can gel as methodology for system design.

Practical explorations in Part 2, using Python, map to the concepts of CT. Fasten your seatbelt and prepare for take-off. This is 0 to 60 coding in a couple of chapters, quickly rising above the minutiae of syntax, gliding from basic constructs, through complex conditional expressions to an examination of program state. Whilst saving beginners hours of angst by highlighting issues with mutable data structures, the analysis also paves the way for a higher order discussion of programming paradigms. If you’re comfortable creating simple programs, sit back, appreciate what’s happening at the conceptual level and admire the functional programming exemplars.

Progressive code refactoring reveals the importance of self-contained modularity; a bridge from small-scale scripts to large scale engineering, with decomposition and abstraction cast into the foundations. By now we’re cruising at altitude, surveying the programming terrain below. If early chapters seem challenging stick with it; an abundance of ideas (the stock of Computer Science syllabi from A-Level to undergraduate) fall into place as the landscape unfolds.  

Object oriented approaches, explained in the context of abstractions, are a response to the challenge of scale. Remaining chapters go on to introduce design patterns, Unified Modelling Language and, prior to a final worked example, consideration of defensive programming and automated testing. This is the province of the professional developer, taking the novice scripter beyond the realms they normally inhabit.

Throughout Karl Beecher makes connections hitherto unseen, raising awareness and cutting through the frequently bewildering language of the discipline. The book’s value goes much deeper though, in firmly anchoring the challenge of mastering programming to a practical expression of Computational Thinking. As he admirably demonstrates, there is a lot more to software development than simply teaching people to code.

 A ‘must-read’ for students embarking on their first major projects, and any teacher stepping up to the challenge of teaching Computing at school. This is not just a book about programming, more a template for teaching. Karl Beecher speaks in plain English. Incisive insight and practical advice, standing independent of the Python exemplars used, predicated as it is on a holistic understanding of the subject terrain.

Further information: BCS

September 2017