Johns Hopkins University — Fall 2025

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

Add the course schedule to your calendar:

Google Calendar Outlook Download .ics
Week Date Topic / Event
Module 1: Programming Languages and Synthesis
1 Aug 26 (Tue)Overview & Introduction to Machine Programming
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
Module 2: Coding Large Language Models
3 Sep 9 (Tue)Language Modeling for Synthesis
Sep 11 (Thu)Decoding and Prompting for Synthesis
4 Sep 16 (Tue)Iterative Refinement with Feedback | [Assignment 1 Due]
Sep 18 (Thu)Controlled Decoding for Synthesis
5 Sep 23 (Tue)Agentic Frameworks for Programming (1)
Sep 25 (Thu)(Skipped)
6 Sep 30 (Tue)Agentic Frameworks for Programming (2)
Oct 2 (Thu)Agentic Frameworks for Programming (3) | [Assignment 2 Due] (Oct 5)
7 Oct 7 (Tue)Pre-training of Coding LLMs (1): Architecture and Dataset
Oct 9 (Thu)Pre-training of Coding LLMs (2): Learning and Evaluation
8 Oct 14 (Tue)Post-training of Coding LLMs: Fine-tuning and Reinforcement Learning
Oct 16 (Thu)(Holiday, no class)
Module 3: Applications of Machine Programming
9 Oct 21 (Tue)LLM for Software Analysis: Dynamic Analysis
Oct 23 (Thu)LLM for Software Analysis: Static Analysis | [Assignment 3 Due]
10 Oct 28 (Tue)LLM for Software Security
Oct 30 (Thu)Programming Languages for Software Security
11 Nov 4 (Tue)Oral Presentations: LLM Adaptation
Nov 6 (Thu)Oral Presentations: Agentic and Multi-Agent Systems
12 Nov 11 (Tue)Oral Presentations: LLM for Planning and Cyber-Physical Systems
Nov 13 (Thu)Oral Presentations: Long-Horizon and Evolutionary Program Synthesis
13 Nov 18 (Tue)Oral Presentations: LLM for Software Engineering
Nov 20 (Thu)Oral Presentations: LLM for Formal Logic, Math, and Theorem Proving
14 Nov 25 (Tue)Thanksgiving (no class)
Nov 27 (Thu)Thanksgiving (no class)
15 Dec 2 (Tue)TBD
Dec 4 (Thu)TBD