CS 334: Principles of Programming Languages

A programming language is a programmer's principle interface with the computer. As such, the choice of an appropriate language can make a large difference in a programmer's productivity. A major goal of this course is to present a comprehensive introduction to the principal features and overall design of both traditional and modern programming languages. You will examine language features both in isolation and in the context of more complete language descriptions.

Class Info

      Instructor:   Stephen Freund
Office: TPL 302
email: freund@cs.williams.edu
TAs:     Jenny Patel, Yanni Kakouris, Chris Pohlmann, Jeeyon Kang, Karolina Kotlarz, Aidan Housenbold
Office and TA Hours:   full schedule

Calendar


Solutions to homework assignments can be found in Glow.


Mon
Tue
Wed
Thu
Fri
02/02
02/03
02/04
Intro & Halting Problem
02/05
Claiming Williams Day
02/06
Lab: Setup & Tools
02/09
02/10
Lisp & Functional Programming
02/11
02/12
Lisp & Functional Programming
02/13
Winter Carnival
02/16
02/17
Running Programs and Grammars
02/18
02/19
Lambda Calculus
02/20
Lab: Higher-Order Functions
02/23
02/24
ML
02/25
02/26
ML
02/27
Lab: ML
03/02
03/03
Types
03/04
03/05
Type Inference
03/06
Lab: More ML
03/09
03/10
Scoping & Storage Management
03/11
03/12
Midterm 1
03/13
Lab: Types & Inference
03/16
03/17
Scoping & Storage Management
03/18
03/19
Control Flow And Exception Handling
03/20
03/23
03/24
Spring Break
03/25
03/26
Spring Break
03/27
03/30
03/31
Spring Break
04/01
04/02
Spring Break
04/03
04/06
04/07
Modularity, ADTs, and Objects
04/08
04/09
Smalltalk
04/10
Lab: Smalltalk
04/13
04/14
Object-Oriented Programming
04/15
04/16
Scala
04/17
Lab: Scala Basics
04/20
04/21
C++
04/22
04/23
C++
04/24
Lab: C++ / Scala OOP
04/27
04/28
Multiple Inheritance and Java
04/29
04/30
Midterm 2
05/01
05/04
05/05
Java and Scala
05/06
05/07
Concurrency
05/08
Lab: Concurrency
05/11
05/12
AI-Assisted Programming: Concepts & Tools
05/13
05/14
PL Meets AI / Course Wrap-up
05/15
Lab: AI Tools