读软件设计的要素01概念

1. 概念

1.1. 一个软件,从运行于手机上的最小程序到大型的企业系统,都是由概念组成的,每个概念都是独立的功能单元

1.2. 软件中的可用性问题,经常可以追溯到其底层概念

  • 1.2.1. 概念帮助识别软件的不可用性

1.3. 概念都是以同样形式在各种软件中重复使用的

  • 1.3.1. 将设计分解为最基本的概念带来了概念重用的机会

1.4. 概念就像是分子

  • 1.4.1. 虽然相互结合在一起,但无论在哪里出现,它们的属性和行为都是相似的

1.5. 概念没有可视化的形式,它们非常抽象

1.6. 任何关于设计的讨论都必须围绕基本概念,并评估概念采用的行为模式是否符合它的目的

  • 1.6.1. 用户界面也很重要,但在一定程度上用户界面只是服务于概念,并将概念呈现给用户

  • 1.6.2. 如果我们想让软件更好用,就必须从概念着手

1.7. 在传统的设计学科中,设计是从概念这个核心出发的

  • 1.7.1. 当选择好核心概念后,后续的设计决策也是不可避免的

  • 1.7.2. 设计作为一个整体,需要使作品呈现出一致性,使它看起来像是一个人的作品,哪怕它是由一个大型团队共同完成的

  • 1.7.3. 用户能够感知到作品的完整性和统一性,而设计中潜在的复杂性要让位于简单的作品形象

1.8. 概念的复杂性是合理的

  • 1.8.1. Photoshop软件的图层和蒙版就属于复杂的概念

2. 设计的层次

2.1. 物理层次

  • 2.1.1. 设计按键、布局和手势

  • 2.1.2. 对应用户的物理和认知能力

  • 2.1.3. 这个层次是关于组件的物理特性的

  • 2.1.3.1. 即使软件的界面仅仅在一块触摸屏上运行,也会有物理特性,只不过可能比较有限

  • 2.1.3.2. 我们有限的视觉采样率导致了感知融合,这使我们很难区分发生在30毫秒以内的事件,所以30帧/秒的画面就足以让电影看起来很流畅

  • 2.1.4. 菲茨定律(Fitt's Law)预测了用户将光标移动到目标点需要的时间,并解释了为什么菜单栏应该位于屏幕顶部,就像macOS的桌面那样,而不是像Windows系统桌面那样位于软件的窗口内部

  • 2.1.5. 在物理层次进行设计时,必须尊重用户身体特点的多样性

2.2. 语言层次

  • 2.2.1. 设计与用户交流的图标、提示信息和术语

  • 2.2.2. 这个层次关注的是为了表达软件的运行方式而使用的语言,以帮助用户浏览软件、了解可用的操作以及操作将产生的影响、软件已经发生的行为等

  • 2.2.3. 在语言层次进行设计时,必须尊重用户在文化和语言上的差异

  • 2.2.3.1. 在欧洲,红色圆圈的路标表示任何车辆都不允许通行

  • 2.2.3.2. 大多数美国司机却可能觉得禁行标识应该是红色的斜杠

  • 2.2.4. 当用户界面的设计师谈论对一致性的需求时,他们通常指的就是语言层次上的语言使用

  • 2.2.4.1. 一致性包括确保在整个用户界面中,对相同的词语采用了相同的使用方式

2.3. 主要关注用户界面中的概念表达

2.4. 概念层次

  • 2.4.1. 将底层行为设计为一系列概念

  • 2.4.2. 它关注设计背后的行为,即关注由用户和软件本身执行的操作,以及这些操作对底层结构的影响

  • 2.4.3. 与语言层次相比,概念层次与交流或文化无关

  • 2.4.4. 在编程中,抽象(abstraction)和表达(representation)有着重要的区别

  • 2.4.4.1. 抽象是抓住编程思想的本质,也可能用于对观测到的行为进行说明

  • 2.4.4.2. 表达是通过代码实现这个本质

3. 心智模型

3.1. 概念设计之源

3.2. 用户知道软件中有这些功能,却仍然无法正确地使用它们

  • 3.2.1. 最常见的原因是,用户的心智模型不正确,或者说与软件设计师和程序员的心智模型不一致

  • 3.2.2. 用户对他们使用的设备往往有着模糊、不完整甚至是不一致的心智模型,这并不令人意外

3.3. 解决这个问题的一个糟糕办法是培训用户

  • 3.3.1. 大多数用户都会拒绝花时间学习如何使用软件,他们认为熟能生巧

3.4. 一个更好的解决办法是设计软件的概念,使软件简单、灵活并能很好地适应用户的需要

  • 3.4.1. 同时通过用户界面向用户传达这些概念

3.5. 概念本身既是用户想要的心智模型,也是软件的规格

3.6. 用户界面设计师的任务就是设计出类似设计大师唐纳德·诺曼所说的“系统形象”

  • 3.6.1. 用户界面能够准确地对应概念模型,这样用户就能够获得与软件概念一致的心智模型

4. 概念可以表示单个软件

4.1. 概念是单个软件、一类软件以及各类软件的特征

4.2. 概念可以让你比较软件,注意其必要的功能以及知道如何有效地使用这些功能

4.3. 短信和电子邮件的主要区别

  • 4.3.1. 短信是用会话概念组织起来的,所有发送给同一个人的消息都会显示在同一个界面中

  • 4.3.1.1. 在一定程度上是由于短信的发送者和接收者仅由电话号码标识身份

  • 4.3.1.2. 短信依赖会话的场景

  • 4.3.2. 电子邮件通常使用“邮箱”​、​“文件夹”或“标签”等概念来组织

  • 4.3.2.1. 电子邮件用户往往拥有多个通信地址,这使得根据地址对电子邮件进行分组并不可靠

  • 4.3.2.2. 电子邮件信息往往是孤立的

5. 概念可以表示一类软件

5.1. 概念通常是软件差异化的因素,关注概念会让你更关注市场的需求,并揭示软件成功或失败的原因

5.2. 概念不仅可以表示单个软件,而且能表示一类软件

  • 5.2.1. 文本编辑器

  • 5.2.1.1. Atom、Sublime、BBEdit和Emacs来编辑程序代码

  • 5.2.1.2. 文本编辑器的关键概念是“行”和“字符”

  • 5.2.1.3. 行概念包含了强大的功能,例如比较和合并,这些对程序员管理代码来说是必不可少的

  • 5.2.2. 文字处理软件

  • 5.2.2.1. Word、OpenOffice和WordPerfect来创建各种文档

  • 5.2.2.2. 包括“段落”​,还包括“格式”​,格式概念允许用户为文本指定排版属性

  • 5.2.3. 桌面出版软件

  • 5.2.3.1. Adobe InDesign、QuarkXPress、Scribus和Microsoft Publisher将文档组织成书籍和杂志的最终版式

  • 5.2.3.2. 包括文字处理软件的基本概念,但增加了最重要的文本流概念,这一概念允许用户在文档的不同位置插入链接在一起的文本框

5.3. 概念可以区分软件

6. 概念可以作为业务定义的核心

6.1. 概念可以帮助从事数字化转型的公司规划前进的道路

6.2. 虽然投资核心概念这件事听起来没有那么花哨,但可能更有效

6.3. 只需确定业务的核心概念,就可以帮助公司专注于正在提供的服务,以及将来可能会提供的服务

6.4. 析这些核心概念可以帮助公司发现其中的冲突和机会,从而简化业务

6.5. 对概念清单进行排序,可以反映每个概念对于客户和公司的价值,以及实施和维护这些概念的成本,从而为公司的服务战略提供依据

6.6. 通过整合一系列核心概念,公司可以确保客户在技术平台和公司各部门之间拥有一致的体验,并可以降低因拥有多个概念变体导致的成本

6.7. 为了使利润最大化,大多数航空公司隐藏了座位的定价策略

  • 6.7.1. 只有专家才知道当前的座位价格与这架飞机上其他座位相比,或者与过去的座位价格相比,是贵了还是便宜了

7. 概念可以确定成本和收益

7.1. 概念能将功能更清晰地划分为独立的单元,每个功能单元都有自己的价值和成本

7.2. 概念的复杂性,即开发这个概念的成本,以及用户混淆的成本

7.3. 概念的新颖性,以及由此带来的风险

7.4. 根据二八法则,我们知道20%的概念将带来80%的收益

8. 用概念分离关注点

8.1. 概念提供一种新的粒度,让软件设计师可以更有效地分离软件的功能点、探索概念的重用方式,并更合理地规划软件工程工作

8.2. 解决问题最重要的策略是分离关注点,即分开处理关注点的不同方面,即使有些关注点并不是完全独立的

8.3. 分离关注点是有效的,因为这样能使设计师一次只专注于一个方面

  • 8.3.1. 无须在设计审核功能的同时考虑是否可以撤销邀请

  • 8.3.2. 每个概念都可以设计得很丰富,甚至可以单独成为一个小系统

  • 8.3.3. 如果设计师认为某个概念的成本与收益不匹配,也可以完全忽略这个概念

9. 概念可以确保设计的安全

9.1. 概念是安全设计的本质,选择正确的概念并理解其含义至关重要

9.2. 安全是所有软件都关注的问题

9.3. "安全设计”的流行,反映了人们逐步对软件安全达成了一种共识,即确保安全最好的方式不是没有安全漏洞(这几乎是不可能的)​,而是通过设计保证即使存在安全漏洞,系统仍然是安全的

9.4. 系统范围的安全设计依赖几个关键的概念

  • 9.4.1. 身份验证概念,确保正确识别出请求的发出者,也就是安全领域中的“委托人”​

  • 9.4.2. 授权概念,确保这些请求者只能访问某些资源

  • 9.4.3. 审计概念,确保每次访问都有真实的记录,并且可以据此惩罚不良行为等

9.5. 概念是所有系统设计的核心

  • 9.5.1. 安全(safety)领域不同于安保(security)领域,前者很少有标准的概念

  • 9.5.2. 如果一个事故反复发生,就意味着应该有一个新的概念发挥类似安保概念的作用,并采用传统的方法实现关键功能

  • 9.5.2.1. 医疗设备经常发生剂量计算错误,那么就应该设计一个剂量概念,用来处理各种单位、浓度和流速,从而消除很多导致患者受伤或死亡的悲剧性事故,这些事故本是可以预防的

10. 概念可以回应对设计的评论

10.1. 概念为评论设计提供了可用的原则,从而避免花很长时间才能发现问题

  • 10.1.1. 掌握这些原则的软件设计师会做出更好的设计,即使他们还没有明确的想法

10.2. 在任何设计领域,设计师都会对彼此的作品进行分析和评论,这对设计有重要的作用

10.3. 评论并不是一种经过系统性思考的正式评价,但正是它的非正式性能够带来新的视角与灵感

10.4. 设计原则可以有不同的使用方式

  • 10.4.1. 它们是设计评论达成共识的基础,或者可以被系统地应用于启发式评价,但其更重要的作用是塑造设计师的思想