This book’s table of contents has, perhaps through style, organization, and its own expressiveness, a motivational quality that prevails over its conceivably intimidating display of the book’s very wide scope. In this unique work are found, in one place, many “things [I] have always wanted to know about ... but [was] afraid to ask.” The alluded-to fear is one of not understanding the answers to any degree of satisfaction: an uncomfortable state for any person, and a critical one for a student or practitioner of computing.
The back of this 800-page volume reinforces the same case: It is a pithy and accurate glossary comprising terms from (what seems like) every science. For example, the portion for terms beginning with P has pheromone, polymer, Poiseuille’s equation, postcondition, pseudocode, precondition, and pyrimidine within its two-page span. All of these are, of course, terms from the body of the book, which discusses the science from which they arise.
The many topics considered are, for one thing, vehicles (my word) for treating and teaching, in this case with consummate pedagogy, diverse computation techniques. However, and for another thing, this book is also the perfect realization of universal and enduring truths rightly expressed in Donald Knuth’s classic article [1]:
- “[A] person does not *really* understand something until [s/]he can teach it to a *computer*, i.e., express it as an algorithm.” [Emphasis Knuth’s]
- “The attempt to formalize things as algorithms leads to a much deeper understanding than if we simply try to comprehend things in the traditional way.”
In other words, the authors impart understanding to a maximal degree with this carefully explicated and annotated algorithmic (my application of this term) approach. I furthermore suspect that I am not the only one who jumps with some frequency from one factor to the other in the following “uncertainty principle” of a subject’s mastery: depth * breadth > h, h being a constant that, if not universal, is at least characteristic of each particular student, scholar, or practitioner. I agree with Mario Bunge [2] that, in physics, the principle is one of indeterminacy, not uncertainty, today’s quantum “hype” to the contrary notwithstanding. This work, in any case, seems to break this (admittedly forced) analogy; the reader can have both: some depth and considerable breadth.
The 14 chapters are each partitioned into modules (rather than sections) with integral exercises and projects. This type of arrangement is quite effective, as the work in a module has a beginning, middle, and end, thus lending particular focus and closure to learning a specific (sub)topic or technique. The chapters’ topics, with number of modules in parentheses, are: “Overview” (two); “System Dynamics Problems with Rate-Proportional to Amount” (five); “Force and Motion” (four); “System Dynamics Models with Interactions” (five); “Computational Error” (two); “Simulation Techniques” (four); “Additional System Dynamics Projects” (15); “Data-Driven Models” (three); “Simulating with Randomness” (five); “Cellular Automaton Diffusion Simulations” (five); “Agent-Based Models” (four); “High-Performance Computing” (two); “Matrix Models” (five); and “Additional Cellular Automata, Agent-Based, and Matrix Projects” (15).
The first chapter’s classification categories for models of physical, chemical, biological, or any other processes are clear, giving precise but not overly formal definitions of probabilistic versus deterministic models, static versus dynamic models, and continuous versus discrete models. The three categories are alternative, not mutually exclusive, views. This careful pedagogy pervades the book, as do the non-apologetically elementary background or tutorial sections of many modules. Module 8.2, “Function Tutorial” is a case in point: It clearly explicates the essence of linear, quadratic, polynomial, exponential, logarithmic, logistic, and trigonometric functions, so that subsequent regression, multiterm models, or advanced fitting become the proverbial walk in the park. “Each module involving a scientific application covers the prerequisite science without overwhelming the reader with excessive detail” is a claim the authors make with full justification. In my case, modules in chapters 2, 4, 7, 10, 13, and 14 of the book did the job, and then some, of three specialized books [3,4,5] in my earlier attempt at getting the foundation and gist of bioinformatics.
Regarding the subjects that are already part of one’s knowledge, perhaps expertise, I think that any reader will find modules, tutorials, and treatments that will materially enrich his or her knowledge thereof. I cite, at the risk of flippant buzzword-dropping, a small sample of randomly drawn topics from this book: differential and difference equations; the physics of skydiving and bungee jumping; rocket motion; the Lotka-Volterra predator-prey model; the spread of SARS; enzyme kinetics (Michaelis-Menten); Runge-Kutta-based simulation; radioactive chains; electrical circuits; carbohydrate metabolism; Monte Carlo and random walk; and cellular automata. The full table of contents and chapters 1 and 2 are available on the publisher’s site (http://press.princeton.edu/titles/10291.html).
This decidedly distinguished work is a great contribution to our profession at large, and has my highest recommendation.