I've been thinking about this one a lot; and I think it would take a paradigm shift (not to mention advances in AI on the scale of Star Trek) to allow programmers to be as productive orally as they are when writing.
For instance, in this simple code example, I'm actually saying a lot more than I'm typing:
List<Employee> ListOfEmployees = new List<Employee>();
foreach (Employee emp in ListOfEmployees) {
Console.WriteLine(emp.Name);
}
In that code block, I'm saying the following:
Create a generic list of employee
objects, initalize the employee object
to its default. After that, I want to
iterate through the employee objects
one at a time, and write each one's
name out to the console.
(I intentionally left out the code to assign the names to the employees -- for simplicity).
It was much faster for me to type out that code than it was to say what I wanted to do, and even if it weren't, there would have to be terms defined for the computer to translate my words into actual code. Not to mention that this is a very high-level language -- imagine what Perl (or C) would look like if spoken?