This course will define, analyze and evaluate important concepts found in current programming languages. Its goals are to build an ability to evaluate and compare programming languages, both from the user's and implementor's view. Topics include: syntax, operational semantics, scope of objects and time of binding, type checking, module mechanisms (e.g., blocks, procedures, coroutines), data abstraction, data types, expressions, control structures, subprograms, implementation of subprograms, functional programming, logic programming and object-oriented programming languages. This course includes a team project to learn a novel programming language and use it in implementing an application. Pre-req.: CMPS 347.