Draw a circle.
Color it red.
Make it smaller.
No, 5% bigger.
Make the radius 5 units.
Refining specifications like that seems like the holy grail of movements like aspect-oriented programming, NLP or no. Separating concerns is a really good thing. circle = Circle(); // default origin, radius, color, etc.
circle.set_visible(true)
circle.color = RED
circle.make_smaller()
circle.set_radius(5)
// or whatever. just saying we can do approximately this already today, in most any modern language, as long as you're willing to express it in the prog language rather than the natural language. And I'm not sure having it expressed in a natural language is better in any significant way.And get rid of the set_visible.
"I have to say that something I thought would be a big issue is the vagueness of natural language. That one particular natural language input might equally well refer to many different precise programs.
"And I had imagined it would be a routine thing to have to generate test examples for the user in order to be able to choose between different possible programs.
"But in reality this seems to be quite rare: there is usually an “obvious” interpretation, that in typical Wolfram|Alpha style, one can put first—with the less obvious interpretations a click away."
When those things matter, more information will be required in both natural language and a high level programming language. On the other hand, when none of that really matters a high level programming language still requires all those items to be specified.
Like any level of abstraction, there are tradeoffs. On the other hand to explain how to submit a reply, I don't say:
<form method="post" action="/r">
<input type="hidden" name="fnid" value="7YwrNY6bwe"/>
<textarea name="text" rows="6" cols="60"/>
<br/>
<br/>
<input type="submit" value="reply"/>
</form>
I say "press the button."edit: html example to fit natural language model.
http://www.wolframalpha.com/input/?i=draw+a+green+filled+red...
* http://images.google.com/images?q=enso
(The results for "bring me some delicious pho" are similarly unsatisfactory - it just tells me that delicious means "greatly pleasing or entertaining". Not news to me, pal!)
The inherent problem with NLP is that human languages are imprecise and ambiguous. For an example of the problems with NLP, try using Wolfram Alpha. While it returns useful results for many queries, as soon as you start off the beaten path it can become an exercise in frustration as you try to figure out exactly which format of words it will accept, especially as I know the mathematica command that would accomplish the desired goal (or can look it up quickly).
Obviously Alpha isn't the end-game of NLP and improvements can be made to accept more constructions. But ultimately, you're going to have to restrict yourself to a subset of your natural language's syntax, grammar and vocabulary, and I believe that learning what that subset is is far more difficult and frustrating than just learning a programming language.
Furthermore, merely knowing a NL programming language isn't enough to be a programmer--you still need to learn how to think logically and algorithmically, which seems to be the hard part for people new to programming.