News for hackers. Stuff that matters.
Re:Holding a Program in One's Head (2007) by ehsanu1 on Saturday December 08, 2012 @03:39AM (#4891155)
I have one: natural language programming.

I have some ideas about how it would work, and have looked a little into how it might be implemented and have some seemingly feasible ideas there too. But I'm not an expert in either NLP or programming language development, so what do I know.

A good first step in this direction is the natural programming language for creating interactive fiction, Inform 7. The problem is that it's not general purpose. But you can try reading about it if you think natural language is too ambiguous to ever possibly be a programming language.

I want to write down all my thoughts about this idea, but I thought I'd get some more meat on it before I do that. Also, I haven't mentioned here why I think natural language programming can help, but I'll leave that to your imagination for now.

Re:Holding a Program in One's Head (2007) by sillysaurus on Saturday December 08, 2012 @05:58AM (#4891350)
I have one: natural language programming.

This exists. It's "Write each step of an algorithm in comments before writing any code, and (only when you're finished writing each step in English in comments) fill in the code each comment represents".

But it's impossible to convince anyone to try that, though, even though it gives all the benefits you are imagining NLP would give.

The mentality "Don't repeat yourself under any circumstances, even if it adds no complexity and increases clarity!" is unfortunately why this is undiscovered. Also, people generally go overboard with the "commenting" part -- the purpose is to be pseudocode in the way Python is executable pseudocode, while retaining the ambiguity that is necessary for natural language to be natural. So it gets a bad reputation, and its power is hidden despite it being powerful.

Re:Holding a Program in One's Head (2007) by tspike on Saturday December 08, 2012 @04:09PM (#4892702)
The closest experience I've had to this is using RSpec and Capybara to do test-driven development.

Here's an actual snippet of a test I wrote before writing the corresponding code for an app that's now in production:

  describe "adding participants" do                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
    context "when user has created a new event" do
      before :each do
        visit root_path
        click_link 'Get Started'
        fill_in 'Name', :with => 'Tres'
        fill_in 'E-mail', :with => '[email protected]'
        click_button 'Next'
      end
    
      it "should prompt for more participant info" do
        page.should have_field 'Name'
        page.should have_field 'E-mail'
        page.should have_button 'Add Participant'
      end
    
      it "shouldn't let you enter an invalid e-mail" do
        fill_in 'Name', :with => 'Tres'
        fill_in 'E-mail', :with => '#)(*)($*#)($*'
        click_button 'Add Participant'
        page.should have_content 'invalid'
      end
    end
  end
It's been an absolute joy to work this way. I'd love to see this level of abstraction make its way into the mainstream in other languages and environments.
Re:Holding a Program in One's Head (2007) by JBiserkov on Saturday December 08, 2012 @07:03AM (#4891449)
Some Lispers have been doing something similar for some time. There's even a saying that "Any sufficiently well-documented Lisp program contains an ML program in its comments."
Re:Holding a Program in One's Head (2007) by klibertp on Saturday December 08, 2012 @11:03AM (#4891848)
Literate Programming - another 30 years old "technology". And it's good. As you say, the problem is not the tools, but rather mentality of rediscovering the wheel at best, and staying ignorant to the history of our field at worst.
Re:Holding a Program in One's Head (2007) by btilly on Saturday December 08, 2012 @11:49AM (#4891974)
I have been known to do that. It is great for writing an initial block of code.

It doesn't work so well 6 months later when you're editing that code.

Re:Holding a Program in One's Head (2007) by ippisl on Saturday December 08, 2012 @03:55AM (#4891181)
One way to solve the ambiguity problem of natural languages is using a controlled natural language, which is a limited subset of a natural language[1]. Some of those are machine transformable to logic. There's even some work to encode legal knowledge using them.

[1]http://en.wikipedia.org/wiki/Controlled_natural_language

Re:Holding a Program in One's Head (2007) by ehsanu1 on Saturday December 08, 2012 @04:12AM (#4891207)
Thanks, interesting! Not mentioned on that page, but a notable natural language which is similar in its goals is Lojban [1]. It's actually based on predicate language, which is actually what Inform 7 uses as well in order to derive the actual meaning from natural language sentences. It manages this because it is based on a limited subset of English.

But I'll note that we humans manage to understand each other just fine without resorting to a controlled natural language. We solve the ambiguity problem basically by taking the most likely interpretation of a given sentence, given the context, or asking questions if too confused. And in fact, there are natural language parsers out there that can predict the mostly like parse reasonably well for single sentences.

The biggest problem here is that programmers like having full control of what's going on, whereas this sort of idea brings in a large dose of unpredictability: how will the parser interpret this sentence? I think this can be solved to some extent by having the parser tell you what it parsed in less ambiguous terms. In fact, you might ask the parser to present a normalized version of the code that is more specific about exactly what's going on (and probably more verbose), and also expanding out phrases to show you exactly what they mean for debugging purposes. Also, when a clear parse cannot be made, the parser can simply ask you to clarify, presenting the multiple parses that it could not decide between.

[1] http://en.wikipedia.org/wiki/Lojban

Re:Holding a Program in One's Head (2007) by pfeyz on Saturday December 08, 2012 @09:18AM (#4891627)
I'd just like to point out that Lojban is a constructed language, not a natural language. It was designed and built from the ground up, as opposed to the GP's controlled natural languages which are pre-existing human languages with a bunch of stuff stripped out of them.
Re:Holding a Program in One's Head (2007) by dualogy on Saturday December 08, 2012 @04:19AM (#4891218)
This is so cool. Follow-up question:

> There's even some work to encode legal knowledge using them

Where do I learn more about this? What's the name of that language, or research project, or...?

Re:Holding a Program in One's Head (2007) by ippisl on Saturday December 08, 2012 @05:27AM (#4891317)
i just did a google search for : "controlled natural language" legal , and got some results.
Re:Holding a Program in One's Head (2007) by sb on Saturday December 08, 2012 @10:18AM (#4891760)
Hm, I have never really thought about NLP, but I guess maintaining an NLP program somebody else has written must be even more of a nightmare than what we have now...