This book treats learning a programming language much like learning a spoken language: programming is best learned by immersion. Through building interesting programs and addressing real design issues much earlier than other texts, this title moves beyond the mere syntax and discusses the serious architecture of programs: how delegation and inheritance allow objects to cooperate effectively. The text is filled with programs for realistic applications. These programs are much closer to those the student will encounter in the 'real world' than those in traditional texts. Furthermore, the authors constantly revise the programs as they grow in sophistication so students learn another important aspect of real-world programming: that programs are constantly updated, modified and improved. Finally, in the exercises, the authors encourage students to write programs that interact with programs that they have prepared, and then ask them to write about those programs.