Case Study: Visual C

For a specific example, let's consider Microsoft Visual C++ version 5.0, an application many Windows programmers know and love. On the whole, I believe it's an excellent application. Following are lists of what I like and dislike about it. Making such lists in response to various programs will help you set goals for your own user interfaces.

Likes

  • Visual C++ has successfully integrated what used to be several individual programs, including a compiler, an editor, a debugger, a resource editor, online help, Microsoft Developer Network (MSDN), and source-code control. Having all these tools available in one application is a great convenience. I also like the ability to seamlessly integrate third-party tools, such as other source-code control systems and debugging tools.
  • The AppWizard and Class wizards are extremely useful and help eliminate having to write and maintain boilerplate code.
  • The Visual C++ environment makes routine tasks simple, often by providing direct manipulation. I especially like the ability to view variable values using tooltips, the ability to drag and drop text from an editor window to the Watch window, and the ability to lay out the toolbars by directly moving, dragging, and sizing the toolbar controls.
  • The environment is highly configurable. I can configure the size and location of the Workspace and Output windows. I can also configure just about every detail of the toolbars, which I use all the time.
  • Visual C++ can display a variety of document formats. Although I normally use it to edit C++ text and Windows resources, I especially appreciate the ability to edit and view HTML files. The syntax-coloring feature works well with HTML files because it clearly indicates syntax errors. The hex dump window is also convenient.
  • The compiler performance is excellent. I also like the incremental linking and intelligent rebuilding that doesn't recompile files unless it is necessary.
  • Visual C++ has a powerful debugging environment that gives you the ability to trace into DLLs, the MFC source, and even inline functions. I also like the just-in-time debugging ability.
  • There are many more features that I have not even used, such as a configurable keyboard map, custom AppWizards, and macros. The product has amazing depth.
  • The basic online help included with Visual C++ is awesome. If you need more information, the MSDN help files are available.
  • Given all this functionality, the Visual C++ menus and dialog boxes are relatively easy to figure out.

Dislikes

  • Visual C++ routinely rearranges my toolbars whenever I minimize the application while debugging, and the result is never what I would like. Believe it or not, this rather small item bothers me more than anything else about the program, since it seems to happen to me all the time.
  • The paste function has a tendency to paste the two last items cut, instead of just the last one.
  • Unlike normal text files, you can edit a resource file even if it or any of its dependent files are read-only. Read-only file attributes are a common occurrence when using source-code control. This can mean that either you lose your work or—as in the case where the resource file is writable but the header file isn't—your resource can become corrupted.
  • Project settings, options, and customizations are spread across three dialog boxes and two menus. I always seem to choose the wrong menu the first time and have a lot of difficulty finding the setting I want to change.
  • You cannot save project or program settings to a file. (OK, you can save the project settings to a makefile, but this isn't what I want to do.) If I could save the settings, I could compare different projects to determine whether they have consistent settings and, after finding any problems, restore the settings that were changed accidentally. There are other ways to accomplish this goal, but it would be handy to have some convenient way to manage settings, especially across projects.
  • Although I can easily install MSDN into Visual C++, I can't easily uninstall it. No matter what I do to remove MSDN, the Visual C++ help system insists on accessing the MSDN CD-ROMs. The only way I can completely remove MSDN is to uninstall and reinstall Visual C++ and reset all my settings. Not good.
  • Visual C++ often remembers my previous input but often forgets it as well. For example, when I create a dialog box with the ClassWizard, I usually save it to files named "dialog.cpp" and "dialog.h," yet the wizard always attempts to save them to files named after the class name, thereby forcing me to change the filenames. This can be very irritating after a few hundred times—a good user interface should adapt to the user. A history list of previous input would be useful in such situations.
  • The text windows have the full pathnames in the window captions. While this is normally useful, it is a problem when the windows are minimized and the default directory is different from the file's path. In this case, instead of captions like "Myfile.txt," all the captions become something like "C:\…\Folder…," which is next to useless. I can view the full file path using tooltips, but that feature doesn't seem to work well. I think it would be more useful if the caption included only the filename when a window is minimized.
  • If you change a file and then give the Go command, Visual C++ asks whether you want to rebuild before running. If you select Yes but the rebuild fails, the old version of the program is run without any notification. This results in debugging the wrong code, which is a huge waste of time. It would be better if the program didn't run when the build failed.
  • For some reason, you can't toggle between decimal and hexadecimal displays from the Quick Watch window, but you can from the Watch window. I find this inconvenient.
  • I find it too difficult to change the name of a file and even more difficult to change the name of a project.
  • Although the resource editor is nice enough to automatically assign resource IDs, it would be an improvement if there were a way to keep the IDs contiguous as the resources are maintained. For example, the MFC message map macros ON_COMMAND_RANGE and ON_UPDATE_COMMAND_UI_RANGE are easier to use with contiguous IDs.

What I find most interesting about the lists above is that the bad items are rather trivial when compared to the good items. This is typical of a good program. Of course, the fact that the bad items are minor makes them no less irritating. Details matter! A program could have the most awesome features in the world, but if it has many minor user interface problems, users are going to find the program aggravating. You could take any good program and come up with lists similar to mine—what is important is the overall trend. In most cases, the trend will be for a good program's positive attributes to largely match the characteristics I outlined at the beginning of the chapter.

TIP
Details matter! The fact that a program's problems are minor makes them no less irritating.

On the whole, the best programs don't just allow me to get my work done—they go out of their way to help me get my work done. Visual C++ accomplishes this through its wizards, debugger, configurability, and remarkable integration. As you use other programs, paying attention to how the programs fail at or achieve this goal will go a long way toward helping you understand the different ways of creating great user interfaces.

TIP
Good programs go out of their way to help users get their work done.



Developing User Interfaces for Microsoft Windows
Developing User Interfaces for Microsoft Windows
ISBN: 0735605866
EAN: 2147483647
Year: 2005
Pages: 334

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net