Concrete Abstractions :An Introduction to Computer Science Using Scheme
At first glance, the title of this book is an oxymoron. After all, the term abstraction refers to an idea or general description, divorced from physical objects. On the other hand, something is concrete when it is a particular object, perhaps something that we can manipulate with our hands and look at with our eyes. Yet we often deal with concrete abstractions, and so this book will introduce several abstract ideas in as concrete a way as possible. As the reader become familiar and comfortable with these ideas, they will begin to think of the abstractions as actual concrete objects. It is this way of thinking, that makes computer science can be referred as the discipline of concrete abstractions.
This book offers the students a hands-on, abstraction-based experience of thinking like a computer scientist. It covers the basics of programming and data structures, and gives first-time computer science students the opportunity to not only write programs, but to prove theorems and analyze algorithms as well. Students learn a variety of programming styles, including functional programming, assembly-language programming, and object-oriented programming (OOP). While most of the book uses the Scheme programming language, Java is introduced at the end as a second example of an OOP system and to demonstrate concepts of concurrent programming.