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
Office Hours:     Monday 2:30 - 4:00 and Wednesday 2:30 - 3:30
email: freund@cs.williams.edu
TAs:     Enoch Chou, Carter Melnick, Petros Markopoulos, Lucas Tolley, Catherine Yeh
Slack Workspace:     cs334-f21.slack.com

TAs

TA hours will be held in TCL 312.

You can also explore tutor resources using TutorTrac.

Calendar


Solutions to homework assignments can be found in Glow.


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