Designed for courses in Computer Science or Computer Engineering, this comprehensive text introduces students to the primary constructs of contemporary programming language concepts and provides them with the tools necessary to critically analyze and assess existing and future programming languages. Programming Languages and Paradigms covers the four major programming paradigms as outlined in the ACM/IEEE Computer Science curriculum guidelines (imperative, functional, logical, and object-oriented) and presents each paradigm within two chapters. The first chapter covers the paradigm's focus language in detail and then investigates how this language answers the eight fundamental questions of language design. The second chapter provides a detailed treatment of the language's more advanced features and further includes coverage of other well-known languages of the paradigm. Most chapters end with a case study that provides students with a larger application to be solved using the target language for the paradigm. The organization of Programming Languages and Paradigms provides students with a good balance between practical, hands-on programming experience in the paradigm and the design issues associated with the paradigm, providing them with a solid foundation for understanding the fundamental concepts of programming languages. Key Features: * Covers the four major programming paradigms as outlined in the ACM/IEEE CS curriculum guidelines: imperative; functional; logical; and object-oriented. * Provides hands-on programming experience in each of the paradigms covered and utilizes a different target language for each: C for imperative, F# for functional, Prolog for logical, and C# for object-oriented. * Illustrates and discusses concurrency for each of the target languages at the time the language is introduced, enabling students to see a variety of mechanisms for implementing concurrency throughout the text. * Provides case studies that allow the student to solve complex problems in each paradigm. * Provides enrichment materials at the end of the book that introduce the Scala multi-paradigm programming language; tools for parallel computations such as OpenMP, MPI, and OpenCL; and programming language semantics.