This course will introduce fundamental concepts and paradigms underlying the design of modern programming languages. For concreteness, we study the details of an object-oriented language (e.g. Java, C#, C++), a functional language (e.g. Scheme), and get introduced to multiparadigm languages (e.g. Python, Scala). The overall goal is to enable comparison and evaluation of existing languages. The programming assignments will largely be coded in Java and in Racket (formerly, Scheme) and optionally in Python or Scala.
College of Engineering and Computer Science