别让我打开话匣子

链锯开发

David Platt

Microsoft 产品需要经历三个版本的完善才能走向成熟,Windows 本身就是一个经典的例子。Visual Studio 2010 和 Microsoft .NET Framework 4 是 Windows Presentation Foundation (WPF) 及其工具的第三个版本。不出所料,我的客户对我说:“太好了,看来是时候了,帮我们了解一下,我们将开展一次试验项目。”但是对于 WPF 的新用户而言,他们往往被一些华而不实的功能转移了注意力:他们忘了自己的最终目标是帮助用户获得愉快的体验并提高工作效率,而非为了自己解闷而花费大气力向程序塞进一些华而不实的功能。最重要的是,他们忘了自己的程序只是用户每天使用的众多程序中的一个,而且 UI 之间存在共性,换句话说,大多数 Windows 程序的工作方式或多或少存在相似性,这是客户满意以及程序取得成功的关键。

35 岁以下的人很少有人记得 DOS 程序,这是因为这些程序的 UI 几乎无任何共性。例如,大多数 DOS 程序没有菜单,需要使用 snap-on 键盘模板为用户提醒命令。(好的,我料想这也算是某种共性。)有少数的 DOS 程序包含菜单,但只有在用户按特定键时才会显示这些菜单,而且每个程序都使用不同的键并在不同的位置显示菜单也是很自然的事情。Microsoft Word 使用 ESC,菜单显示在文档下方;Lotus 1-2-3 使用正斜杠“/”,菜单出现在文档上方;Farsight(另一种电子表格程序)使用 F3。每一位用户即使在试着使用一个新应用程序之前,也必须 (gak!) 阅读手册(能够全部记下来吗?),然后在每次切换应用程序时都要切换大脑中的命令集。

除了纸牌游戏之外,Windows 用户平台的最大增长动力来自其 API 推动的标准化 UI。最基本的控件结构是一个菜单,位于程序窗口的顶部。键盘快捷方式作为辅助工具在菜单项上列出,工具栏提供图形快捷方式等等。诸如工具提示和右键单击上下文菜单等标准已经发生了一些变化,并将在今后继续演变(例如,Office 功能区控件)。从来没有人阅读手册。用户希望通过 UI 迅速认识新的 Windows 程序,否则,他们将放弃使用该程序。

我们目前尚未对 WPF 的新功能应用这些标准,这确实是一个问题。例如,有很多文章解释如何在 WPF 中编写动画程序。但是,除了我的文章“如何正确使用 WPF”(rollthunder.com/SoftwareThatDoesntSuck/WpfForGoodAndNotEvil.htm) 之外,我没有在 Windows 社区中看到相关方面的讨论,例如,动画向用户传达了什么信息,动画对用户的工作效率和满意度有什么影响,或任何有关应在何时使用和不使用动画的准则。因此,在讲授 WPF 课程时,我始终坚持在 UI 设计上至少花一天的时间。除了教客户编写 WPF 代码之外,还要教他们从用户的需求出发,做足内在工作,而非从工具包出发和做表面功夫。

WPF 比 Windows 窗体强大得多,正如同链锯比手锯更加强大一样。我发现有人对此洋洋自得,毫无疑问,这是可以理解的。然而,没有人认真思考应该如何安全和高效地管理这种优势才能使用户能够更加愉快地工作,而这正是我们的最终目标。

这就需要改变,而且是立即改变。经过四年多的实验,我们已经初步了解用户对 WPF 中各使用模式的喜好情况。鉴于 WPF 即将成为 Windows 桌面开发的主流,我建议 Microsoft 出版相应的 UI 设计指南,不仅要涉及如何编写不同功能的程序,还要涉及使用的时间、位置以及原因何在。制造链锯的公司有责任告诉客户应该把持链锯的哪一端。     

David S. Platt 在哈佛大学拓展学院以及世界各地的公司讲授 .NET 编程。他著有 11 本编程书籍,包括“Why Software Sucks”(Addison-Wesley Professional,2006)和“Introducing Microsoft .NET”(Microsoft Press,2002)。Microsoft 在 2002 年授予他“软件传奇人物”称号。他想知道是不是应该绑住女儿的两根手指,以便她学习八进制算法。您可以通过 rollthunder.com 与他联系。