The main topics of theoretical computer science are taught in most computer Science and engineering curricula, but are not presented as a foundation for omputer studies. Most courses—and their reference textbooks—are highly sed in their choice of topics. Very often they overemphasize traditional areas such as formal languages and automata—and pay little or no attention to yer important topics—such as formal semantics or computational complexity. The organization of this book results from our strongly held belief that oretical computer science should be viewed as the cornerstone of computer ence and engineering curricula. Computer specialists, in their everyday life, must be able to translate actual problems into abstractions based on the use of ormal models, to manipulate such formal descriptions, and to reason about their _ Properties in a rigorous way. This very special attitude differentiates the com- puter specialist from most other technical professionals. For these reasons, we suggest that an exposure to theoretical computer science topics should be given in the early stage of computer science education, particularly at the undergraduate level. Theoretical topics should not be viewed as options that can be added late in the curricula. Rather, they must be viewed as ee Wa Viieel oc