Rick, a member on on the C# team responded in the feedback section of another post. It was interesting enough that I thought i'd bring it up as a post. He wrote:
I'm a usability engineer that's been working on Visual Studio for the six years, so I've seen hundreds of people using Intellisense in the lab and their offices. As a result I have strong opinions about the feature. One thing that I always remind people to keep in mind is that people use intellisense for two things:
- Speeding up code that they know they are going to write.
- Browsing libraries and objects.
One interesting thing to watch is how people switch quickly from one to other, often every few seconds when they are really in the zone. Any changes that impede one of these uses at the expense of the other is going to be very frustrating.
Take, for example, the idea of filtering the list down to match substrings. This would work well for times when you are pretty sure you know what you are going to type. However, if you realize that what you thought you were going to type isn't actually in the list, you can't just use the arrow keys to scroll down through the list, you have to delete what you already typed to let the list expand back. At this point you are now thinking about how to use your tool instead of your program, and you get frustrated.
As people on the C# team know, I am very skittish about altering Intellisense because it seems easy to do more harm then good, especially when the feature works so well so much of the time due to it's simplicity and predictability.
In my opinion (which i haven't dicussed with Rick at all), this seems to give credence to the model where we have two lists. One list is designed to speed up your coding by intelligently filtering and ordering items to allow you to type less to get the results you want. The other list would contain all valid information and would exist so you could browse and examine objects. I feel that users could learn very quickly to press left/right to switch contexts between the two. I feel that would an extremely powerful system (Curse you VB!!). When you were 'in the zone' our intellisense would be optimizing for what you were likely to type and in most cases would allow you to only type 2-3 characters at a time which would then get completed out to entire scripts of code. However, when you were getting back some new object from some library you were unfamiliar with you would just hit 'right' and you'd be in "show me all mode". You could then check out the methods/properties/documentation for that object without us getting in the way by hiding things from you. By labelling the lists clearly (maybe something like: "all" and "common (43 elements filtered)") we could make this discoverable and understandable.