We've organized the chapters of the book (and multimedia) into three major themes:

Breadth of Computer Science as a discipline

A narrow concentration on programming can lead to a misconception that computer science is little more than programming. There's more to astronomy than looking through telescopes: there's theory, such as relativity and cosmology, there's experimental method, and there's design of special-purpose instruments and probes. So there is more to computing than just programming: there's theory, such as the study of the limits of computation and the complexity of algorithms; there's the experimental method of programming and measuring the performance of programs; and there's the design of effective systems in software as well as hardware. Like older sciences and mathematics, computer science emphasizes abstraction, or pulling out the essentials. This book attempts to follow the recommendations of Computing Curricula 1991: Report of the ACM/IEEE-CS Joint Curriculum Task Force by introducing a breadth of knowledge areas: programming languages, architecture, operating systems and networks, theory of computation, social and ethical issues, and artificial intelligence.

Problem solving and software engineering

This theme emphasizes programming as systematic problem solving. Good programming and problem solving in general requires planning and organization. Early chapters examine and illustrate alternative approaches to problem solving, then gives students an opportunity to practice these approaches using a relatively simple, graphical programming environment called Knobby's World. Later chapters study the software life cycle and a modern, object-oriented approach to problem solving and software development. The theme of problem solving before programming gets reinforced in the chapters on C++ programming.

Programming in C++

Students learn to program in C++, a modern programming language widely used for developing large software systems. Because C++ (unlike other languages such as Pascal, BASIC or LOGO) was not intended as an instructional language, it can be rather daunting for beginners. This text therefore concentrates on a subset of this rich and complicated language, which we dub C++--. The multimedia also provides a tool called Lookout, which will "look out" for errors in student programs. By focusing on a subset of he language, Lookout can help students understand their errors; by pressing a function key, a student gets a more extensive explanation of an error message and what to do about it. (For those who really want to go beyond the C++-- subset, there are optional "Beyond C++--" sections at the end of each C++ chapter. The Lookout environment can also compile and run full C++ programs, bypassing the Lookout preprocessor.) The multimedia also integrates many programs that Lookout is ready to display, compile and execute to help students learn programming concepts, by observing and by doing. The Lookout programming environment comes with an editor (a modified version of Micro-Emacs) and a C++ compiler (the DJGPP implementation of the Free Software Foundation's gcc compiler), all on the CD-ROM. And Lookout also comes with a small library of software "classes" which will facilitate problem solving using simple graphical shapes, musical notes, external files, strings and arrays that catch "out of bounds" errors. The Lookout environment automatically links these classes into any program that needs them.

Click on a theme to see the table of contents associated with it.