This course is about principles, concepts, and ideas that underlie programming languages. The course is purely conceptual aimed at making the student familiar with the general concepts common to all programming languages so as to facilitate learning new languages. The main topics of this course include a comparative study of programming language features, an introduction to programming language design and implementation, and an introduction to the theory of formal languages.