John MacCormick's new book, Nine Algorithms That Changed the Future: The Ingenious Ideas That Drive Today's Computers, is very good. You should buy it and read it.
Which is what this book does. It starts from the premise that people love computers and what they can do but don't have much of an idea about what goes on inside the little black box. And then, what MacCormick does is take nine general types of high level functions that computer perform and explain first what those functions really mean and second a general idea of how software developers have approached solving the initial problems.
Those general problem/function areas are each treated in a separate chapter: search engine indexing, pagerank, public key cryptography, error-correcting codes, pattern recognition, data compression, databases, digital signitures and computability. As you can see, the title is a bit misleading. It's not strictly nine separate and distinct algorithms that are examined but more nine problem areas in computer science and the sets of algorithms that are used to solve the problems in that domain. But of course, that's a much less interesting title!
I have a computer science degree and out of interest and my necessity of my subject liaison responsibilities, I've followed the field fairly close over the years. As a result, quite a bit of the book is kind of old news for me. I am fairly familiar with problems under discussion and the general approaches that computer scientists take. So my evaluation of MacCormick's explanations is a little coloured by my own background.
Overall, MacCormick does a decent job of explaining the algorithm with a nice mix of words and pictures. Sometimes the words seemed to trip over themselves, getting a little eye-glazing trying to explain something mathematical using an only approximate metaphor. Sometimes the pictures were a little cluttered. I think he was afraid to use flow charts or pseudocode, fearing that they would be too techy and alienating. That may be true, but the downside was a bit of wordiness and a kind of conceptual fog in trying to get very abstract notions across in words.
But that's a quibble. Mostly MacCormick hits the right level. What kind of technology background do you need to get the most out of this book? I think it would be helpful to have a bit of an appreciation and knowledge base of computing; that will definitely help to make it all the way through. A lot of people might find it a bit tough to grasp the entirety of each chapter so some skimming might be in order. This book might be a tough slog at times for people with really no knowledge or background. But definitely worth the effort to get a least the basics from each chapter.
On the other hand, this is the perfect book for someone that's interested in computing but wants to get a better appreciation of what it's all about before maybe committing to a career. With a little mental elbow grease you can take your knowledge of computing to the next level. In other words, smart and nerdy college and high school kids are the perfect audience. (See my son's review, he fits that description perfectly).
As for people like myself who already have a pretty good background, this is a fun read that will really stretch and deepen your appreciation of computing. Pretty well anyone generally interested in science and technology would find something here worth reading.
This is a valuable addition to the popular computing literature. I would definitely recommend it for any university computer science collection, both for computing students and for those that are just interested. Larger public library systems would probably also benefit, especially for branches located near high schools. As for high schools, this is definitely the kind of book that could make a huge difference in the life of a young man or woman who's wavering about a career in computing.
MacCormick, John. Nine Algorithms That Changed the Future: The Ingenious Ideas That Drive Today's Computers. Princeton: Princeton University Press, 2011. 219pp. ISBN-13: 978-0691147147
(Review copy provided by publisher.)