This book makes my top-ten list of best computing books of the decade of the eighties. It certainly changed my outlook on how to write programs. The incorporation of logic into the code to mathematically prove that it works correctly was an ideal in the eighties and to some extent it remains an ideal. Nevertheless, that is not a reflection of the value of program correctness, but a consequence of the slow changes that sometimes take place in computing. Programmers may change their languages easily, but often not their styles.
At the time this book came out, I was in the process of designing and adding a course in computation theory with an emphasis on program correctness at Mount Mercy College. Before I encountered this book, I was having a difficult time pressing my case. However, after this book came out and I could use some of the comments regarding the significance of its' content, the course was easily approved. I also used the book in the class and the student comments were overwhelmingly positive. Ten years later, the book is still used in the class, something that is rare in computing.
The quality of the writing and explanations of the examples in the book are outstanding. Most of the students had no experience in formal logic, and yet they had little difficulty understanding and applying the concepts. The examples of proving the code correct were well chosen and I rarely heard any of the traditional complaints from math students regarding their frustrations over having to work through proofs.
The quality of programs would be dramatically increased if the principles of program correctness in this book were widely adopted. I continue to push for it every chance I get, and this review is one part of that push.