1. A computer-implemented method comprising: receiving, from a natural language interface system, a natural language task specification; converting said natural language task specification into a domain independent data flow graph, said domain independent data flow graph comprising one or more substeps; presenting said domain independent data flow graph via said natural language interface system as a natural language program; interactively refining, by said natural language interface system, said natural language program and correspondingly modifying said domain independent data flow graph; for each substep of said one or more substeps: selecting one or more candidate application programming interfaces from an application programming interface library, based on said substep; interactively narrowing, by said natural language interface system, said one or more candidate application programming interfaces to at least one selected application programming interface; implementing said substep by specifying one or more calls to said at least one selected application programming interface to yield a substep implementation; and appending said substep implementation to a result program.