第六章
- 程序员们无论他们如何努力,都不可能拿出完整的设计,这就如同软件测试不应该是开发者自己一样。这是因为,不仅他们的方法、训练、天性不适合做设计工作,他们更被束缚在满足用户需求和让编程更容易的矛盾之中。但是,很多公司允许软件工程师们控制开发过程,而且经常是从一开始到最后结束。
- 潜在的客户只提出他们想要的新东西。他们没有提到那些在他们正在使用的软件里已经有的东西,他们将这些视为理所当然。由于没有人提出要这些东西,产品定义里也就没有,自然在产品中也没有出现。
- 你只能得到你可以衡量的东西并获得回报,比如董事会能够衡量的只有完成期限和承诺的功能。董事会没有设置最低的质量标准(如数据破坏,系统崩溃之间的平均时间等),所以质量被牺牲了。对性能也没有设置衡量标准(例如按下某键和发生相应反应之间的秒数),所以以这个时间间隔就变得任意长。对学习某个东西所要时间和使用者操作出错的频率没有衡量标准,所以可学性和可用性就被牺牲了。那些被衡量的东西——计划和功能——达到了要求。然而,因为没有对功能进行完整的描述,很多功能也只是在名义上达到了要求。
- 投资者反复说:“我们没有足够的资金创建我们无法销售的产品,所以我们必须在开始之前了解我们的客户。”但是项目经理似乎总是认为:“我们没有可以花费在设计上的充裕的时间和资金——我们有可能不断地进行设计并且在开始创建产品这前将钱花完。”最终,我们不停地创建新产品而不是改进设计——直到钱被花完。
- “你们为什么花费那么多时间编写需求文档?你们已经用掉了大部分预算。在这里,我们不编写文档,我们直接开始编程。”可经过进一步的检验,我们发现他对功能做出的假设与他的开发经理的假设有很大的差异。只有通过“浪费”的需求文档,这种差异才显现出来。
- 任何没有经过交互设计方法训练的人都倾向于以自我为参照做设计,即将自己想像成使用者,程序员很自然地落入这样的陷阱。任何以自我为参照进行设计的群体,都将面临解决问题的时间压力,因为他们没有关于使用者目标的坚实而共同的基础信息,因而其解决过程会永远持续下去。
- 要想提高软件的可靠性和性能,程序员编写程序时必须考虑硅片的特点,让程序与硅片协调工作。程序员们要变得更加专业,他们也必须在这种同样的协调中工作。要想让软件的使用者高兴,工作有效,程序员编写程序时还必须考虑人的特点。问题在于,人的特点和硅片的特点截然不同。
- “一旦我们解决了最大的问题,第二个问题就会变成最大的问题。”在过去的几十年以来,计算机行业的首要问题是效率。所以培训人们去使用笨拙但是高效的软件,比多购买计算机要划算得多。计算机价格的急剧跌落使得这样的问题不复存在了。今天,人们适应“高效”软件的费用开支要远远大于让软件适合人类的习惯所需要的开支。
- 程序员们通常愿意学习如何设计。我赞赏他们的虚心,但是我不对他们寄予太大希望。任何能够将自己称为专业人员的程序员,都已经养成了与计算机相似的死板、确定、顺序处理的性格,已经离感性、不可预测、情绪化的人类世界太远。我不是说程序员不能成为设计人员。我只是认为,一个人试图同时做好这两种工作几乎是不可能的。
- 很多程序员相信自己很有设计才能。事实上,确实如此,但是为“功能”设计和为“人”设计是极为不同的。
- 程序员在编程时,通常用同一种编程语言、库、编程工具和编程技巧。有谁能分清哪些代码是为电脑编写,哪些代码是为人编写的呢?让他们理解与数据库打交道的C语言代码和与人交互部分的C语言代码有显著区别是很难的一件事。
第七章
- 登机通道测试。假想自己沿着登机通道走向一架客机机舱的情景。走到舱门时,你有两个选择,或者向左进入驾驶舱,或者向右进入客舱。左侧驾驶舱里,布满了各种工具、旋钮和操纵杆。与之形成鲜明对照的是右侧的客舱,所有的东西都很轻柔,光滑,让人感到舒适和放松。转向左侧,意味着需要学习和掌握那些复杂的技术设备,必须知道每一个设备的作用。作为了解这些复杂设备的回报,你就可以操纵客机,有责任保证让客机在正确的地方着陆。转向右侧进入客舱,意味着你放弃了对飞行过程的一切权利。作为回报,你获得一个舒适的旅行。除了开关阅读灯之外,不用做其他任何更复杂的操作,你知道客机将会把你带往预定的目的地。程序员——逻辑人——总是向左转——他们对操控和了解技术有着强烈的欲望。用户——普通人——总是向右转——他们愿意简化思考,相信客机会安全地到达目的地。
- 程序员希望控制他们感兴趣的东西,而这些东西往往是复杂而有确定性的系统。人类是复杂的,但是不像机器那样具有逻辑和确定性。取得控制权的代价是付出更多的努力和面对更大的复杂性。多数人只愿意付出适当的努力,而程序员则愿意付出更多的努力并有能力掌握极其复杂的事物。程序员的工作满足感部分地来自通晓和操控那些由复杂交错因素组成的系统。比如飞机驾驶舱里的一切。程序员会对这些令普通人生畏的东西产生极大的兴趣。即使需要数月的钻研,程序员也能够从中找到乐趣,并沉溺于其中。而普通人宁愿选择只做乘客。
- 对于程序员而言,获得控制权是目标,而掌握复杂性是代价。对于普通人,简单性是目标,他们将放弃控制权。在基于软件的产品中,熟练使用各种功能相当于掌握了控制权。例如,windows中的"查找文件",程序员认为这些功能非常“酷”,经过一些额外的研究,程序员可以更快、更有效地找到想找的东西。但对普通人来说,因为自己必须指定搜索范围,要搜索的文件类型,还有是在文件名还是内容中搜索。对于他们来讲,任何一个检索参数都是一次出错的机会。复杂程度越高,出错的机会越多,检索失败的机会也越高。如果工作能变得简单,他们愿意牺牲不必要的复杂性、控制权和理解。
- 3个人将被处决:牧师、律师和工程师。首先,牧师走上绞刑架,行刑者拉动操纵杆,但是什么也没有发生。牧师宣称这是神的旨意并要求释放自己,他获释了。然后,律师站上绞刑架,行刑者再次拉动操纵杆,但是还是没事发生。律师宣称如果再试一次,将是双倍惩罚,是违法行为,因而要求释放,他也获释了。最后工程师走上绞刑架,仔细检查绞刑台。还没等行刑者拉动操纵杆,工程师就抬起头宣布:“哈哈,问题在这里。”对于工程师来讲,明白绞刑架的问题所在,比生存更为重要。
- 程序员将其他人的挫折理解为没有能力而不是没有兴趣。
- 电脑将文档永久保存在硬盘中,而程序只能修改存在内存中的临时文档。程序员们非常习惯于这两种存储方式,因而他们设计的用户界面会让用户对这两种存储方式进行选择。而实际上,根本没有必要让使用者知道这两种存储方式的存在。
- 普通人对于日常使用的东西,即使不理解内部工作机制,也不会有不安的感觉,让他们去理解内部机制是强加给他们的不必要负担,而程序员们觉得普通人的这种想法不可思议。
- 想像一下,将硬币抛起一百万次而且九十九万九千九百九十九次是正面在上这样的情况,对数学家来说,“硬币总是正面在上”的说法是错误的。但对于大多数普通人来说,“硬币总是正面在上”的说法是正确的。毕竟出现错误的概率是只有百万分之一。作为程序员,如果某件事可能发生,无论概率多么小,也必须考虑到。
- 对可能性的过度防范,会不可避免地淡化概率的意义。结果是,交互产品中的不常用或者根本用不到的功能与常用的功能混杂在一起。我们从使用者那里听到的对软件最多的抱怨是,用户界面里的选项太多而无所适从。
- 任何程序的热衷使用者,只会使用几千次该程序,然而程序员们仍旧基于事情会发生无数次的假设进行思维。