A variety of languages will be presented to demonstrate the range of features which can be found in modern programming languages. Students will develop programs in several languages to foster this understanding. Comparisons of features and their interactions with one another will also demonstrate the intricacies of language design. Students may be required to make an in-depth group study of a particular language. Formal and informal in-class writing and problem-solving exercises may also be required.

Goals and Objectives of the Course

Students who complete the course will be able to:

1. Describe the salient characteristics of several language paradigms (procedural, object-oriented, imperative, declarative/logic, functional), and write small programs in each paradigm.
2. Distinguish between syntactic issues and semantic issues in programming languages, use formal techniques (such as BNF) in the specification of language syntax and the construction of language parsers, and explain and modify code that assigns semantics to parse trees.
3. Describe, and discuss the effects of, different forms of variable binding, scoping, and lifetime.
4. Define type safety, static and dynamic typing, explicit and implicit type declarations and coercions, and function types; and describe their roles in program development.

Assessment Measures

The students will be given several programming assignments in a variety of languages. At least 1 in-class exam and the final exam will also be used to assess students' progress.