Book Description
The modern computer is so powerful that a casual knowledge of programming suffices for most of its users. However, a variety of circumstances can abruptly require a much deeper understanding: the need to structure a program carefully to avoid being overwhelmed by its complexity, the need to insure reliability beyond what can be achieved by debugging, or the need to utilize computing resources efficiently. Beyond such practical considerations is an inherent intellectual satisfaction in mastering the fundamental concepts of programming. The aim of this book is to provide such mastery concept by concept.