This course is not about programming. However, you will become a significantly better programmer for having completed it. The course introduces the issues surrounding the design and implementation of programming languages rather than their use. Mostly, we will use Racket to implement interpreters for a variety of languages (including various subsets of Racket itself). Because you will be writing interpreters that support the various features, you will come to intimately understand issues such as scope, lazy and eager evaluation, recursion, mutation, continuations, types, polymorphism, and much more.
As with most courses that are worth taking, this course requires your engagement with and participation in the learning process. Plan for it. This engagement will primarily take the form of reading about language issues that will be unfamiliar and abstract for most of you. That is, you will be required to read the text; start your readings and assignments early. If you are unfamiliar with Racket, you may find the exercises challenging. I encourage you to spend the necessary effort during the first two weeks to become proficient with the Racket programming language. If you work the examples as you go through the text, your assignments will be manageable. You will typically be completing one small programming assignment every other week.
plai-typedlanguage. Follow the instructions found on Matthew Flatt's GitHub page. You can either install from within DrRacket or from the commandline.