Giving a user a clean interface that allows them to do what they want and predicting what users want to do and doing it for them are both viable options in software design. Intelligent predictions can be very useful because they can speed things up, and in some cases they make it so the users do not necessarily be intelligent themselves. If someone who is not computer savvy wants to use a printer, it is best if they can just plug it in and have the driver download automatically so that it "just works". They may not be capable of finding a driver on their own. On the downside, when those predictions are not accurate, they can make for a painful experience when trying to undo the automated action and manually do what you were trying to accomplish in the first place. A well designed user interface has the advantage of giving the user complete control over what happens, but sometimes the users themselves don't know what they want to input. In a perfect world, I think accurate predictions would be the most useful way to get input if a computer could accurately and intelligently know exactly what you wanted to do every time you wanted to give it input. I would love to be able to look at a word document and have it format exactly the way I wanted it to without any extra effort on my part, but unfortunately it is not easy to predict what a user wants.
I think that it is most important to have a marriage between the two. Any automated system should have a good UI itself so that the user can control and undo any automated changes. One example of a poor automated system is the specific case of the letters ID being automatically changed to I'd when I send a text message on my Blackberry Curve. Personally, I think this is a poor choice in auto-correct, because I believe it is more confusing to ask for someone's I'd than to say Id like to grab some coffee. At the same time, the user interface surrounding the auto-correct itself is less than ideal. There is no clear and obvious way for me to undo the change. Being used to failed auto-corrects in other software, I knew enough to spell out a word longer than ID with ID in the front and then delete the extra letters to be left with ID, but other users might not know what to do, or they might even keep texting without even noticing. At the same time, the left and right scrolling on my wheel is inaccurate and an absolute pain to use. While this is through a mechanical defect and not by design, it still made the process of undoing an automated action even more painful, which is why any anticipation done in software should be surrounded by an intuitive UI that makes it easy for a user to pick and choose when they want to let the automatic system do its job.
An example of a great anticipation system is Visual Studio's Intellisense for the C# language. Intellisense predicts what function you are trying to type, and gives you the option to automatically fill in the rest of the function name. Also, if you have an object it will give you all of the functions available to that object, as well as tell you what the input and output types are and a small description of what the function does. Last summer I got together with a group of game developers, and we did a fun little project where we split into teams and programmed AI for a tank battle game, and then pitted our AI's against each other to see who's was the strongest. I showed up late the first week we did this, and consequently ended up on a group by myself. I had to code in C# without having any experience with C#, but the Intellisense was so good that I was able to start typing what I though I would do if I were using C++, and it would automatically tell me what it thought I should type. This was enough for me to get a working AI in C# within 30 minutes of hacking away with no C# experience. Intellisense didn't simply predict what I wanted to type, it also provided me with a simple user interface that allowed me to choose when I wanted it to automatically fill in the blank.
Ultimately, it comes down to a case by case decision that needs to be made by the developers. Some software may be better suited by concentrating efforts on a user interface while other software may be best served by an accurate artificial intelligence that can predict what the user would like to do. In most cases, there will not be a clean line to draw between how much effort gets put into each. The two should be complementary to each other in any way that makes the most sense when enhancing a user interface. Most importantly, in cases where software anticipates what the user wants, there should always be an intuitive user interface that allows the user to specify whether or not the automation is correct and undo any automatic changes.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment