| Instructor | Dan Barowy |
| dbarowy@cs.williams.edu | |
| Phone | x2807 |
| Office | Thompson Chemistry Lab, room 307 |
| Lectures | Section 1: Tues & Thurs, 9:55am—11:10am Section 2: Tues & Thurs, 11:20am—12:35pm in Thompson Chemistry Lab, room 206 |
| Office Hours | Drop-ins Tuesdays, 1:30pm—2:30pm and Wednesdays, 10:00am—noon or by appointment in TCL 307 |
| Homework Help | Thursdays, 7:00pm—9:00pm in TCL 206 |
| TA Hours |
Mon 7—9pm Tue 7—11pm Wed 7—11pm Thu 7—9pm Fri 6—8pm |
| Teaching Assistants | Christopher AntonCole EricksonEli MecklerAbby MillerRyan PattonDzung Pham |
Although it may not seem like it at times, all programming languages are designed for humans, not for computers. As such, choosing the wrong language for the job can have a big effect on productivity. A language choice may also have important consequences for the quality and correctness of the resulting programs. A major goal of this course is to "get under the hood" of programming language design, enabling you to make informed choices about the appropriateness of a given language for a project.
By the end of this course you will appreciate why some programming language features encourage programs with desirable qualities while others lead to ambiguous or buggy code. You will also have a deeper understanding of how programming languages are compiled, what actually happens when a program is executed on a computer, and how the programming language design affects these issues. For example, by the end of the course, you should understand why developers flocked to Java from C/C++, and why even newer languages are now taking its place.
| Week | Date | Topic |
|---|---|---|
| 0 | 1/31 | Intro, Halting Problem |
| Lecture 1 slides, recording (campus only) | ||
| 1 | 2/6—2/8 | Lisp and Functional Programming |
| Lecture 2 slides, recording (campus only) | ||
| Lecture 3 slides, recording (campus only) | ||
| 2 | 2/13—2/15 | PL Foundations |
| Lecture 4 slides (updated: 2018-02-19), recording (campus only) | ||
| Lecture 5 slides, recording (campus only) | ||
| 3 | 2/20—2/22 | PL Foundations; ML |
| Lecture 6 slides, recording (campus only) | ||
| Lecture 7 slides, recording (campus only) | ||
| 4 | 2/27—3/1 | ML and types |
| Lecture 8 slides, recording (campus only) | ||
| Lecture 9 slides, recording (campus only; I only started recording halfway through class) | ||
| 5 | 3/6—3/8 | Stacks and Scope |
| Lecture 10 slides, (sorry, no recording; phone call interrupted recorder early into class!) | ||
| Lecture 11 slides, recording (campus only) | ||
| 6 | 3/13—3/15 | First-class functions; Midterm Exam |
| Lecture 12 slides, recording (campus only) | ||
| Midterm review session recording (campus only) | ||
| 7 | 4/3—4/5 | Exceptions; Continuations |
| Lecture 13 slides, recording (campus only) | ||
| Lecture 14 slides, recording (campus only) | ||
| 8 | 4/10—4/12 | Object-Oriented Programming |
| Lecture 15 slides, recording (campus only) | ||
| Lecture 16 slides, recording (campus only) | ||
| 9 | 4/19 | C |
| Lecture 17 slides, recording (campus only) | ||
| helloworld.c user-defined-function.c struct.c automatic-memory.c manual-memory.c | ||
| 10 | 4/24—4/26 | C++ |
| Lecture 18 slides, recording (campus only) | ||
| Lecture 19 slides, recording (campus only) | ||
| 11 | 5/1—5/3 | More Scala & Logic Programming |
| Lecture 20 slides, recording (campus only) | ||
| Lecture 21 slides, recording (campus only) | ||
| 12 | 5/8—5/10 | Domain-Specific Languages & Final Exam Review |
| Lecture 22 slides | ||
| Lecture 23 slides |
| Date | Number | Title |
|---|---|---|
| 1/31 | 1 | Syllabus (updated with TA hours) |
| 1/31 | 2 | Honor Code |
| 1/31 | 3 | Homework 0 |
| 1/31 | 4 | Homework 0 LaTeX template |
| 2/3 | 5 | Sample LaTeX document |
| 2/6 | 6 | Homework 1 |
| 2/6 | 7 | Lecture 2 activity (insert & tree encoding) |
| 2/8 | 8 | Lecture 3 activity (mapcar) |
| 2/13 | 9 | Homework 2 |
| 2/13 | 10 | Homework 0 solutions (in class only) |
| 2/13 | 11 | Lecture 4 activity 1 (more higher order functions) |
| 2/13 | 12 | Lecture 4 activity 2 (lambda calculus reductions) |
| 2/20 | 13 | Homework 3 |
| 2/20 | 14 | Homework 1 solutions (in class only) |
| 2/22 | 15 | Lecture 7 activity (pattern matching; fold) |
| 2/27 | 16 | Homework 4 |
| 3/6 | 17 | Homework 2 solutions (in class only) |
| 3/6 | 18 | Homework 3 solutions (in class only) |
| 3/6 | 19 | Homework 5 |
| 3/13 | 20 | Homework 4 solutions (in class only) |
| 4/3 | 21 | Homework 5 solutions (in class only) |
| 4/3 | 22 | Midterm exam solutions (in class only) |
| 4/3 | 23 | Homework 6 |
| 4/3 | n/a | ExprVisitor.java starter code |
| 4/10 | 24 | Homework 7 |
| 4/19 | 25 | Homework 6 solutions (in class only) |
| 4/19 | 26 | Homework 7 solutions (in class only) |
| 4/19 | 28 | Homework 8 |
| 5/1 | 29 | Homework 9 |
| 5/8 | 30 | Homework 8 solutions (in class only) |
Some of these articles may be assigned as part of homework. They may also be useful to you as a supplement to lectures and other reading. None of the readings listed on this page are required unless they are explicitly assigned in homework or in lecture.