在所有的开发项目中,人与人共事。在除了抽象领域研究中,人们编写软件以到达他人的某些目标。人们编写软件给人用。所以这是人的生意。不幸的是,教导程序员如何处理与他们的服务对象间的关系却非常困难。幸运的事,这里有一整套有用的秘籍。
例如,Ludwig Wittgenstein (路德维格·维特根斯坦)就在哲学研究中讲了个很好的例子,我们所用的任何与别人交流的语言(都不是)一种序列化格式,无法将一个人的思维、或想法、或图片直接放入另一个人的脑袋里。因此,当我们在“收集需求”的时候,就应该注意防止误会。Wittgenstein还表明。我们相互理解的能力根本不来自描述共享,而是来自经验共享,来自生活的形式。这或许也解释了为什么喜欢浸泡在自己问题领域的程序员比那些浅尝辄止的程序员做得更好的原因。
Lakoff和Johnson向我们展示了《我们赖以生存的隐喻》(芝加哥大学出版社),暗示语言在很大程度上是隐喻的,这些隐喻为我们如何理解世界提供了见解。即使我们在谈论金融系统时也可会遇到看似具体的术语,例如“现金流”,可以把它视为隐喻:“钱是一种流体”。隐喻是如何影响我们对货币处理系统的思考的?又或者我们可能会谈论协议栈中的各层,有高层有底层。这是个很强力的隐喻:用户是“高层”而技术是“底层”。这也暴露了我们搭建系统结构的思想。这也可能标志着一种懒惰的思维习惯,而我们时不时的会从中获益。
Martin Heidegger 仔细研究了人们体验工具的方法。程序员会构建并使用工具,我们思考、创建、修改、重构工具。工具是我们感兴趣的对象。但对于它的用户,Heidegger在《存在的时间》所展示的那样,工具变成了一种看不见的东西,只有在使用时才能理解。对于用户来说,当工具不工作时,它就会变成一个感兴趣的对象。每当讨论可用性时,都应该牢记这种差异的重要性。
Eleanor Rosch 通过组织我们对世界的理解,推翻了Aristotelean 的分类模型。当程序员向用户询问系统需求时,我们倾向于要求他们以谓词来定义。这对我们来说是非常方便的。谓词中的术语可以很方便的变成类中的属性或数据表中的列。这些分类是清晰的、不相交的、整洁的。不幸的是,像Rosch 在“自然分类”及其之后的作品中所展示的一样,这并不是人们通常对世界的理解。他么需要通过实例来理解。一些实例,所谓的原型,要比其它方式更好,其分类结果是模糊的,重叠的,内部结构是丰富的。若坚持Aristotelean的观点,我们在用户的世界里对他们提出正确的问题,并难以达成共识。