This general textbook on programming languages is designed for undergraduate and beginning graduate students with some knowledge of basic programming. It teaches the concepts that appear in programming languages, issues that arise in their implementation, and the way that language design affects program development, with a special emphasis on object-oriented languages.