The dream of automatically synthesising programs from their specifications is a long-term objective of artificial intelligence. For a long time deemed impractical, modern ap- proaches based on machine learning technologies, and large language models in particular (such as Copilot and ChatGPT) are evidence that program synthesis will soon be a reality.
This tutorial focusses on the key methodological principles for leveraging machine learning techniques for program synthesis, not restricting ourselves to large language models. We will argue that the challenges arising from this endeavour are at the intersection of programming languages, software engineering, and machine learning.