Credits and contact hours: 4 Credits. Lectures two times a week, 75 minutes each. One weekly recitation, 50 minutes.
Instructor's or course coordinator's name: Bor-Yuh Evan Chang
Text book, title, author, and year: "Essentials of Programming Languages, Third Edition." Daniel P. Friedman and Mitchell Wand. 2008.
Other supplemental materials:
- "Principles and Practice in Programming Languages: A Project-Based Course." Course Notes. Bor-Yuh Evan Chang. 2014.
- "Programming in Scala, Second Edition." Martin Odersky, Lex Spoon, and Bill Venners. 2011.
Specific Course Information
Brief Description of the Content of the Course (Catalog Description)
The course covers many aspects of using, understanding, and reasoning about programming languages (e.g., syntax, scoping, induction, data types, and typing). We will build up a set of mathematical tools for careful discourse. A significant part is devoted to abstraction, that is, how languages help programming in the large (e.g., subtyping polymorphism, parametric polymorphism, modules, and objects).
Prerequisites or Co-requisites
CSCI 2270 (Computer Science 2: Data Structures) and CSCI 2824 (Discrete Mathematics).
Indicate Whether a Required, Elective, or Selected Slective (as per Table 5-1) Course in the Program
Specific Goals for the Course
Specific Outcomes of Instruction
The student will be able to learn new languages quickly and select a suitable one for your task.
The student will gain new ways of viewing computation and approaching algorithmic problems.
The student will gain new ways of viewing programs.
The student will gain insight into avoiding mistakes for when you design languages.
Explicitly Indicate Which of the Student Outcomes Listed in Criterion 3 or Any Other Outcomes are Addressed by Course
- Apply Knowledge
- Communicate Effectively
- Analyze Impacts
- Professional Development
- Current Techniques
- Design Tradeoffs
- Brief List of Topics to be Covered
Here are the major categories of portfolio material students consider in making their individual plans for the course:
- Data structures and pattern matching
- Inductive definitions
- Syntax: context-free grammars
- Variable scoping and binding
- Expression evaluation
- Big-step and small-step operational semantics
- Static versus dynamic scoping
- Higher-order programming
- Static type checking
- Imperative programming: mutable variables and pointers
- Procedural abstraction: parameter passing
- Object-oriented programming: dynamic dispatch, subtyping versus subclassing