The study of programming languages consists of designing language features that can support clear expression, facilitate special and specific purposes, and appropriately use those features for the clear expression of algorithms * This book explains the concepts underlying programming languages and shows how these concepts are synthesized in the major paradigms: imperative, object-oriented, concurrent, functional, logic, and scripting * Examines the genesis and purpose of programming languages-not just their features * Includes numerous examples, case studies of several major programming languages, and end-of-chapter exercises * The companion Web site provides sample solutions to most of the exercises