Johns Hopkins University — Fall 2026

Course Information

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

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.

  1. (10%) Class participation and active discussion
  2. (10%) Oral presentation
  3. (15%) Assignment 1: Inductive Synthesis
  4. (15%) Assignment 2: Evaluating Coding LLMs
  5. (15%) Assignment 3: Coding Agents
  6. (35%) Final Project

Course Calendar

Week Date Topic / Event
Module 1: Programming Languages and Synthesis
1 Sep 1 (Tue)Overview & Introduction to Machine Programming
Sep 3 (Thu)Syntax, Semantics, and Bottom-up Inductive Synthesis
2 Sep 8 (Tue)Type Systems and Top-down Enumerative Synthesis
Sep 10 (Thu)Functional Specifications and Synthesis
Module 2: Coding Large Language Models
3 Sep 15 (Tue)Language Modeling for Synthesis
Sep 17 (Thu)Decoding and Prompting for Synthesis
4 Sep 22 (Tue)Iterative Refinement with Feedback
Sep 24 (Thu)Controlled Decoding for Synthesis
5 Sep 29 (Tue)Agentic Frameworks for Programming (1)
Oct 1 (Thu)Agentic Frameworks for Programming (2)
6 Oct 6 (Tue)Agentic Frameworks for Programming (3)
Oct 8 (Thu)Pre-training of Coding LLMs (1): Architecture and Dataset
7 Oct 13 (Tue)Pre-training of Coding LLMs (2): Learning and Evaluation
Oct 15 (Thu)Post-training of Coding LLMs: Fine-tuning and Reinforcement Learning
Module 3: Applications of Machine Programming
8 Oct 20 (Tue)LLM for Software Analysis: Dynamic Analysis
Oct 22 (Thu)(Fall break, no class — date TBD)
9 Oct 27 (Tue)LLM for Software Analysis: Static Analysis
Oct 29 (Thu)LLM for Software Security
10 Nov 3 (Tue)Programming Languages for Software Security
Nov 5 (Thu)Oral Presentations (1)
11 Nov 10 (Tue)Oral Presentations (2)
Nov 12 (Thu)Oral Presentations (3)
12 Nov 17 (Tue)Oral Presentations (4)
Nov 19 (Thu)Oral Presentations (5)
13 Nov 24 (Tue)Fall recess (no class)
Nov 26 (Thu)Thanksgiving (no class)
14 Dec 1 (Tue)Oral Presentations (6)
Dec 3 (Thu)Special Topic: Neurosymbolic Programming
15 Dec 8 (Tue)Special Topic: Synthesizing Diverse DSLs
Dec 10 (Thu)TBD
Final Presentation Session
TBDFinal Presentation Session (during the final exam period, Dec 15–23)

Past Versions

Policy

Auditing: Students are welcome to audit this course, whether formally (registered as an auditor) or informally (simply sitting in on lectures). Auditing students are welcome to join the course on Courselore and GradeScope, and to take part in discussions and the assignments. If you would like to audit, please send the instructor an email at ziyang@cs.jhu.edu.