Programming language concepts and design, with emphasis on abstraction mechanisms. Topics include: language paradigms (procedural, object-oriented, functional and logic), language concepts (values, bindings, types, modules), and foundations (lambda calculus, denotational semantics). Examples will be drawn from several representative languages, such as C, Java, Standard ML and Prolog.