anmol wrote:
I think that natural language thingie will be a BIG deal. Imagine a CEO shouting at a Perceptive Pixel screen.. "kinect tell me which one these, in branch a with title b I can fire today." This will be pretty useful
Welcome to the 1980's.
Let me elaborate on my latest hate speech. Anyone who has dabbled even a bit in programming languages knows about natural language programming.
http://en.wikipedia.org/wiki/Fifth-gene ... g_language
The point is not that you can program in natural language (you could do that in the 80's) but people who repeatedly go down that path make the same mistake. Let me give you a clue. Go to google.com type "when is the sunset in new delhi" Look at the answer and marvel. The issue with natural language programming (natural language information retrieval is a subset of that) is the problem that it is not verifiable. You can say "take salary column, increase it by 15% and send out checks", the program might take the employee id, increase it by 15% and give out random salaries to people.

In programming it is called semantic binding. The relationship between the words you type on the screen and the actual operations that are performed. Semantic binding which is clear to the person reading (and writing it) and to the software that processes it, is critical for effective programming. For example you can write if (x > 0) z = y/x and you know exactly what will happen and the software knows exactly what to do. Most bugs happen because the intention of the programmer was not translated correctly to code. Faith and readability of the program also goes down if you cannot understand the intention from the code.
If you make semantic binding flaky, it turns out that the complexity or programs you can write reliably goes way way down. So smart minds have actually done the opposite thing -- derive natural language explanation from programs (rather than programs from natural language comments) to form comments! (refer to Knuth's CWEB). This is useful in "nudging" novices to write code they want and to document the code. Turns out that the number of non-programmers that flaky semantic binding can enable (say for example allowing you to program using sentences that might mean different things based on different contexts and different data you have) is not worth the trouble of flaky behavior it enables. That is why even in normal programming languages, people go to the direction of being orthogonal and context free*. And that is why programing languages are still cryptic to the layman after so many years.
There are a subset of applications (where you dont care much about the precision of answers) where this type of natural language programming is effective. To me the most exciting is facebook graph search. If you want to apply to companies that do databases, you can say "Companies my friends work for" or events you want to attend, you can say "events in april liked by people who are engineers who also like operating systems". And see a bunch of results. That is the kind of querying (where the advantage is that you can now retrieve information which was "locked in", you dont care that you retrieved all information or even the correct information!) where natural language programming proves most useful for.
I am sure M$ will find a way to put it into excel, I am also sure they will advertise it. I am also sure 0 people will use it. This is the same rabbit hole 5GPL went down, started the whole field of formal methods and verification, and later found that the pain of veryfying 5GPL was as hard if not harder than writing a program in procedural, declarative or functional way!
Long story short, it is cheaper, effective and more reliable for a CEO to give that sheet to a programmer and ask him who to fire.
But what the hell? Post more M$ videos for us to see.
* x = y means the same thing in all contexts in C++ -- it is assignment operation. take value y, assign it to x -- even if you say if (x = y). It woud simply assign y to x and say true. you might think "which idiot designed this language? Can you see I said a "if". Why do you think I want to assign? I want to compare!". There is a good reason for that -- the reason is because if you start enabling context-specific meaning -- for example if (x = y) means is x equal to y? and x = y is assignment otherwise, you will have complicated set of rules about what each "phrase" means in the programming language depending on other words, sentences and phrases that surround it. Making operations contest sensitive is tempting because "sounds" intuitive and easy at first, but quickly goes down the pakistan when you write larger and larger programs. Suddenly you are not sure what it does anymore. Same thing with natural language programming, where each "phrase" could have a meaning in different "context" where the context is the data it is handling or the phrases it is surrounded by.