A study of the fundamental principles underlying the design of programming languages. Students will study two or more languages from contrasting programming paradigms such as Functional, Object-Oriented, Logical, or Concurrent.