概念驱动设计:《软件设计的要素》读书笔记
最近看《软件设计的要素》提出的思想还是有一些启发,看完做点总结回顾随便也简单分享。

概述
《软件设计的要素》由麻省理工学院教授丹尼尔·杰克逊(Daniel Jackson)所著,该书从概念的角度重新诠释软件设计的本质,提出了以“概念”为核心的设计方法论。其核心是通过定义、组合和映射概念,构建清晰、灵活且可靠的软件系统。这一理论不仅适用于专业设计师,也为普通用户理解软件提供了新视角。
iPod 的成功之处:歌曲,把选择、购买、下载和播放音乐的每一步操作体验都放在了统一的歌曲概念之下。改变了人们听音乐的渠道,简化了非必要步骤,从下载盗版音乐/转录 CD 光盘里的音乐 >上传至个人的播放设备>开始播放音乐。
Zoom 的成功之处:会议链接,它允许一个人提前创建会议,然后将链接发送给其他人,其他人甚至没有 Zoom 账号也可以选择加入会议。
Photoshop 的成功之处:图层概念,它允许进行非破坏性编辑,让 Photoshop 占据了图像编辑软件的主导地位。

概念驱动设计
作者认为软件设计的核心应围绕"概念"展开,而非单纯功能实现。帖子、用户、朋友、标签、点赞、评论、回复几个核心概念构成 Facebook 产品。

概念是用户与系统交互的认知模型,好的设计需通过概念呈现系统的整体逻辑和一致性。

软件设计的挑战不仅是将软件的概念模型传递给用户,以使用户的心智模型可以与程序员保持一致,而且是将概念模型当作设计主题本身。有了正确的概念模型,软件就会易于理解,从而易于使用。概念简单就易用,复杂就难以理解。软件产品实际的概念模型与用户理解的概念模型,一致时能方便使用。而不一致时,就很难正确使用。
软件设计在三个层次上实现:
物理层次,包括设计按键、布局和手势,这个层次对应用户的物理和认知能力;
语言层次,包括设计与用户交流的图标、提示信息和术语;
概念层次,包括将底层行为设计为一系列概念。
较低的两个层次,即物理层次和语言层次,主要关注用户界面中的概念表达。


核心理论
1. 概念的定义和作用
概念的定义:概念是软件设计的核心,它包括名称、目的、状态、操作和操作原则。操作原则展示了如何通过操作实现目的,是理解概念的关键。
概念的作用:概念可以表示单个软件、一类软件,甚至可以区分不同的软件。概念的复杂性是合理的,可以作为业务定义的核心,确定成本和收益,分离关注点,并在各种软件中重复使用。
案例:例如,苹果公司的废纸篓概念,它是一个杀手级概念,但也有设计缺陷。废纸篓的设计缺陷在于它在某些情况下无法完全删除文件,导致用户困惑。
2. 概念的组合
自由组合:概念彼此独立,仅受一些记录的约束,这些约束是为了确保概念对事物观点的一致性。
合作组合:概念共同工作,通过自动化提供新的功能。
协同组合:概念更加紧密地交织在一起,一些概念可以帮助另一些概念实现目的。
案例:废纸篓与文件夹的协同组合是一个经典例子。废纸篓可以删除文件夹中的文件,而文件夹可以组织文件,这种协同组合为用户提供了强大的功能。
3. 概念的映射
概念到用户界面的映射:概念需要映射到具体的用户界面,将操作映射为单击按键等手势,并将概念状态映射到各种显示视图。
案例:Gmail 的标签概念,系统给邮件添加了标签,界面将标签与会话相关联,这虽然简化了视觉外观,但影响了 Gmail 的可用性。

设计方法
确定概念:首先确定软件需要哪些概念,一个概念是应该独立地被理解、设计和实现的。这种独立性是概念的简单性和可重用性的关键。然后确定概念之间的协通方式,通过概念协同将概念简化。
概念依赖关系图:绘制概念依赖关系图,以简洁地了解软件中的概念及它们的关系。每次在设计中添加概念时,仔细考虑它依赖哪些概念。这并不是说一个概念需要依赖另一个概念才能正确运行,而是说只有当一个概念存在时,包含另一个概念才有意义。概念依赖关系图简要概括了软件的概念和概念存在的理由。概念依赖关系图有助于规划设计和构造软件的顺序、识别概念分组以及解释概念结构。

3. 实践步骤
在设计软件时,考虑一次设计一两个概念。在开始时,确定一些初始概念,这些概念将构成所有后续概念的基础。
绘制概念依赖关系图,以简洁地了解软件中的概念及它们的关系。每次在设计中添加概念时,请仔细考虑它依赖哪些概念。通常依赖的概念越多越好,因为这意味着该概念的用途更广泛。
在考虑概念的原型或构建顺序时,可以参考概念依赖关系图,以便在任何时候都有一个一致的子集。
要探索简化软件的方法,可以评估一致的子集,并估计每个子集带来的价值。也许会存在只需付出一小部分成本却可以带来大部分价值的子集。
在编写用户手册或开发帮助指南时,使用概念依赖关系图,以最有效和最合理的顺序呈现概念。

设计原则
1. 概念的设计原则
专一性原则(Specificity Principle)
定义:概念与目的应该一一对应,即每个概念应该有且只有一个明确的目的。
重要性:这有助于保持概念的清晰性和简洁性,避免概念过载和冗余。
案例:Photoshop 的图层概念,其目的是组织和管理图像的不同部分,而不是用于其他无关的功能。
一致性原则(Consistency Principle)
定义:概念之间的操作和行为应该保持一致,避免冲突和不兼容的情况。
重要性:一致性有助于用户形成正确的心智模型,减少学习成本和使用困惑。
案例:在操作系统中,文件夹的概念在不同应用中(如文件管理器、邮件客户端)的行为应该保持一致,如创建、删除、移动等操作。
熟悉性原则(Familiarity Principle)
定义:尽量使用用户熟悉的概念,避免引入过于复杂或新颖的概念。
重要性:熟悉的概念可以降低用户的学习成本,提高软件的可用性。
案例:Gmail 的标签概念,虽然与传统的文件夹概念有所不同,但通过类比和解释,用户可以快速理解其用途。
完整性原则(Integrity Principle)
定义:概念的设计应该完整,不能有缺失或冗余的部分。
重要性:完整的概念可以确保软件功能的全面性和一致性,避免用户在使用过程中遇到意外行为。
案例:Google Drive 的同步概念,不同类型文件的处理方式应该统一,以确保用户在不同场景下都能获得一致的体验。
目的性原则(Purposefulness Principle)
定义:每个概念都应该有一个明确的目的,不能是无目的的概念。
重要性:明确的目的有助于用户理解概念的用途,避免概念的滥用和误用。
案例:旧版本的 Photoshop 中的裁剪概念,其目的不明确,导致用户困惑和资源浪费。
2. 用户界面设计原则
映射原则(Mapping Principle)
定义:概念的操作和状态应该清晰地映射到用户界面上,用户可以通过界面上的元素(如按钮、菜单)进行操作。
重要性:清晰的映射有助于用户理解和使用软件,减少操作的复杂性。
案例:Gmail 的标签概念,用户可以通过界面上的标签按钮进行邮件的分类和管理。
一致性原则(Consistency Principle)
定义:用户界面中的概念和操作应该保持一致,避免用户在不同界面或功能中遇到不一致的行为。
重要性:一致性有助于用户形成统一的心智模型,减少学习成本和使用困惑。
案例:在 Word 中,保存文件的操作在不同界面(如主界面、打印界面)中应该保持一致,用户可以通过相同的快捷键或按钮进行操作。
反馈原则(Feedback Principle)
定义:用户界面应该提供及时的反馈,告知用户操作的结果和状态。
重要性:及时的反馈有助于用户了解操作的效果,减少操作的不确定性。
案例:在用户删除文件时,系统会弹出确认对话框,告知用户文件将被永久删除,避免误操作。
灵活性原则(Flexibility Principle)
定义:用户界面应该提供足够的灵活性,允许用户根据自己的需求进行操作。
重要性:灵活性可以满足不同用户的需求,提高软件的可用性和用户满意度。
案例:在 Excel 中,用户可以通过多种方式(如手动输入、拖动填充柄)进行数据的输入和处理。
3. 物理设计原则
物理能力原则(Physical Capability Principle)
定义:设计应考虑用户的物理能力,如手指的灵活性、视觉的清晰度等,确保用户能够轻松地进行操作。
重要性:物理能力原则有助于提高用户的操作效率和舒适度,减少操作的疲劳感。
案例:手机应用的按键设计,按键的大小和间距需要适中,以适应用户手指的大小和灵活性。
认知能力原则(Cognitive Capability Principle)
定义:设计应考虑用户的认知能力,如记忆、注意力等,确保用户能够理解和记住操作方式。
重要性:认知能力原则有助于提高用户的操作效率和准确性,减少操作的错误率。
案例:在用户进行复杂操作时,系统会提供逐步的引导和提示,帮助用户完成操作。
物理一致性原则(Physical Consistency Principle)
定义:物理设计中的元素(如按键、手势)应该保持一致,避免用户在不同界面或功能中遇到不一致的操作方式。
重要性:物理一致性原则有助于用户形成统一的操作习惯,减少学习成本和使用困惑。
案例:在不同应用中,返回上一级的操作通常使用相同的手势(如左滑),以保持一致性。
总结
丹尼尔·杰克逊在《软件设计的要素》中通过概念的定义、作用、组合、映射、设计方法、特性、设计缺陷的原因以及概念的重用等方面,详细阐述了概念在软件设计中的重要性。他强调概念应该是具体的、熟悉的和完整的,并通过多个实际案例,如苹果的废纸篓、Gmail 的标签、Photoshop 的图层等,生动地展示了这些理论和方法在实际软件设计中的应用。这些理论和方法不仅为软件设计师提供了新的视角,也为用户理解软件设计提供了有价值的参考。将软件设计从技术实现层面提升到概念系统的高度,强调设计哲学与工程实践的结合,为构建可靠、易用且创新的软件提供了方法论框架。
转自个人公众号:停下想想
版权声明: 本文为 InfoQ 作者【停下想想】的原创文章。
原文链接:【http://xie.infoq.cn/article/ad8bf4a3ad1b21f904faefaea】。文章转载请联系作者。
评论