读软件设计的要素02概念的目的

1. 要素

1.1. 概念的定义包括名称、目的、状态、操作和操作原则

1.2. 操作原则(operational principle)

  • 1.2.1. 操作原则用于展示如何通过操作实现目的,这是理解概念的关键

  • 1.2.2. 展示如何通过操作的组合实现概念的目的,包含一个或多个典型的使用场景

  • 1.2.3. 操作原则并没有增加任何信息,因为你完全可以从操作规范中推理出任何使用场景

1.3. 每个概念都是某人在某个时间出于某种目的而发明的

  • 1.3.1. 随着时间的推移,大多数被广泛使用的概念都得到了进一步的扩展和完善

1.4. 大多数概念是通用的,可以应用于不同类型的数据以及场景中

  • 1.4.1. 通用性有助于概念的重用,也有助于提炼概念的本质

1.5. 概念可以被相互独立地设计和理解

  • 1.5.1. 为了简化软件设计,可以将设计分解成不同的子问题,许多子问题都可以通过概念的重用来解决

1.6. 概念并不能解决所有的设计问题,但是确实可以通过找出特定的概念来帮助我们发现设计中的挑战

1.7. 概念不仅包含它表示的行为、关于其设计的所有现存知识、可能出现的实现问题,还包括软件设计师处理这些问题的各种方法

1.8. 概念状态(state),将概念中涉及的项目组织成各种结构

2. 废纸篓

2.1. 苹果公司的杀手级概念

2.2. 废纸篓概念是苹果公司在1982年为丽萨电脑发明的

2.3. 真正的创新并不是用户可以把东西拖进废纸篓,而是用户还可以恢复它们

  • 2.3.1. 废纸篓概念的目的并不是删除,而是撤销删除

2.4. 在废纸篓概念中,只有两种状态

  • 2.4.1. 可访问(accessible),表示仍在废纸篓以外、可以访问的项目集合

  • 2.4.2. 已删除(trashed),表示已删除但尚未永久删除的项目集合

2.5. 废纸篓概念中有两种场景

  • 2.5.1. 一种是恢复场景:删除一个文件后再恢复它

  • 2.5.2. 一种是永久删除场景:删除一个文件后,再清空废纸篓,用户将再也无法访问这个文件

2.6. 一种常见的变体就是,当删除某个文件一段时间后,例如30天,系统就会自动永久删除这个文件

2.7. 设计缺陷

  • 2.7.1. 整个系统只有一个废纸篓

  • 2.7.1.1. 当你插入和移除外部驱动器时,如果从这些驱动器中删除文件,废纸篓的内容就会随之变化

  • 2.7.1.2. 变通办法,只是增加了一个“立即删除”选项,允许用户一键永久删除废纸篓中指定的文件

  • 2.7.2. 废纸篓的另一个设计缺陷与已删除文件的显示方式有关

  • 2.7.2.1. 用户一直没有办法按删除日期对废纸篓中的文件进行排序

  • 2.7.2.2. 2011年,苹果公司的OS X Lion操作系统开始允许用户按“创建日期”对文件夹中的文件进行排序,而这个日期对于废纸篓而言就应该是文件删除日期

3. 样式

3.1. 桌面出版背后的概念

3.2. 样式概念的状态的映射关系

  • 3.2.1. 一种是指定(assigned),为元素指定一种样式

  • 3.2.2. 另一种是定义(defined),为样式定义一种格式

3.3. 样式概念还在不断丰富,甚至涉及一些格式的分层

4. 预订

4.1. 一个19世纪的概念

4.2. 预订概念有助于有限资源的有效利用

  • 4.2.1. 资源提供者希望资源利用率尽可能高

  • 4.2.2. 消费者希望有需要时就可以得到并使用资源

4.3. 预订概念要起作用,就需要跟踪与预订相关的内容,包括被预订的资源和预订资源的消费者

  • 4.3.1. 消费者除进行预订并最终使用资源之外,还可以在他们决定不需要资源的时候取消预订

  • 4.3.2. 预订通常是免费的,资源提供者还需要防止用户总是预订资源却从不真正使用它

  • 4.3.2.1. 如果客人有太多次缺席,他的账户将被停用

4.4. 预订概念的目的是有效利用资源

4.5. 预订概念的操作原则是关于如何预订并使用资源

4.6. 预订概念的状态是与预订相关的全部内容

4.7. 预订概念的操作:预订、使用资源和取消预订

  • 4.7.1. 预订概念中的操作包括由资源所有者(如餐厅)执行的用于提供和回收资源的行为

  • 4.7.2. 资源在被预订的情况下不能回收,但实际上更好的设计是允许回收,比如隐式地取消预订

4.8. 预订概念在很多不同的领域都非常有用

  • 4.8.1. 铁路运输要求列车在进入路段之前预订轨道来保证安全,这样系统就可以确保不会有两列火车同时占用同一路段

  • 4.8.2. 在网络中,有一种资源预留协议(resource reservation protocol,RSVP),它允许路由器预订带宽,以便在某段时间内保证一定水平的网络性能,即“服务质量”​

5. 概念的目的

5.1. 以用户需求为中心

5.2. purpose

  • 5.2.1. 目的对于生活的各个方面都很重要,因为目的可以帮助我们设定方向,向他人解释自己,并在合作中达成共识

  • 5.2.2. 在目的这件事上,设计与其他活动没有什么不同,你不可能在自己都不知道想要什么的情况下就设计好一件东西

  • 5.2.3. 对于软件设计师来说,目的可以表明他们对概念的设计和实现方式是合理的

  • 5.2.4. 目的将要服务于谁?

  • 5.2.4.1. 通知概念声称是为用户提供实时的更新,让用户随时了解情况

>  5.2.4.1.1. 它的真实目的是提高“用户参与度“
  • 5.2.4.2. 标签概念的目的似乎很简单,就是帮助人们更容易地找到特定人的帖子
>  5.2.4.2.1. 标签概念巧妙地增加了两组朋友间的社交关系

5.3. 概念设计首先要针对每个概念提出一个简单的问题:它是做什么用的?

5.4. 用户了解一个概念的目的是使用它的先决条件

  • 5.4.1. 许多用户手册和帮助指南解释了操作的细节,但没有解释目的,这对于用户特别是新手来说很不友好

5.5. 一个概念的目的应该是有说服力、以需求为中心、具体和可评估的

  • 5.5.1. 概念的目的很少能够用比喻解释清楚

5.6. 没有目的的概念是可疑的

  • 5.6.1. 出现这种情况通常是因为这个概念根本不是一个真正的概念,而是一种不想暴露给用户的内部机制留下的痕迹

5.7. 对概念目的的混淆会导致误用,并可能导致用户做出令他们后悔的行为

5.8. 设计缺陷会导致概念无法实现其目的,但这是难以预料的,因为使用场景会随着时间而变化

  • 5.8.1. 设计缺陷通常是不可预测的,这种缺陷既可能是形式与使用场景不符,也可能是概念无法实现它们的目的

  • 5.8.2. 概念并不能完全消除设计缺陷,但它的价值在于提供一个框架来减少设计缺陷,框架增强了概念目的的作用,并给出了一种把概念设计和使用中积累的经验和知识组织起来的结构

5.9. 仅仅知道为什么要设计软件也是不够的,你还需要为设计中的每个概念找到目的

  • 5.9.1. 为概念确定目的其实是一项困难的工作,但它会带来解决问题的洞察力,并迫使我们专注于重要的事情

  • 5.9.2. 在软件设计方面,由于它有无限的复杂性,人们很容易陷入细节并失去对大局的把控

6. 步骤

6.1. 说清楚

  • 6.1.1. 一个概念必须有明确的目的才会易于使用

  • 6.1.2. 软件设计师不能将概念视为自己的秘密,必须与用户共享目的

6.2. 确定目的的标准

  • 6.2.1. 目的总是与一定场景中人的需求相关,因此难以用逻辑或数学的方式评估,而只能以非正式或粗线条的方式评估

  • 6.2.2. 有说服力

  • 6.2.2.1. 目的应该是对一个明确的需求有说服力的表达,而不是对用户的某些愿望或可能要执行的操作的一些模糊表示

  • 6.2.3. 以需求为中心

  • 6.2.3.1. 目的必须表达用户的某个需求,而不是仅仅重复描述意义不明的行为

  • 6.2.4. 具体

  • 6.2.4.1. 目的必须足够具体,以便于概念设计

  • 6.2.5. 可评估

  • 6.2.5.1. 目的应该能提供衡量概念的尺度

6.3. 深入理解目的

  • 6.3.1. 了解呼叫转移概念的两个不同目的

  • 6.3.1.1. 一种目的是委托转移,允许一个人将对自己的呼叫委托给其他人

  • 6.3.1.2. 另一种目的是跟随转移,当一个人在不同的地方工作时,允许将对他的呼叫转移到不同的位置

  • 6.3.1.3. 委托转移概念和跟随转移概念都服务于自己的目的

7. 没有目的的概念

7.1. 一个概念可能根本没有令人信服的目的,这会让人们对它的用处产生一些怀疑

7.2. 概念缺乏目的通常是因为没有针对用户真正的需求进行设计,而只是以一种更容易的方式设计

7.3. 无目的的概念是将底层机制暴露给用户的结果

7.4. 概念需要始终面向用户,并且它的目的不仅需要对程序员有意义,而且需要对用户有意义

7.5. 老式的混水龙头

  • 7.5.1. 如果你想提高温度,你可以开大热水水龙头,关小冷水水龙头,但是流量也会相应发生变化

  • 7.5.2. 如果你只想增加流量,则需要打开两个水龙头,仔细调整它们以重新达到所需的温度

  • 7.5.3. 在这两种情况下,用户一般都需要进行多次调整

7.6. 新式的混水龙头

  • 7.6.1. 龙头具有两个独立的控件,旋转把手可以调节温度,上下移动把手可以调节流量

7.7. 编辑器缓冲区(editor buffer)曾经是一个常见的概念,满足了一些用户需求,但现在它不再引人注意

  • 7.7.1. 无目的的编辑器缓冲区概念被淘汰了

8. 目的不明的概念

8.1. 如果用户不清楚一个概念的目的,就很可能不按软件设计师设计的方式使用

8.2. Twitter

  • 8.2.1. 事实证明,收藏概念的实际目的是记录用户对推文的认可,以供其他人查看,也就是通常所说的“喜欢”或“点赞”概念

  • 8.2.2. 书签(bookmark)的新概念,该概念可以通过推文的“共享”菜单访问

8.3. 一个目的不明的概念会产生混乱

  • 8.3.1. 图像的分辨率并不代表图像的质量,除非你知道图像的大小

  • 8.3.2. 像素阵列

  • 8.3.2.1. 图像表示为彩色像素的二维阵列,这是一个现在普遍接受但曾经激进的想法

  • 8.3.3. 重新采样是一种更复杂的操作,会改变像素的数量

  • 8.3.4. 图像大小

  • 8.3.4.1. 它的目的是以物理尺寸描述图像,这很简单但也很奇怪,因为我们通常不认为数字图像具有物理尺寸

  • 8.3.5. 图像分辨率本身并不是一个概念,而是假设图像以给定的尺寸打印时的打印质量

  • 8.3.5.1. 果像素阵列为1000像素方阵,图像大小为10英寸正方形,则分辨率为100像素/英寸

8.4. 不要使用令人困惑的概念

  • 8.4.1. 误解概念的目的很可能会导致滥用概念

9. 欺骗性的目的

9.1. 所有问答网站都有用户概念,大概是为了阻止垃圾信息和低质量答案

  • 9.1.1. 网站会以此来限制访问,以至于用户在没有登录的情况下无法查看问题和答案,更不用说发布新问题了

9.2. 推手民调是一个标准的民间调查,其目的是通过汇总民间的反应来获得一些有用的信息

  • 9.2.1. 真正目的是赢得你的支持

  • 9.2.2. 推手民调通常是为了利益,通过问你一些暗示性的问题来改变你的观点

9.3. 直达航班概念是由航空公司发明的,以响应早期的订票系统,这种系统更偏爱只有一个航班号的航线

  • 9.3.1. 直达航班概念可以使航空公司的这些航线更加突出,从而使消费者更有可能购票

  • 9.3.2. 消费者不了解这个目的,没有意识到直达不一定是直飞

10. 避免缺陷

10.1. 设计最好的结果是形式和场景之间完美契合,就像小朋友玩的木制拼图,一块块紧密贴合

10.2. 你永远无法完全预测设计中可能存在的缺陷,但你至少可以利用以前发现缺陷的经验

10.3. 将设计分解为多个概念,这样使设计适配的整体挑战就可以简化为一组更易于管理的子问题

10.4. 概念是可以重复的,并可以提供跨场景的共性

10.5. 糟糕的设计导致的致命错误

10.6. 由场景变化引起的设计缺陷

10.7. 旧问题再次出现