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.

Syllabus

Class Info

      Instructor:   Stephen Freund
Office: TPL 302
email: freund@cs.williams.edu
TAs:     Levi Borevitz, Rijul Jain, Carolyn Jones, Trang Ngo, Joanna Tan, Ruby Teklemariam
Office and TA Hours:   full schedule

Calendar


Solutions to homework assignments can be found in Glow.


Mon
Tue
Wed
Thu
Fri
01/30
01/31
02/01
Intro & Halting Problem
02/02
02/03
02/06
02/07
Lisp & Functional Programming
02/08
02/09
Lisp & Functional Programming
02/10
02/13
02/14
Fundamentals
02/15
02/16
Fundamentals
02/17
02/20
02/21
ML
02/22
02/23
ML
02/24
02/27
02/28
Types
03/01
03/02
Type Inference
03/03
03/06
03/07
Scoping & Storage Management
03/08
03/09
Scoping & Storage Management
03/10
03/13
03/14
Control Flow And Exception Handling
03/15
03/16
Modularity, ADTs, and Objects
03/17
03/20
03/21
Spring Break
03/22
03/23
Spring Break
03/24
03/27
03/28
Spring Break
03/29
03/30
Spring Break
03/31
04/03
04/04
Smalltalk
04/05
04/06
Midterm
04/07
04/10
04/11
Object-Oriented Programming
04/12
04/13
Scala
04/14
04/17
04/18
C++
04/19
04/20
C++
04/21
04/24
04/25
Multiple Inheritance and Java
04/26
04/27
Java and Scala
04/28
05/01
05/02
Concurrency
05/03
05/04
Concurrency
05/05
05/08
05/09
Security
05/10
05/11
Security, Wrap Up, SCS Forms
05/12