概念设计的艺术

290 阅读13分钟

最近读了一本书,叫《软件设计的要素》。(ps: 同系列的两本书叫《技术领导力的要素》和《工程管理的要素》,也都写得很好,强烈安利)。这本书它主要通过介绍软件当中的一些设计思考,以及对概念要素的创新性分解,来帮助我们提升对软件设计思想的把握。同时,也可以让我们用一种更加抽象的思维方式来看待市场上的一些软件产品设计,并把它们串联起来。个人认为,这本书不仅仅对于开发,对于提升产品的感知力也有比较不错的帮助。

软件设计的三个层次

可以将软件设计分为三个层次:

  • 物理层次:包括颜色、按键布局和手势等等,对应用户的物理和认知能力。这一层次还考虑了身体特征,如无障碍设计等。如用户在使用软件时候的延迟感知时间等。这里推荐《设计心理学》系列丛书,对这一层次的设计有更详细的介绍。

  • 语言层次:包括设计与用户交流的图标、提示信息和术语等。在这个层面上,设计师主要关注文化和用户语言上的差异。

  • 概念层次:包括了底层行为设计的一系列概念。它主要关注的是背后的行为。如果用户对概念有一些先验知识,就可以更容易地理解和使用软件。在进行用户界面设计时,实际上是在进行概念的映射。需要确保每个操作在相关的用户界面中都是可用的,并且以一种可被理解的方式呈现。

image

这本书重点围绕最后一个层次进行介绍,这也是本书最核心的主题。

什么是概念

我们先来看一下本书中对于概念的定义:

概念是一种独立的服务,由状态和操作组成,它能够实现用户的目的。

概念包括了名称、目的、状态、操作和操作原则。

下面我们以上面的定义,举一个预定概念的例子, 这个概念目前在软件设计领域非常常见,主要用于对于资源的高效利用:

image

预订概念似乎是在19世纪发明的,至少对于餐厅而言是这个时候,当时大城市的餐厅开始提供餐桌和私人房间的预订服务。识别作为社会基础设施重要组成部分的概念并揭示它们的起源,是一个有趣的游戏。《大西洋月刊》(The Atlantic)的一位作者亚历克西斯·马德里加尔(Alexis Madrigal)在历史学家丽贝卡·斯庞(Rebecca Spang)的帮助下,研究了餐厅的预订服务历史。为什么预订只在20世纪才开始流行尚不清楚,但似乎与人们在餐厅用餐这一现象更加普遍的社会变化有关,而与电话的出现无关。

可以看到,包括了预定的目的(有助于高效利用资源)、状态(可用状态, 预定状态) 、行为(预定,取消等操作)和操作原则(在没有取消预定的情况,才能正常使用资源)。

通过比较概念可以解释相似功能的软件间的差异,比如短信和电子邮件。

  • 短信是通过会话概念进行组织的,而电子邮件通常使用邮箱文件夹标签等概念来组织。

概念也可以用来表示同一类软件,比如 文本编辑器、文字处理软件,以及专业设计师使用的 桌面出版软件。虽然都是用于文本处理的,但是由于面向的人群不同,所以它们在设计层次上采用了一个新的概念来进行区分。

其中,文本编辑器的主要关键概念是字符,行包含了比较和合并等能力。文字处理软件的概念则进一步引入了包括段落和格式等概念。桌面出版软件包含了文字处理软件的基本概念,但增加了更为重要的文本流的概念,这个概念允许用户在文档的不同位置插入链接在一起的文本框,以便文本可以从一个文本框流向另一个文本框。这是杂志排版中所需使用的概念。由此,可以看出,对于相似的领域,使用不同的概念完全可以开发出不同类型的软件。

image

概念模型设计的重要性

上面简单介绍了一下概念的基础定义,下面再来重点讲一下为啥概念设计这么重要。

概念和概念模型的设计可以看做是软件设计中最核心的部分。有了正确的概念模型后,软件才会变得易于理解,从而易于使用。任何关键的设计讨论都必须围绕基本概念,并评估概念采用的行为模式是否符合它的目的。

成功案例

一个产品的创新点也往往是在概念层面上进行了创新,一个好的概念甚至可以是一个成功产品必要的条件。下面举一些成功的案例:

  • Photoshop的图层概念:这个软件成功地引入了一个图层概念,从而完全改变了后续所有相关产品的设计思路。这个概念使得非破坏性图像编辑成为可能。图层概念结合蒙版概念,就可以允许用户对图像进行局部编辑。

  • Zoom的会议创建概念:早期的视频会议软件采用了"呼叫"的概念,这个概念最开始源于电话通信。然而,通话概念的方式一般就要求用户手动加入会议,且所有参与者必须在会议开始时同时在线。Zoom 的一大创新在于它允许用户提前创建会议,并生成一个链接。其他人只需点击这个链接就能加入会议,甚至无需拥有 Zoom 账号。

  • Mac的废纸篓概念:这个概念是苹果公司在 1982 年为丽莎电脑发明的,其主要目的其实并不是删除文件,而是恢复已删除文件。这一成功的概念现在已经被大部分的操作系统所沿用。

垃圾桶图标是 1983 年 Apple Lisa 提出的众多桌面隐喻之一。虽然这台计算机被广泛认为是商业失败,但它的广告围绕着这样一个概念:它是如此先进,你已经知道如何使用它。举个例子,那个时代《财富》杂志的一则广告写道:“如果你能找到一个垃圾桶,你就可以运行一台电脑。” from: dirt.fyi/article/202…

  • 万维网的统一资源定位符概念:这个概念使得万维网不仅可以是专有网络集合,而且能够互相连通。设想没有统一定位符的概念的话,那么资源之间可能就都将是自己的孤岛。

  • 系统安全设计主要依赖了几个关键概念:一个是身份验证(鉴权)概念,用来标识用户身份以及授权概念,确保这些请求者只能访问某些资源。另一个是审计概念,确保每次访问都有真实的记录。

反例

当用户的心智模型和开发者的心智模型不一致时,他们就很容易产生困惑,无法正确使用软件中的功能。

下面举一个🌰:

在Dropbox中,文件和文件夹的删除操作基于Unix文件夹的概念,这意味着删除操作只是删除文件夹中的条目,而不是实际删除文件本身。

那么当针对共享文件夹进行删除操作的时候,情况就很有意思了。

假设小明和小红都使用Dropbox来共享文件。

  • 小明和小红共同参与一个名为“团队项目”的共享文件夹

  • 这个文件夹是独立的,并且在小明和小红的Dropbox根文件夹中都有这个条目

  • 小红决定删除“团队项目”文件夹。

  • 由于“团队项目”文件夹是共享的,当小红删除它时,他实际上删除的是共享文件夹中的条目, 被共享的用户并不会受到影响,仍然可以看到这个文件夹里的内容

  • 但是,当在这个共享文件夹中有个子文件夹,当小红删除这个文件夹的时候,就会影响到所有共享者。

误解和操作错误:小红可能没有意识到删除共享文件夹会影响到所有共享者,导致小明失去对文件夹的访问。这种误解可能会导致重要文件的意外丢失。

image

image

概念的组合和同步

一个软件中,通常不仅仅会有一个概念,如果引入了多个概念,那么这些概念之间的组合和同步就是一个需要仔细设计的事了。

概念之间可以通过以下几种不同方式进行组合:

  • 自由组合:概念通过操作来同步组合,从而形成不同的概念之间的自由组合。同步的目的是确保从每个概念的角度来看都存在相同的一组事物(我理解是为了保持软件设计中的一致性)。同步并不会增加新的概念操作,但会限制已有的操作,从而消除一些独立概念可能会出现的操作序列。

    一个典型的 TODO List 应用,涵盖了待办概念和标签概念。待办概念维护着一组任务,可分为已完成和待处理两类。标签概念是将标签与项目相关联,形成查找操作,允许用户筛选出带有特定标签的所有项目。这两个概念能够自由组合,构成较为复杂的功能。比如在删除一个 Todo 项目时,需要同步清除对应的标签。

  • 合作组合:这是一种更为紧密的组合方式,能将多个概念连接在一起,提供两个概念本身都没有的新功能。例如,当用户添加一个项目时,可以向待办事项列表账户关联的电子邮件发送一份邮件。这可以看做将电子邮件概念中接收邮件的操作和待办概念中添加任务的操作进行了同步。

  • 协同组合:这是最精妙的组合方式。通过更紧密的同步概念,一个概念的功能会增强另一个概念的功能,从而达到1+1大于2的目的。在TODO List应用中,可以用一个内置标签待处理来表示任务的未完成状态,该标签在用户添加任务时自动附加到任务上,当任务完成时自动与任务分离。(注意这里没有引入新的概念,而是通过用标签概念增强了待办概念)。

在概念组合过程中,需要注意同步设计的平衡:如果同步过多,会使用户失去控制权;如果同步过少,一些原本可以自动完成的工作就需要用户手动操作。

概念设计的一些原则

下面是一些概念设计中需要尽量遵循的原则:

  • 专一性原则:概念与目的应该能够一一对应。也就是说,每个概念都应该有一个激发它的目的;软件的每一个目的也都应该有一个完整的概念。

  • 使用熟悉或现有概念:尽量采用现有概念,避免发明新概念。如果用户对于概念能够有一些先验知识的话,那么就可以更加容易地了解和使用。

  • 完整性:在概念组合中,每个概念仍能实现其目的。下面介绍一个违反完整性的例子。比如,google drive的同步云存储概念,前者会传递(删除)操作,保持了本地和云端的一致性。而后者则更加强调备份的作用,如果设计上没有充分考虑这两者的区别,则很容易发生这样一种情况:用户误删本地文件,而因为同步操作导致云端存储也一并被删掉。

下面则是一些应该尽量避免的“模式”:

  • 无概念的目的:有些基本目的并没有与之对应的概念来实现,新需求没有对应的概念来承接。大多数电子邮件客户端都缺少通信人概念,该概念用于识别邮件的发件人和收件人,这就导致搜索用户名的时候,会随机出现结果。

  • 无目的的概念:所谓无目的的概念,我理解是相对于用户来说的。到软件设计中,这主要体现在将底层机制暴露给用户,这就会给用户带来额外的心智负担。

  • 目的不明确的概念:如果目的不清晰,就会成为复杂性的根源。例如,图像大小和分辨率的概念,图像的分辨率其实并不代表图像的质量,除非你知道图像的大小。需要理解图像分辨率,还需要理解像素阵列等。

  • 概念过载:一个概念如果有多个目的,通常是因为设计者将多个目的认为是同一个目的。比如facebook的好友概念的目的可以是“允许两个用户建立一种关系,在这种关系中他们可以看到彼此的帖子”。这里同时隐含了“过滤”和“访问控制”的两种目的,前者可以过滤到自己关注者的帖子,而后者则可以选择自己的帖子允许被谁查看。通常情况下,这两个目的是一致的,因为人际关系通常来说是对称的。但是如果要实现非对称的人际关系(比如取消关注)则需要引入新的概念。后来2011年的时候,facebook引入了关注概念,只用于过滤帖子来解决这个问题。

  • 冗余概念:两个概念之间的作用如果相似或者雷同,则可以看做是冗余的。例如,早期在gmail中,使用了分类概念,同时也使用了标签概念,这两者其实属于概念冗余。(目前,gmail已经把分类合并到标签里去了)

下面是书中关于概念原则的总结:

image

结束

概念设计在软件开发中扮演着至关重要的角色。良好的概念设计不仅能够提升软件的易用性,还能为用户提供更好的体验。通过深入理解和应用《软件设计的要素》中提出的原则和方法,我们可以创造出更加优秀、直观和用户友好的软件产品。

从概念可以生成心智模型以及用户界面,还有代码之间的关系。现在随着大模型的发展,其实我们可以尝试设计好对应的概念之后,就可以利用大模型去为对应的概念生成代码,然后再使用概念组合的方式来构建整个软件。