Second edition!! Check it out here!



The book is an introductory text on programming, intended for first year computer science undergraduates. (Hasn't that been done once or twice before? Yes, but this is the best. This one will change your life.)

The approach is object-oriented, sometime called "objects first." We believe there is considerable benefit in beginning with the same fundamental methodology we expect students to be using when they complete the curriculum. We find this creates much less difficulty than starting with a procedural approach and asking students to "shift paradigms" (apologies, Thomas Kuhn) after they've experienced some initial success.

With the conventional approach we've used in the past, students began by developing complete, self-contained solutions to simple, well-defined problems. This had the advantage of introducing fundamental algorithmic constructs and providing a grounding in the specifics of some programming language in a nicely confined context. The difficulty is that students find that these problems yield to an undisciplined, ad hoc approach. When later confronted with more substantial, less well-defined problems -- problems for which design issues involving complex structural relations between components must be effectively addressed -- they flounder, unwilling to abandon the "code now, think later" approach that has served them so well. (Well, sometimes they write sendmail, but most aren't so clever.)

While traditional introductory programming texts approach the subject in a syntax and example driven format, we stress design and the discipline needed for developing complex software systems. The emphasis throughout the book is on problem modeling, using fundamental software engineering principles and concepts. Object orientation is presented using the specify-design-implement-test cycle. It takes considerable experience, of course, to acquire real proficiency in the design and construction of software systems. We hope to develop a set of fundamental skills in constructing system components and to introduce a point of view regarding system design that will be as useful in the construction of large systems as it is in the design of small components.

 Information about the text, including table of contents, preface, and errata

 References to web resources


Fred Hosch
Last modified: Wed Nov 22 14:09:01 CST 2000