This book presents a thorough survey of programming language concepts and constructs across major paradigms. It is intended for students and professionals who already have some programming experience and want to understand why languages are designed the way they are, as well as how different constructs relate across languages.