Provides a general overview of the state-of-the-art approaches to program synthesis, its applications, and subfields. The book discusses the general principles common to all modern synthesis approaches such as syntactic bias, oracle-guided inductive search, and optimization techniques.