Since the latter part of the 20th century, computers have penetrated our daily lives to the extent that without them, a modern industrialized society is practically inconceivable, as is much of the rest of daily life. But computer science, being a young science, has not gotten to the point that it forms a part of K through 12 education, or even the core baccalaureate curriculum, the way that mathematics, physics, chemistry, and biology do. Consequently, most computer users, even those who can’t live without Twitter, searching, and texting every other minute, have almost no concept of the basic ideas that drive the gadgetry they love so much. The author of this book aims to rectify that.
The book explores nine ingenious areas of computer science that are widely used by millions every day. In fact, one of MacCormick’s criteria for inclusion is just that: something used universally and constantly. He freely acknowledges that he uses the term “algorithm” in the title to refer to an area of computer science, such as cryptography, rather than to a single mathematical algorithm in the strictest sense. The list of topics includes search engines, indexing and page ranking, public key cryptography, error-correcting codes, pattern recognition, data compression, databases, digital signatures, and computability.
Underlying each of these areas is a handful of key concepts or ideas, and these ideas, rather than programming, make up the core of computer science. MacCormick’s goal is to describe these ideas in ways that render them accessible to an intelligent reader, even if the reader is totally unfamiliar with computer science or with mathematics above the grade-school level. MacCormick achieves this goal brilliantly: he uses analogies everyone can relate to, and exceptionally clear writing to describe concepts, ideas, and techniques that admittedly have been simplified but not beyond recognition. The result is that the reader can confidently feel the satisfaction of having a clear glimpse of what lies behind the magic at his fingertips.
Reluctantly, I admit having trouble accepting without qualms a term MacCormick uses ubiquitously: “trick.” As a matter of fact, he overuses that term to refer to every concept or technique that he describes. I can accept avoiding technical terminology and using catchy phrases instead. For example, MacCormick calls the “two-phase commit protocol” the “prepare then commit trick.” But I have trouble with the term “trick.” In the introduction, MacCormick tells the reader that the tricks he will be describing are not mean or deceitful, but rather clever techniques to accomplish goals that would be otherwise extremely difficult or impossible. Nevertheless, I simply could not ignore deeply rooted usage and the shady connotations that my thesaurus describes as follows: “trick implies cheating or deceiving, and often evil intention.” I think that MacCormick would not have sacrificed any vigor or vivacity in his writing if he had used instead a neutral phrase such as “key concept” or “clever idea.”
However, that does not prevent me from recommending this book very highly for the intelligent layman and as supplementary reading for courses in computer science, particularly computer science for liberal arts.