Lectures and Details


Tuesday/Thursday, Searles 223, 2:50 – 4:15


Michael L. Scott's Programming Language Pragmatics

Videos from Westley Weimer's Introduction to Programming Languages via Udacity (free)

Course Staff

Westley Weimer, OH Searles 224, Tuesdays 11:00am-11:30 (as CS Faculty Meeting ends), 12:00-1:00pm, and by appointment (including via Zoom)

Jared Joyce, Learning Assistant, OH Searles 224, Mondays/Wednesdays 8:00pm-9:00pm


Principles of Programming Languages (CSCI 2320) will acquaint you with the fundamental ideas surrounding the design and implementation of high-level programming languages. The course will stress underlying theoretical concepts as well as a significant, practical course project. At the same time, the course will focus on making this material accessible to students of varied backgrounds.

Students will gain experience with functional and object-oriented programming via the OCaml and Cool programming languages. In addition, students may complete assignments using the Python, Ruby, JavaScript, or Haskell languages. The Assignments and final project in this course lead to the construction of an interpreter for a subset of Java. This involves scanning, parsing, type-checking and interpreting code. You will master concepts such as context-free grammars, variable bindings, control flow, types, subtyping, and method invocation.

Project and Assignments

The course project consists of five Programming Assignments. Taken together, the assignments form a complete interpreter for Cool, the Classroom Object-Oriented Language. The project components are assigned in roughly increasing order of size and difficulty; proportionately more time is allotted for the later assignments. Later assignments will be weighted more heavily in the final grade.

Programs will be evaluated for correctness, organization, and documentation.

Assignments may be done individually or in teams of two. The first assignment must be done individually, however. Teamwork imposes burdens of communication and coordination, but has the benefits of more thoughtful designs and cleaner programs. Team programming is also the norm in the professional world.

Students on a team are expected to participate equally in the effort and to be thoroughly familiar with all aspects of the joint work. Both members bear full responsibility for the completion of assignments. Partners turn in one solution for each Assignment; each member receives the same grade for the assignment. If a partnership is not going well, speak with the instructor.

Assignments are due at 11:50pm on the date in the course schedule. Programming Assignments will be turned in electronically via a special submission server.

Course Programming Languages

Three programming languages are required as part of this course:

In addition, three additional optional languages are available and you may use them to complete programming assignments.

Review Sets

There are seven Review Sets provided for this course. These Review Sets are not graded assignments, and are instead provided as a structured system for students to evaluate their mastery of the material and prepare for written examinations. The instructor will be happy to go over Review Set answers during office hours.


This course features two midterm examinations and may contain a final examination. The midterms will be take home.

The exams are open-note by default. It may not be possible to give late or make-up exams: please plan accordingly.


The relative weight of the components of your grade will be approximately:

  • 5% Programming Assignment I
  • 8% Programming Assignment II
  • 10% Programming Assignment III
  • 12% Programming Assignment IV
  • 15% Programming Assignment V
  • 15% Midterm Examination I
  • 15% Midterm Examination II
  • 15% Final Examination
  • 5% Reading Quizzes & Participation

The course may be curved — but it will only be curved upward. We never reduce your grade.

We follow the Bowdoin Academic Honor Code. You should know that fairly sophisticated plagiarism detection software may be used on the Assignments; cheating on an assignment or exam typically results in a score of 0 for it as well as a score of 0 for the entire course.

Regrade and Late Policy

An assignment turned in h hours late has its point value reduced by h%. Thus if you turn in a Assignment at 8am the next day (i.e., 8 hours late) your grade for that assignment will be multiplied by 0.92.

Each student has three late-day tokens for programming submissions. Each token allows you to submit an assignment 24 hours after its hard deadline. These are "no questions asked" grace days — you do not have to explain to me what the reason is or talk about any issues unless you want to.

Regrades for exams, Assignments, or written assignments must be received within one week of you receiving your score. All regrade requests should be made to the instructor. When we regrade an assignment we will look over it very carefully for correctness: it is possible that after a regrade you will end up with fewer points than before the regrade.

All course materials submitted for a grade must be turned in by the last date marked on the course syllabus.


Your class work might be used for research purposes. For example, we may use anonymized student assignments to design algorithms or build tools to help programmers. (If you're curious about how anonymized student data has led to research advances in the past, ask on the forum!) Any student who wishes to opt out can contact the instructor to do so after final grades have been issued. This has no impact on your grade in any manner.

Students interested in considering undergraduate research should make an appointment to talk about it. While I am not in a position to supervise Bowdoin students directly, I can talk about approaching other professors and help assess potential research or thesis ideas. I am also happy to discuss graduate school.

Additional References

You may find the following additional resources helpful: