The goal of this course is to help students: 1. learn new languages quickly, 2. evaluate various languages and pick the most suitable one for a given task, 3. know when and how to design a little language, and 4. understand the effects of languages on thought and communication. We will study programming language concepts, not as paradigms but as a set of basic building blocks, by 1) implementing interpreters for the concepts using the Scala programming language and 2) rigorously discussing the concepts using the operational semantics.
What you'll learn
gain proficiency in multiple programming languages
develop skills to design a simple programming language
learn how to evaluate programming languages for different tasks
understand the impact of programming languages on communication