The goal of this book is to “encourage, prepare and challenge” talented computing students. The goal is not to motivate students without talent. As the author states in the preface: “Efforts to increase student participation in computing ... have taken a bizarre turn. [...] Why has a desire to identify previously unidentified talent in under-represented demographic groups now morphed into a search for some small set of minimal work that can be ‘accomplished’ by all students?”
One might agree or not, but the author’s stance explains the selection of topics and their rather sketchy presentation. Like a fisherman that is after the bigger fish, he lays out bait that is hard for the smaller ones to swallow. For example, the author commences the complex subject of computer simulation with a simple example of a 2D random walk. Instead of guiding the reader to more sophisticated uses of Monte Carlo simulation, or how to generate different types of probability distributions, he dwells on the simple example and asks questions that require the reader to do some simulation experiments by herself. In this example, he asks how significant the first step is in a random walk for the outcome of the simulation, and whether the answer to this question depends on the length of the simulation run. This pattern is adopted in many chapters. The author does not take the reader by the hand and explain all steps in detail, like other introductory computing books [1,2,3]. He rather identifies interesting computer science topics that can be used to solve real-world problems, outlines some pseudocode, provides questions that require further investigation, and then expects that readers will continue on their own.
The topics that are addressed in this book are computer simulation, computer graphics, visualization of complex or mass data, efficient code, and recursion. There is also a chapter with short computing projects to program small puzzles and games (a sliding puzzle, an anagram scrambler, and a beanbag cannon). The last two chapters show how complex systems can be modeled with computers. It includes the modeling of mechanical laws, collisions in one and two dimensions, as well as herd dynamics, predator and prey models, and bioinformatics. As the author writes in the postscript, “I hope you find something here to grab hold of, something to spark your interest, something even that takes your breath away.” If you know of a hardworking student with a disposition for computing, this book will make a nice present.