While I was searching the web recently for information on Kalman filter algorithms related to a recent Embedded.com newsletter, the Google search engine notified me that the third edition of “Algorithmics, The Spirit of Computing” by David Harel was now available in ebook form.
It’s about time I purchased a replacement for the first edition of this seminal 1988 book, which I bought in the early 1990s. I have read and reread it often, dipping into it on an as-needed basis to see what Harel had to say about the way engineers and software developers need to think about conceiving algorithms for execution on computers.
But by choosing to read the book in that way, I violated Dr. Harel’s advice on how to get the most use out of what he has written: “This book is intended to be read sequentially, not to be used as a reference. It is organized so that each chapter depends on the previous ones….”
By reading it in bits and pieces, it has taken me almost 20 years to read and reread the book more or less completely. I admit it’s not the most efficient way to read it. But despite that it has been enormously useful in gaining insights and understanding into specific topics. And there has also been a bonus – it often triggers a number of interesting and surprising cross-fertilizing insights into apparently unrelated topics.
An example of this cross-fertilization happened recently as I was rereading another book, “Proust was a neuroscientist,” by Jonah Leher, just after dipping into Harel’s Algorithmics for the nth time. Leher’s thesis is that recent scientific discoveries about how our brains work were anticipated by insights from writers, painters, poets, novelists, musical composers, and chefs.
They may not have known the underlying reasons for what they had discovered through observation, but they knew enough to know it when they saw it (like the U.S. Supreme Court and pornography ), and to make use of that knowledge.
Leher details how the great French chef Escoffier in the early twentieth century discovered the essence of “deliciousness” – that quality of taste beyond the basic sweet, sour, salty, etc., that makes food taste good. We now know that secret ingredient as L- glutamine, but before it was identified, named and described by scientists, Escoffier figured out its behavior and made it do his bidding, detailing the results in his masterpiece on cooking: “Le guide culinaire” – a still popular book on haute cuisine 100 years after it was first written.
What interested me was that the Escoffier’s basic structure of the recipes (algorithms?) were not all that different than the ones you see in most of the cookbooks I have in my kitchen and online at such sites as “Cooking for Engineers.”
What was different from most of those cookbooks, though, was that Escoffier did for recipes what most books on good programming and algorithm development tell you to do: he documented his basic “code” with detailed comments on the nuances of preparation. Reading one of his recipes in a copy of his book I accessed on Google Books, I noticed the extravagant detail with which he described the process of creation.
So here was another cross-connection – Escoffier was doing what software pioneer David Knuth tells program developers to do in “The Art of Computer Programming”: “Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do.”
Escoffier follows Knuth’s advice to the letter, even though when you read one of his detailed commentaries about a recipe you will find it full of terminology that to the modern eye is remarkably fuzzy and open to interpretation. But Escoffier wrote his book with a specific audience of “food programmers” in mind: other French and European chefs. And those fuzzy words in the context of late 19th and early 20th century haute cuisine had very specific “technical” meanings which made it clear to his readers exactly how to successfully recreate a specific recipe.
From descriptions of the new edition of Harel’s book (coauthored with Yishai Feldman ), it seems to have a lot of new material on the process of “cooking up” new computer algorithms in the context of software engineering, reactive systems, the object-oriented paradigm, and system verification and validation, amongst other topics – all relevant to what is going on now in embedded systems design. I expect to also learn a lot from new material that has been added on programming languages.
This time around, I’ve made a resolution to read Harel’s Algorithmics the way he said to – linearly from end to end. Maybe it won’t take me 20 years this time.
I look forward to the insights into software development it will provide and the opportunities for further cross-fertilization it will generate. With my luck, though, the fourth edition of this classic will begin rolling off the presses and I will have to buy a new copy and start reading it all over again.