Programming

An introduction to the design and implementation of programming languages from the design point of view, in this course the trainees study language features as tools for expressing algorithms.  From the implementation point of view, we will study compilers, interpreters, and virtual machines as tools to map those features efficiently onto modern computer hardware.  The courses in programming will touch on a wide variety of languages, both past and present, with an emphasis on modern imperative languages, such as C++ and Java, and, to a lesser extent, on functional languages such as Scheme and ML, and scripting languages such as Perl, Python, and Ruby.  Rather than dwell on the features of any particular language, we will focus instead on fundamental concepts, and on the differences between languages, the reasons for those differences, and the implications those differences have for language implementation.