Perhaps by misfortune, I’ve been associated with mathematicians who prefer to teach abstractions as if teaching other mathematicians; in other words, presenting abstrusities and fleshing them out with practical examples as a necessity. For many engineers, that approach brings a sense of dread to mathematics, since we tend to be different creatures with a proclivity for a different path to understanding that often involves dirty hands and a smudge of grease on the forehead, so to speak. Starting from a material example, a gradual progression to greater and greater generality, eventually achieving a (now understandable) formally beautiful pinnacle of abstraction is a more desirable approach.

If you agree with this preference and write computer code in a professional capacity, you would do well to read this book because you are the target audience. If you should find it intriguing to understand why, under certain constraints, a multiplication algorithm that is thousands of years old and was conceived in a mathematical system without positional notation still remains today the fastest exponentiation for integers, do yourself a favor and wait no longer to read this book. By the way, this technique also disproves some opinions Gauss held about prime numbers.

This book is a journey of mathematical rediscovery that, for me, healed a frayed relationship with abstract algebra, which, when reconsidered under this accessible and expert guidance, reopened doors formerly rusting on their hinges. Although stated in terms of generic programming (that is, algorithmic abstractions), this work insists on the same theoretical grounds also at the root of decomposition in terms of commonality of behavior (as opposed to decomposition in terms of abstract data types and inheritance). This work is an awesome and relatively gentle introduction to the fundamental underpinning of functional programming and can be read as a step toward approaching category theory from a practitioner’s standpoint.

The content progresses gradually, covering the historical roots of number theory and abstract algebra in a colloquial, yet adequately rigorous manner. It starts from ancient civilizations and advances to modern times by teaching the evolution of the theory with approachable mathematical formalisms and many computer code snippets as well, thereby showing what the new achievements offer in terms of theory and their practical advantage over earlier formulations. The content enjoys a chronological organization that avoids an axiomatic presentation; this is certainly not a reference book. Its Ariadne’s thread involves following the evolution of the greatest common denominator (GCD) algorithm from its ancient Pythagorean roots to its recent restatement in terms of the Euclidean ring.

If you sat by the fire on a winter night with a friend providing you with new insights into shared memories, including pleasant digressions expanding on, but only marginally relevant to, the main thread, you would develop a better impression of the teaching style with which this book is imbued. It should be read from cover to cover and revisited as an accessible guide to, and reminder of, abstract algebra with computer science applications.

The book consists of approximately 250 pages, organized in 14 chapters, three appendices, a bibliography, and an index. Chapter 1 introduces the goals and style of this work. Chapter 2 discusses Egyptian multiplication, a 4,000-year old algorithm, and its formulation and refinement in C++. Chapter 3 presents the roots of number theory as invented in ancient Greece, inclusive of C++ applications, and confirms a pattern (discussion of theory accompanied by code snippet examples) followed throughout the book. Chapter 4 is about Euclid’s GCD algorithm. Chapter 5 discusses several achievements attained during the emergence of modern number theory. Chapters 6 and 7 represent the heart of this work: chapter 6 introduces algebraic structures, and chapter 7 shows why they are critically relevant to generic programming. Chapter 8 delves deeper into algebraic structures. Chapter 9 is a discussion on mathematical proofs and the axiomatic method. Chapter 10 briefly compares and contrasts mathematical models with computer programming type systems. Chapter 11 shows why abstract algebra is relevant to permutation algorithms. Chapter 12 explores extensions of the GCD algorithm. Chapter 13 teaches in an accessible manner the number-theoretical foundations of public key cryptography. Chapter 14 concludes with a candidly annotated list of further reading material that, for some readers, may be worth the price of admission itself. Appendix A is a primer for formal mathematical notation. Appendix B covers common proof techniques. Appendix C is a flash guide to C++. This book is highly recommended, under the nontrivial constraints introduced earlier in this review.

More reviews about this item: Amazon, Goodreads, i-Programmer