I find this really interesting because not only does it find programs which solve tasks, it captures some basic intuitions of human software development:
- Having the right library of reusable components makes it easier to solve new problems.
- We find reusable components by abstracting out patterns (not merely subexpressions) from existing code.
- Even before we begin seriously searching for a solution to a specific problem, good programmers have an intuition about what a solution must look like, which strongly informs how we find that solution.
It's also interesting to think through what programming might look like in several years if research like this matures into common tooling. Then it seems the work of getting computers to do new things will consist in:
- specifying the domain-specific likelihood model
- specifying the structure of the recognition model
- creating and refining task definitions by selecting and growing sets of examples
- Having the right library of reusable components makes it easier to solve new problems.
- We find reusable components by abstracting out patterns (not merely subexpressions) from existing code.
- Even before we begin seriously searching for a solution to a specific problem, good programmers have an intuition about what a solution must look like, which strongly informs how we find that solution.
It's also interesting to think through what programming might look like in several years if research like this matures into common tooling. Then it seems the work of getting computers to do new things will consist in:
- specifying the domain-specific likelihood model
- specifying the structure of the recognition model
- creating and refining task definitions by selecting and growing sets of examples
- curriculum design
- combining components from different domains