I’m a PhD student in Computer Science at Stanford. My goal is to develop ways to interact with computers where the burden of specifying what to do is split between the user and the machine.
Programming Languages are very powerful, and one of their defining features is the lack of ambiguity: given a program, there’s only one way for the computer to interpret it. While that makes it easier to develop compilers and tools, programmers are usually frustrated because the computer executed what they wrote, but not what they meant.
Other interfaces, such as GUIs or even domain-specific languages, trade expressivity for ease of use. But just like programming languages, there’s no ambiguity involved: given that the user clicked a button, the computer executes the corresponding action - the responsibility of clicking the right buttons is again entirely on the user.
However, that’s not at all similar to how humans collaborate and communicate. We assume peer humans to have tons of prior knowledge, to reason about context, and to ask questions when they don’t understand. Because of that, we can often get away with giving extremely ambiguous instructions, and still be understood. We can ask “give me the pills”, and not worry about the billions of pills that exist in the world. My goal is to bring these features to the way we instruct and program computers.