Home | People | Curriculum | Projects | Resources | Media

CMSC 245: Principles of Programming Languages

Instructors: David Wonnacott and John Dougherty

Semester & Year: Fall 2015

Schedule: (attendance is a requirement of the course unless marked "optional")

Required Texts:

Also Recommended:

Requirements: Midterm and Final exam, programming projects, 'mini-homework' assignments, participation in in-class exercises and 'interactive grading' meetings. Timely participation in scheduling activities at the start of the course is required to remain in the course.

Collaboration: You are encouraged to discuss the lecture material and the weekly labs and problems with other students, subject to the following restriction: your memory should be the only "product" of any discussion about a lab assignment - you may not write up solutions together, or exchange written work or computer files pertaining to labs (except when a lab calls for cooperation, of course).

Collaboration is not allowed on exams.

Prerequisites: CMSC 106 (or 206 at Bryn Mawr) or permission of instructor. NOTE: Concurrent enrollment in this and two other CMSC lab courses requires permission of the instructor, confirmed in writing/email before the end of the first week of classes.

Information Sources: Information that is expected to stay relatively stable over several years and be relevant to everyone in the course, such as course content prerequisites, is listed on this web page. Other information can be found on:

Description: This course will introduce many of the principles of programming language design and implementation. We will discuss numerous features of several programming languages and the algorithms and data structures that are needed to provide these features. Labs and homework will cover both the use of various features and high-level understanding the algorithms and data structures involved in their implementation. CMSC 350, Compiler Design, provides more in-depth information about many of these algorithms and data structures through labs covering their application to a single simple language.

CMSC 245 lectures (and labs) will include examples (and exercises) in C++, the Scheme dialect of Lisp, and HERA assembly language. No prior knowledge of C++, Scheme, HERA is needed for this course, but students should be familiar with the programming techniques from CMSC 105/ 106 (e.g. creation of classes and functions/methods in Python (or some other language), and confidence with basic uses of both the pure functional and imperative views of functions and data).

CMSC 245 should include as many of the following topics as we can cover:

Graded lab assignments (listed below, along with other scheduling information) will be interspersed with "mini homework" and in-class group programming (which are graded only on participation):

Haverford College Page maintained by John Dougherty, David Wonnacott, and Rachel Heaton.
Computer Science Department, Haverford College.