Learning how to program
Muhammad Afzal Upal, Srinivas Padmanabhuni · 2003
Automated software engineering has long been a goal of artificial intelligence. There has been slow but steady progress towards understanding the processes underlying program synthesis and modification. One significant observation that came out of Richards and Waters (1986) Software Apprentice Project was that programmers repeatedly use certain program constructs or cliches to solve a variety of programming tasks. Richards developed Plan Description Language (PDL) to capture the association between various code fragments and the functional goals that they serve. Another development has been the understanding of the relationship between physical devices and programs. This understanding asserts that causal theories developed for reasoning with physical systems can be applied to reason with programs. This observation led to the development of debugging and program understanding tools. Here, we outline a framework for functional representation of programs which also allows us to automatically learn new programming constructs and to refine existing programs so as to achieve a more functionally complete program.