Programming languages exist to communicate with computers and also with people. A good language, like a good mathematical notation, helps us to formulate and communicate ideas more quickly. Yet there are many programming languages and many features to understand in each. Reflecting current trends where object-oriented (OO) programming has taken over from imperative programming as the dominant paradigm, this book gives greatest prominence to the OO paradigm using Java and C++ as the main exemplar languages. Similarly, since the Web has revolutionized the computing industry, the need for examination of scripting languages, such as Perl and Python, has risen. With additional case study languages including Python, Haskell, Prolog and Ada, 'Programming Language Design Concepts' deepens study by examining the motivation of programming languages rather than just their features.