- Submit anonymous feedback at any time during the semester.
- FAQ: Can we have slides? We will experiment with slides and live typing during the next few lectures. Let us know what you think!
- FAQ: How does the course differ from previous years?
- The instructor is different (Nada Amin instead of Stephen Chong). However, the course will be similar to last year for content under evaluation. The teaching fellows have all taken Stephen Chong's version of the course, and they will help ensure some continuity. In the future, the class may be taught by either instructor.
- There will be some examples in lectures, and some optional homeworks (extra credit), with tools such as Coq and Dafny to cement understanding.
- Try the self assessment to help figure out whether you have sufficient mathematical preparation for this course.
This course is an introduction to the theory, design, and implementation of programming languages. Topics covered in this course include: formal semantics of programming languages (operational, axiomatic, denotational, and translational), type systems, higher-order functions and lambda calculus, laziness, continuations, dynamic types, monads, objects, modules, concurrency, and communication.
See the lecture schedule for more detailed information on topics covered.
- Instructor: Nada Amin
- Instructor (occasionally): Stephen Chong
- Instructor (occasionally): Yizhou Zhang
- Teaching Fellows:
- Michael Horton
- Teddy Liu
- Pratap Singh
- Garrett Tanzer
- Laura Zharmukhametova
Time and place
Tuesdays and Thursdays, 1:30pm-2:45pm, location Maxwell Dworkin G115.
Computer Science 51. Also recommended is Computer Science 121. Students must have good programming skills, be very comfortable with recursion, proofs, basic mathematical ideas and notations, including sets, relations, functions, and induction. See the schedule for some suggested background reading on some of these concepts. Feel free to contact the instructor if you have questions about the requirements or other aspects of the course.
Two points to emphasize: (1) this is not an introduction to programming; students should already know how to program, ideally in at least couple of languages. (2) you must be very comfortable with recursion, proofs, basic mathematical ideas and notations, including sets, relations, functions, and induction.
Try the self assessment to help figure out whether you have sufficient mathematical preparation for this course.
Homeworks, exams, and grading
There will be an in-class midterm and a final exam. There will be about 6 homework assignments. Some of the assignments will contain a programming component in OCaml, Coq and Haskell and some other languages. Prior knowledge of these languages is not required.
- Midterm: TBD. In class. Extension students may take online within a 24 hour window.
- Final exam: TBD. Extension students may take online within a 24 hour window.
- Homeworks: 6 assignments. Some will contain a programming component in OCaml, Coq, Haskell, and other languages. See the Schedule page for due dates, and the Assignments page for details of the assignments.
Your grade will be determined by a weighted average of your scores on homework assignments, the midterm exam, the final exam, and class participation. The percentage breakdown (roughly and subject to change) is 50% homework assignments, 20% midterm, 25% final exam, and 5% participation (which includes attendance and participation in class, section, and office hours, and contributing to online discussion).
There is no required textbook for the course. In most cases, the class materials should suffice. The instructor will provide written lecture notes where helpful.
See the Resources page for additional material that you can examine.
See here for more information.
Sections are held:
- Fridays 11am–12pm in Maxwell-Dworkin 323 (also livestreamed on Zoom)
- Weekly Coq section: Wednesdays 11:30am–12:30pm in Maxwell-Dworkin 323 (also livestreamed on Zoom)
Section attendance is not required. All sections in the same week will cover the same material. Sections will, for the most part, focus on worked examples and exercises to consolidate material covered in the previous week in class. You should feel free to come to section with questions. We will release practice problems a few days before section. More information can be found here.
Office hours will start as of Thursday February 6th.
We will use this Google calendar for office hour times:
See the Course Policies page for more information about course policies, including Diversity and Inclusion, Inclusive Learning and Accessibility, Mental Health, Financial Aid, Late minutes, Penalties, and Extensions, and Collaboration and Academic Integrity.