Is computational thinking (CT) a high-level, domain-independent set of skills applicable at all education levels, elementary through university, or is it uniquely specific to computer science (CS) education? Search for books and other publications and research on that subject and you will not get a clear answer, although much of that effort leads to discussions of the thought processes related to problem solving, with the goal of coding solutions using programming languages and concepts, and even introducing such to kindergarten students. But given the ubiquity of computers in our daily lives, and at least some reasonable need for nearly everyone to minimally understand what they do and how they work, the continued interest in, and exploration of, CT at all levels and domains of learning is not surprising.
The authors of Computational thinking: a perspective on computer science don’t address any pre-college efforts to enhance such skills, but they approach the topic explicitly as an introduction and organizing principle for first-year CS college students and advanced high school students. Xu and Zhang both teach at the University of Chinese Academy of Sciences, developing and presenting a course based on their interpretation and application of CT concepts and methods. They cite and use relevant and pedagogically sound learning theory, “aiming at the upper levels of Bloom’s taxonomy” and Knuth’s “ultimate test” to support their approach, applying active learning methods and providing numerous hands-on exercises and “thought experiments.”
While claiming to be an introductory CS text for students in any discipline, the content includes basic coverage of more advanced topics like Turing machines, complex algorithms, Amdahl’s law, Gödel’s theorems, and even P versus NP. Certainly challenging for non-science, technology, engineering, and mathematics (STEM) learners, but the authors emphasize their goal of teaching an “intellectually interesting, not a watered-down boring course.” They characterize CT as comprising internal and external “features and understandings,” illustrating them with excellent and well-presented examples such as computing with very large numbers and the role of abstraction in computation. Each chapter includes numerous exercises that enhance understanding and practice of the presented concepts. Programming examples and exercises are given in the Go language, and the book’s companion website includes the course’s lecture and project slides as well as Go source code.
While CT is certainly relevant to problem solving in nontechnical domains--early learning, for example--Xu and Zhang validate the view that it is indeed more concerned with (and applicable to) CS instruction itself and provides an effective framework for teaching the subject from introductory to advanced courses. Thus they agree with other notable CT researchers and practitioners, such as Denning and Tedre , and their textbook is a most valuable contribution to CS education.