A dilemma facing the authors of introductory programming textbooks is whether there is a boundary between design and programming, and if so, which one to introduce first. Historically, programming is usually taught first. Even in modern computing curricula, an introduction to programming is typically a first course. Yet conceptually, design is so fundamental that some believe students ought to be exposed to it before programming. Another dilemma concerns the selection of programming concepts to introduce to beginners. Unlike “old” imperative languages, such as Fortran and Pascal, modern object-oriented languages and their integrated development environments (IDEs) provide a rich and complex set of features for a variety of application domains.
This book sets out to introduce beginners to object-oriented design, object-oriented programming using C#, and specialized applications. However, there seems to be some confusion here about what the task of programming means. One would assume that a programmer is someone who develops algorithms and implements them using a programming language.
The first four chapters provide a light overview of object-oriented concepts using the unified modeling language (UML). Various UML diagrams are shown, one after the other, suggesting the author expects a beginner to grasp the functionality and the subtleties of the UML notation from these diagrams. The usefulness of such a lesson is unclear. The following chapter gives a tour of the .NET framework and Visual Studio. The next four chapters cover C# concepts, such as classes, communication, overloading, abstract classes, derived classes, overriding, overloading, polymorphism, and much more. The exposition follows a typical pattern of showing a piece of code and providing a brief explanation of what the code accomplishes. Such a condensed introduction to these concepts could overwhelm even advanced programmers. Each of the remaining chapters covers a specialized area, such as interacting with SQL databases or developing Windows and web applications. Each chapter contains an activity section to give the reader hands-on experience. Far from being an active learning experience, this is largely a scripted exercise that constrains the user to a “do as I say” scenario. The first appendix presents an overview of C# data types and control structures. A second appendix briefly describes exceptions.
Even though the book is intended for beginners, its content is shallow and its exposition is largely focused on defining rather than explaining. Lumping basic and advanced topics together makes it hard for the reader to grasp the necessary gradual development of structure that facilitates the cognitive accomplishments of a beginner.