By describing practical stories, explaining the design & programming process in detail, & using projects as a learning context, the author helps readers understand why a given technique is required & why techniques must be combined to overcome the challenges facing software developers.