The paperback copy of this book that I received had a beautiful picture-in-picture view of a rainbow on the cover. This actually reminded me of the complex issues programmers face when writing programs. Perhaps the author chose this cover because she has a similar perception.
The book packs more information into its 240 pages than most 500-page computer books. It has smaller print and an almost-nonexistent fog index. There are plenty of conceptual examples to learn. The pedagogy is designed to fit the self-study framework.
The author claims that it is “intended for both readers with minimal computer science background and experienced computer science researchers and practitioners.” However, I would not recommend this book to anyone with minimal computer science background because they might find it discouraging. I would however recommend it to serious undergraduate and first-year graduate students in computer science who have a serious intention to learn the fundamentals of program design. They would benefit the most from the systematic method explained throughout the book.
Liu is a distinguished scholar and accomplished educator. The book reflects how much she pays attention to detail. As an experienced programmer and educator, I have to admit, I felt deep enjoyment while reading this book. It was a pleasant experience.
The book has seven chapters, followed by an index and list of references. The index is succinct and comprehensive. The reference list includes 333 entries to dissertations, books, and journal and conference papers. This alone would be quite useful to people who are not experts in the field.
The interested reader should read the preface and introduction, followed by the last chapter, “Conclusions.” This would give an excellent panoramic view of the book. More experienced readers can then pick and choose from the middle chapters according to their level of interest. These middle chapters are “Loops: Incrementalize,” “Sets: Incrementalize and Implement,” “Recursion: Iterate and Incrementalize,” “Rules: Iterate, Incrementalize, and Implement,” and “Objects: Incrementalize Across Module Abstraction.” A less experienced reader should read and study all these chapters. Although they can be studied in almost any order, I would read them linearly.
In conclusion, the author succinctly and correctly describes the nature of this book in her preface: “The book is about a general and systematic method for designing and developing computer algorithms and programs by transforming clear specifications into efficient implementations.” I can add nothing to this explanation except to say that it is well done.