会看这本书也算是个意外。
本来我是在找架构类的书,看到这本书的名字,就拿了起来。虽然内容和我设想的不一致,不过确实也获益良多。
这本书讲的是真正的“软件设计”。作为开发人员,每次提到设计,我的思路就会立刻进入细节的层面,比如界面设计、交互设计、功能设计、系统架构设计、数据安全设计、扩展性设计,等等,考虑不到更加宏观的层次。这本书可以说是打开了一扇大门,让我初次认识到“设计”本身的深度和广度。
和其它很多技术理论性的书相近,这本书近似于论文合集或者论坛精华合集,分为若干章,每一章是一个主题,通过理论及案例描述设计的一个侧面。在看的时候,常常会有“原来还有这个”的惊喜。
第一章:软件设计宣言
设计早就存在于生活工作的方方面面。软件存在的历史不长,而软件设计独立出来时间更短。这一章介绍了软件设计学科的起源以及覆盖范围。
第二章:概念模型的设计
概念,或者说思想,是设计的灵魂。与众不同的思想,不仅仅影响着一个产品的接受程度,也会影响到一家公司的成败,甚至影响到历史的进程。比如鼠标的设计、窗口视图的出现、图形界面的交互模式、触摸屏,这都大大影响了计算机相关文化的发展方向。更进一步,最开始的操作系统,是设计在浏览器中运行的页面。这个设计因为种种原因失败了,但是如果它成功了,我们现在所使用的操作系统就会完全是两个样子。这就是概念的影响。
第三章:艺术家——设计者的角色
创造是艺术,设计是工程,这是传统的思路。越来越多的人开始认识到,创意、创新是设计中非常重要的部分;苹果手机也让简洁美观的外表与交互,越来越受到重视。把设计当成艺术来看,就会发现完全不同的思路。这里让我感觉到与架构设计的类比:只有充分积累了一线的经验(开发或者设计),才能真正体会和理解更高维度的思想(架构或者艺术)。
第四章:设计语言
就像是“黑话”。比如模块、部署、服务器等等,就算是开发者的黑话(入门级黑话)。金融领域的黑话更多。设计上的黑话同样存在。最主要的一点是,如果要创新,就要从设计语言上去创新。以开发为例,面向对象编程、函数式编程、分布式、大数据、云计算,这都是被创造出来的黑话,也带来了新的概念。设计上也是如此,当初的鼠标、窗口、图标、点击、双击、右击,这都是一种设计语言(黑话),如今已经成为常识。要做创新性的设计,就要创造新的设计语言(即使没有意识到设计语言的影响,创新性的设计也会带来新的语言成分)。
第五章:不同消费者类型
设计当然是面向用户的,这是现在大家已经了解的思路。不同的用户,需要不同的设计。“愤怒阈值”这个概念,让我更加了解了“不同用户”的核心差别。
第六章:以行动为中心的设计
设计如果是以技术为中心,就只是炫技;以用户为中心,可以创造出人性化的产品;以行动为中心则更进一步,能够将现实生活中的行为映射为产品,从而提供更多的便利。工作流类的产品就体现了这一思路。设计的根本目的,不是创造新的产品,而是为用户提供便利。“有用”要比“新颖”重要得多。
第七章:保持简洁
苹果的产品把简洁变成了大家都会挂在嘴边的常用词。实际上,无论是设计也好,开发也好,任何工作都是一样的,想让它变得复杂很容易,而想让它变得简单是非常困难的。简洁绝不是简陋,绝不是什么都没有,而是在什么都有的情况下,仔细推敲、设计出来,能够满足用户需求的。这要求设计人员有极高的洞察力,能够观察到事物的本质,从而抽象出最核心的部分。“大道至简”,“简”是目标和结果,“大”是前提。
第八章:设计者的立场
设计者要有创造性;而创造性并不是天才专有的或先天带来的才能,是可以通过学习、培训发展开放性和意愿,从而得到的技能。设计自身是有方法论的,常见的一个版本是:理解(背景和问题)、观察(目标及相关领域的现状及行为)、可视化与预测(用户参与的原型设计)、评价与细化、实现。
第九章:与材料的反应式对话
通过观察材料或者约束,产品的实际使用情况,都可以为设计带来意想不到的好处。
第十章:原型文化
敏捷开发模式的流行,就是为了让用户更早参与到开发流程中来,让变更尽量在前期引入,以避免后期变更的极高成本和风险。设计同样需要类似的原型文化。
第十一章:设计的立足点
设计是有出发点的,比如题目限制、材料限制、成本限制、工具限制等。在设计过程中,这个立足点可能会逐渐改变,而这将会带来设计方案的本质性变化。
第十二章:成熟的设计
实际上的设计并不是空想,而是与组织架构、业务重心、企业文化等实际情况结合在一起的。文中以苹果的电脑电源按钮这一看似简单的设计为例,讲述了实际工作中的设计复杂到什么程度。有时,从这些更根本的方面入手开始改变,会引发企业自身的变革,从而在产品层面得到更优秀的设计。又是一个不到一定高度就不能真正理解的观点。
第十三章:软件设计的组织支持
确立并保持明确的目标,关注客户,使设计人员有更大的权利,这三点是组织需要支持的。
第十四章:为一线人员设计
看起来很好的设计,在实际应用中可能很糟糕,本章出给出了若干个例子。主要的原因有:忽略了人的感情因素和创造性因素,降低了技能因素的影响,损害了人的自主性。传统的设计是以工作为本的,现在应当以人为本。否则,本意很好的设计,会在实际中带来非常差的影响。