Slides and solutions
Survey of programming language features and paradigms, with a focus on how to effectively use them. Introduces common features for structuring program execution, data, and resource management. Exploration of programming paradigms including imperative, functional, object-oriented, and declarative paradigms, as well as advanced techniques such as metaprogramming. Students will gain programming experience in large projects that incorporate these paradigms and techniques.
See the syllabus for all the details.
| Day | # | Topic and Readings in Notes | Deadline |
|---|---|---|---|
| Foundations | |||
| Mon 5 Jan | No Class | ||
| Wed 7 Jan | L01 | Introduction 1 2 | |
| Fri 9 Jan | Lab 01 | No Class - Lab 1 Asynchronous | |
| Mon 12 Jan | L02 | Basic Elements | |
| Wed 14 Jan | L03 | Scheme | |
| Fri 16 Jan | Lab 02 | Python, Scheme, and Value/Reference Semantics | |
| Mon 19 Jan | No Class - MLK Day | ||
| Wed 21 Jan | L04 | Grammars |
Project 1
Wed 1/21 8pm |
| Fri 23 Jan | Lab 03 | Scheme and Grammars | |
| Mon 26 Jan | L05 | Names and Environments | |
| Wed 28 Jan | L06 | Control Flow |
HW1
Wed 1/28 8pm |
| Fri 30 Jan | Lab 04 | Scoping, Parsing in Scheme, and Exceptions | |
| Functional Programming | |||
| Mon 2 Feb | L07 | Functions and Recursion 1 2 | |
| Wed 4 Feb | L08 | Higher-Order Functions |
Project 2 Checkpoint
Wed 2/4 8pm |
| Fri 6 Feb | Lab 05 | Functions | |
| Mon 9 Feb | L09 | Lambdas | |
| Wed 11 Feb | L10 | Continuations |
Project 2
Wed 2/11 8pm |
| Fri 13 Feb | Lab 06 | Generators and Lambdas | |
| Data Abstraction | |||
| Mon 16 Feb | L11 | Memory Management | |
| Wed 18 Feb | L12 | Functional Data Abstraction |
HW2
Wed 2/18 8pm |
| Fri 20 Feb | Lab 07 | Functional Data Abstraction and Memory Management | |
| Midterm | |||
| Mon 23 Feb | Midterm Exam |
Midterm
Mon 2/23 7pm |
|
| Special Topics | |||
| Wed 25 Feb | Program Analysis | ||
| Fri 27 Feb | No Class - Spring Break | ||
| Mon 2 Mar | No Class - Spring Break | ||
| Wed 4 Mar | No Class - Spring Break | ||
| Fri 6 Mar | No Class - Spring Break | ||
| Data Abstraction | |||
| Mon 9 Mar | L13 | Object-Oriented Programming | |
| Wed 11 Mar | L14 | Inheritance and Polymorphism |
Project 3 Checkpoint
Wed 3/11 8pm |
| Fri 13 Mar | Lab 08 | Object-Oriented Programming and Vtables | |
| Mon 16 Mar | L15 | Static and Dynamic Typing 1 2 |
Project 3
Mon 3/16 8pm |
| Wed 18 Mar | L16 | Generics and Modules 1 2 | |
| Fri 20 Mar | Lab 09 | Generics and Project 4 Overview | |
| Mon 23 Mar | L17 | Modules and Design Patterns | |
| Concurrent Programming | |||
| Wed 25 Mar | L18 | Parallel Computing |
Project 4 Checkpoint
Wed 3/25 8pm |
| Fri 27 Mar | Lab 10 | Design Patterns and uC | |
| Mon 30 Mar | L19 | Asynchronous Tasks | |
| Metaprogramming | |||
| Wed 1 Apr | L20 | Macros and Code Generation |
Project 4
Wed 4/1 8pm |
| Fri 3 Apr | Lab 11 | Asynchronous Tasks, Macros, and Project 5 Overview | |
| Mon 6 Apr | L21 | Template Metaprogramming | |
| Wed 8 Apr | L22 | Template Metaprogramming II |
HW3
Wed 4/8 8pm |
| Fri 10 Apr | Lab 12 | Template Metaprogramming | |
| Declarative Programming | |||
| Mon 13 Apr | L23 | Logic Programming |
Project 5 Checkpoint
Mon 4/13 8pm |
| Wed 15 Apr | L24 | Constraints, Dependencies, and Matching 1 2 | |
| Fri 17 Apr | Lab 13 | Logic Programming and Exam Review | |
| Special Topics | |||
| Mon 20 Apr | TBD |
Project 5
Mon 4/20 8pm |
|
| Final Exam | |||
| Wed 22 Apr | No Class - End of Semester | ||
| Fri 24 Apr | No Class - End of Semester | ||
| Mon 27 Apr | Final Exam |
Final
Mon 4/27 1:30pm |
|