Concrete Abstractions: An Introduction to Computer Science Using Scheme
The book features thorough integration of theory and practice, and presents theory as an essential component of practice, rather than in contrast to it. Thus, students are introduced to the analytic tools they need to write effective and efficient programs, in the context of practical and concrete applications.
Significant programming projects are included that actively involve students in applying concepts. Each chapter ends with an application section, in which the concepts from that chapter are applied to a significant, interesting problem that involves both program design and modifying existing code.
The authors present development of object-oriented programming, one concept at a time. Each of the component concepts that constitute object-oriented programming (OOP) is introduced independently; they are then incrementally blended together.
In keeping with modern curricular recommendations, this book presents multiple programming paradigms: functional programming, assembly-language programming, and object-oriented programming–enabling the student to transition easily from Scheme to other programming languages.
The final chapter provides a transition from Scheme to Java. Providing this transition within a single book allows Java to be explained by comparison with Scheme, including showing an example program in both languages. Java also supports exploration of event-driven graphical user interfaces and concurrency.
In summary, this book is designed to introduce you to how computer scientists think and work. We assume that as a reader, you become actively involved in reading and that you like to play with things. We have provided a variety of activities that involve hands-on manipulation of concrete objects such as paper chains, numbered cards, and chocolate candy bars. The many programming exercises encourage you to experiment with the procedures and data structures we describe. And we have posed a number of problems that allow you to play with the abstract ideas we introduce.
Our major emphasis is on how computer scientists think, as opposed to what they think about. Our applications and examples are chosen to illustrate various problemsolving strategies, to introduce some of the major themes in the discipline, and to give you a good feel for the subject. We use sidebars to expand on various topics in computer science, to give some historical background, and to describe some of the ethical issues that arise.