  Our goal is to build systems which write code automatically from the kinds of
specifications humans can most easily provide, such as examples and natural
language instruction. The key idea of this work is that a flexible combination
of pattern recognition and explicit reasoning can be used to solve these
complex programming problems. We propose a method for dynamically integrating
these types of information. Our novel intermediate representation and training
algorithm allow a program synthesis system to learn, without direct
supervision, when to rely on pattern recognition and when to perform symbolic
search. Our model matches the memorization and generalization performance of
neural synthesis and symbolic search, respectively, and achieves
state-of-the-art performance on a dataset of simple English description-to-code
programming problems.
