Recently AI has proved it can beat expert humans at all perfect information games. Go has a ridiculously huge search space, but by using neural networks AIs can learn to narrow it down to a manageable size.
Program synthesis is just like a perfect information game. You have a search space, a state, a set of goals, etc. You could theoretically make it into a board game, and have human experts challenge computers at it.
But not actually. Program synthesis is hard even if you have perfect formal requirements. In practice, gathering formal requirements is by far the most difficult task. You're probably better off building a system using modern development practices than trying to collect formal requirements Let alone translating those requirements into code, which is easier than coming up with the requirements but still difficult.
> Recently AI has proved...
FYI, it's not as if the program synthesis folks haven't heard of neural nets... you're giving researchers who actually do this stuff all day surprisingly little credit.
I mean yes good program synthesis wouldn't replace programmers on it's own. But it would radically change how programming is done and make our lives much easier.
I'm just saying that AI is a quickly advancing field and predictions like "not in 20 years" have been defied months later. Applying deep reinforcement learning to tasks like game playing is relatively novel, and has only really started to succeed in the last 2 years.
Past a certain point the structure of a space is what matters which dictates how well any given search strategy will perform, and that doesn't readily generalize across domains.
I have not seen anything that would lead me to believe that results like AlphaGo will meaningfully generalize to such an extent. I still think that it would take more than just incremental work to get from where we are now to scalable program synthesis.
• Current methods to generate programs fundamentally do not scale. Most practical research is about how to extend small-scale synthesis systems to large-scale problems, rather than synthesizing large programs outright.
• The best way to scale these systems is to make them more interactive. Let the programmer do what's easy for humans and use synthesis for the parts easy to automate. This is another way of saying that program synthesis is less about fully automatic programming and more about (radically) better development tools.
I am confident that we will not have automatic programming systems that can handle non-trivial programs by themselves in the next 10/20 years, barring the sort of paradigm-shifting breakthroughs we can't really predict. Instead, we will have systems that can generate some amount of code and work in tandem with programmers—perhaps through sketching[1], programming by demonstration or just much-improved Intellisense.
The current trajectory is that programming is to become easier, not obsolete. The result will not be fewer programmers but more programmers, largely because people with less expertise will be able to become programmers: think Jevons Paradox[2] for programming.
Programming as a job will change and people will certainly have to adapt, but the job as a whole is not going anywhere.
[1]: https://people.csail.mit.edu/asolar/papers/thesis.pdf
[2]: https://en.wikipedia.org/wiki/Jevons_paradox