Principles of

Programming Languages

Upcoming deadlines


Course Number CMSC 245 (Spring 2019) at Haverford College
Instructor Kristopher Micinski
Teaching Assistants Jocelyn Dunkley
Myriam Benkoussa
Times Mon/Wed 12:45-2:15 Lecture Tu 10:30 / 12:30 Labs
Office Hours Mo/Wed after class and by appointment
TA Office Hours TBA


Have you ever asked yourself what principles underly programming languges? How to make an informed decision about which language to use? Why are some languages apparently faster than others?

These are the kinds of questions we’re going to answer in this class. Together, we’ll drill into how the computer executes programs, gradually pulling apart the complexities involved in turning your programs from a string of characters to operations performed by your processor.

To do this, we’ll learn languages at three different levels:

  • The low level (assembly): how the processor pushes around bits to perform the most basic of tasks (arithmetic, moving data, etc..)

  • The middle level (C++): how we can leverge low-level niceties (such as performance), but retain a structured language so we can scale our ideas to large software engineering tasks.

  • The high level (Scheme / Racket / Datalog): how we can strategically ignore the lower level facilties and focus on the high-level essence of the problems we want to solve.

The lower-level the language, the more complexity we’ll deal with (in terms of having to understand what the computer is doing). So an auxiliary benefit of this class is that you’ll have to learn more about how computers work. Once we understand what the computer’s doing at a low level, we’ll be able to exploit that understanding by writing highly efficient code. Dually, understanding concepts from higher-level languages will teach us how to build better abstractions. We’ll even get to the point where we’re extending the languages we use on a day-to-day basis and building new ones.

The goal of this course is to teach you both the nuts and bolts of languages and to help built intuition about programming paradigms in a broadly construed manner. When you’re done, you still won’t know every language out there. But we hope that you’ll be able to thoughtfully articulate why you choose the language you did, and have enough intuition to pick up new languages very quickly.

Course Structure

Please read the Syllabus for course information.