There is tremendous diversity in computer programming languages, and new languages are often created to solve new problems and fix old problems.
This course covers the basic concepts and design tradeoffs of programming languages. Examine different languages and compare their properties as well as the cost-benefits of different implementations. The first half of the course focuses on functions, types, scope, storage management, exceptions, and continuations. The second half covers object-oriented features and concurrency.