Program Synthesis is the problem of automatically discovering a syntactically-correct program that fits a high-level specification. Contemporary algorithms use symbolic techniques for pruning the search space of programs and discovering program parameters that satisfy a requirement in a time-efficient manner. We will explore different techniques from automated logical reasoning and formal methods that are used in academic research by reading a number of papers to solve the synthesis problem. This group is aimed at those with little-to-no experience in program synthesis but are motivated to learn more.