怎样才能成为一名专业的软件设计师呢?一个典型的答案是:经验和天赋,但这并不能令人满意。尽管它包含了真理的要素,但它几乎没有提供给我们任何可以学习的途径。专业设计师们显然不只是随机地处理他们的工作。恰恰相反,他们在设计工作中会有一些特定的习惯、学习实践方法以及一些要遵循的原则。
有些我们可能对它们很熟悉,而另外一些则不然。但是,一个不变的事实是:专业的软件设计人员能敏锐地意识到所有这些实践方法,并在必要情况下加以利用。
基于多年来对专业软件设计师及其工作方式的研究,我们的《软件设计解码》( Software Design Decoded )一书阐明了其中的 66 种习惯、实践和原则,下面将重点介绍其中的一些。它们已经被相应领域的工作人员反复验证过了,并且每一种都可以追溯到记录专家行为的学术文献。这本书的 配套网站 提供了带有注释的参考书目,该参考书目汇集了关键的基础文献,并为我们对此提出更多见解。
如今,软件不再受限于技术,而是受限于想象力。然而,将想象变为现实的软件可能会很复杂。这对软件设计师提出了非常高的要求,只有我们共同“提升”以实现可持续的卓越设计,才能满足这些要求。我们希望这些插图能起到画龙点睛的作用。
1)让用户参与
Clara Mancini 设计的 狗专用 开关。
专家们对用户非常了解。他们刻意让用户参与到设计过程中,研究他们、与他们交谈、让他们参与测试中间设计,甚至让他们在设计团队中发挥积极作用。
然而,专家们对用户所说的每句话并不完全相信。他们意识到了潜在的局限性,因为用户的思维常常受到当前体验的影响。专家们不仅要关注用户的需求,还要关注用户真正需要的东西。
2) 设计优雅的抽象
当所有开发人员都创建抽象时,专家将对其进行设计。一个好的抽象可以很清楚地说明什么是重要的,无论是关于它是做什么的以及它是如何实现的。通过一个单一的镜头,它传达了它想要解决的问题及它解决问题的机制。
专家们并不满足于任何抽象,他们刻意寻求优雅的抽象,通过这些抽象可以有效地引入、理解和引用复杂的结构。
3)专注于本质
每个设计问题都有一个本质及一套核心的考虑因素,这些因素在设计解决方案中必须被理解并被“钉住”,才能成功解决问题。这种本质可能是破坏性的:需要做出的外围决策会因为核心的变化而彻底改变。专家们首先会将精力集中在本质上,然后才会放到外围的设计上。
4)不断模拟
专家会通过模拟其设想的软件的各个方面以及设计的不同部分是如何支持各种场景的,来想象一个设计是如何工作的。当与他人合作时,专家们会通过逐步地讲解设计的操作来定期检查设计。当他们独处时,他们会在心中进行模拟,随着时间的推移反复练习设计。
5)环顾四周
就像建筑师在城市中穿行考察并从现有建筑物中汲取灵感一样,软件专家也会检查其他软件的设计,“看看它们是如何做到的”。他们经常这样做是为了应对他们面临的特殊挑战,但是他们还经常花时间环顾四周,只是为了发掘他们将来可能会使用到的设计解决方案。
6)重塑问题空间
专家们通常会回避已提出的问题而是更广泛地考虑问题空间,寻找理解“问题是什么”的替代方法。他们可能会通过调整问题空间来改变方向,或是在同一空间中解决不同的问题。他们会有意识地选择与原始设计问题不同的目标,因为这有助于他们洞悉真正问题所在或是找到如何克服关键障碍的方法。
7)视错误为机遇
设计经常会出错:“失误”、误解、故障、错误的开关、紧急情况等。专家们并不惧怕错误,而是将错误视为机遇。他们接受错误是设计的一个固有部分,并愿意花时间来探索失败和其上下文环境。理解所发生的事情往往会揭示出对问题或解决方案的见解,例如假设、误解、偏差及紧急特性。
8)好好考虑他们没有设计的东西
虽然关注设计必须做什么是自然而然的,但是专家们也会花时间思考设计不打算做的事情。在阐述和考虑边界时,他们会发现自己在哪些地方设计过度了、哪些地方设计不足。 |