Course Information
- Course Number: EN.601.727
- Credits: 3
- Instructor: Ziyang Li
- Email: ziyang@cs.jhu.edu
- Time: Tuesday and Thursday 12:00pm - 1:15pm
- Location: Maryland 310
- Office Hours: Wednesday 2:00pm - 3:00pm, Zoom; also available by appointment through email
- TA: Feng Wang (Email: fwang60@jh.edu)
- TA Office Hours: Tuesday 3:30pm - 5:30pm, Malone 216
Course Description
Programs are the fundamental medium through which humans interact with computers. With the advent of large language models (LLMs), the automated synthesis of programs is rapidly transforming how we build software. Instead of manual code writing, we specify intent through examples, specifications, and natural language.
This course explores both the foundations and frontiers of program synthesis, covering traditional symbolic techniques alongside LLM-driven approaches. Students will study a variety of synthesis paradigms, including example-based, type- and specification-guided, and interactive methods. We will examine how LLMs are applied to general-purpose programming tasks as well as to specialized domains such as theorem proving, program repair, planning, and verification.
Throughout the course, students will gain exposure to a wide range of programming languages, from widely-used ones like Python and C, to emerging and domain-specific languages such as Rust, Lean, CodeQL, and PDDL. The course offers a research-oriented perspective combined with hands-on assignments and projects, providing students with both conceptual understanding and practical experience at the intersection of programming languages and machine learning.
Course Logistics
- We are going to use GradeScope for grading your programming assignments and final projects.
- Course discussion (questions, notes, announcements) are going to be made on Courselore.
Grading Rubrics
Students will be evaluated based on participation, assignments, a presentation, and a final project. Active engagement throughout the course is strongly encouraged, both in class discussions and in peer feedback. Exceptional oral presentation or final project may be rewarded with extra credit.
- (10%) Class participation and active discussion
- (10%) Oral presentation
- (15%) Assignment 1: Inductive Synthesis
- (15%) Assignment 2: Evaluating Coding LLMs
- (15%) Assignment 3: Coding Agents
- (35%) Final Project
Course Calendar
Week | Date | Topic / Event |
---|---|---|
1 | Aug 26 (Tue) | Overview & Introduction to Synthesis |
Aug 28 (Thu) | Syntax, Semantics, and Bottom-up Inductive Synthesis | |
2 | Sep 2 (Tue) | Type Systems and Top-down Enumerative Synthesis |
Sep 4 (Thu) | Functional Specifications and Synthesis | |
3 | Sep 9 (Tue) | Lecture (Language Model for Code: Prompting) |
Sep 11 (Thu) | Lecture (Iterative Refinement and Evolutionary Search) | |
4 | Sep 16 (Tue) | Lecture (Pre-training, Fine-tuning, and Reinforcement Learning for Program Synthesis) | [Assignment 1 Due] |
Sep 18 (Thu) | Lecture (Steering and Constraint Decoding) | |
5 | Sep 23 (Tue) | Lecture (Model Context Protocol & Language Server Protocol) |
Sep 25 (Thu) | Lecture (Agentic Programming Frameworks) | |
6 Testing |
Sep 30 (Tue) | Lecture |
Oct 2 (Thu) | Lecture | |
7 Software Engineering |
Oct 7 (Tue) | Lecture |
Oct 9 (Thu) | Lecture | |
8 Verification |
Oct 14 (Tue) | Lecture |
Oct 16 (Thu) | (Holiday, no class) | |
9 Logic Programming |
Oct 21 (Tue) | Lecture |
Oct 23 (Thu) | Lecture | |
10 Theorem Proving |
Oct 28 (Tue) | Lecture |
Oct 30 (Thu) | Lecture | |
11 Query Synthesis |
Nov 4 (Tue) | Lecture |
Nov 6 (Thu) | Lecture | |
12 Synthesis for Planning and Control |
Nov 11 (Tue) | Lecture |
Nov 13 (Thu) | Lecture | |
13 Reserved for advanced topics |
Nov 18 (Tue) | Lecture |
Nov 20 (Thu) | Lecture | |
14 | Nov 25 (Tue) | Thanksgiving (no class) |
Nov 27 (Thu) | Thanksgiving (no class) | |
15 Reserved for advanced topics |
Dec 2 (Tue) | TBD |
Dec 4 (Thu) | TBD |