This book goes beyond syntax to explicitly define and illustrate high-level design concepts. It provides a solid understanding of control flow, ADTs (objects), memory, type relationships, and dynamic behavior, while promoting modern software design options independent of a particular programming language or tool. It compares and contrasts C# and C++ design solutions, explains how to evaluate the short- and long-term costs and benefits of various design choices, and offers extensive code examples, supportive appendices, and a glossary of over 200 common terms.