As we progress through this book, we shall encounter a number of important unifying principles. We alert the reader to two of these here: 1. Design algebras. In certain fields in which the underlying models have become well understood, we can develop notations in which design trade-offs can be expressed and evaluated. Through this understanding, we can develop a theory of design with which well-engineered systems can be constructed. Propositional logic, with the associated notation called Boolean algebra .


With it, we can design efficient circuits for subsystems of the kind found in digital computers. Other examples of algebras found in this book are the algebra of sets in Chapter 7, the algebra of relations in Chapter 8, and the algebra of regular expressions in Chapter 10.


COMPUTER SCIENCE: THE MECHANIZATION OF ABSTRACTION 2. Recursion is such a useful technique for defining concepts and solving problems that it deserves special mention. We discuss recursion in detail in Chapter 2 and use it throughout the rest of the book. Whenever we need to define an object precisely or whenever we need to solve a problem, we should always ask, “What does the recursive solution look like?” Frequently that solution has a simplicity and efficiency that makes it the method of choice.