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