Open winterggg opened 5 months ago
本文取材自《The missing readme》-- Chapter 10
软件设计不是一个线性的过程,更像是在独立工作和相互合作之间交替进行的螺旋式上升的过程,在每一步都要明确和完善设计。随着每一次迭代,设计文档变得更加清晰和详细,你对对解决方案的信心也在增加。
1/ 定义问题
首要任务是定义和理解你要解决的问题:
将你从各个地方收集到的答案整理成清晰的问题陈述。
2/ 着手调查
3/ 进行实验
编写 demo 和运行测试验证想法。实验能增加对方案的信心、暴露出设计上的权衡,并澄清问题空间。你也会感受到你的代码将被如何使用。在你的团队中传阅你的原型以获得反馈。
4/ 给些时间
给自己安排大段的不被干扰的时间进行设计。
设计是一种每天24小时都在进行的工作,所以要有耐心。你的大脑总在酝酿着各种想法,创意想法会在一天内随机出现(甚至在你睡觉的时候)。
即慢思考,不要总是在头脑风暴 :)
1/ 设计文档的目的 设计文档是一种工具,可以帮助你思考、获得反馈、让你的团队了解情况、培养新的工程师,并推动项目规划。
写作拥有一种暴露你不知道的东西的能力。迫使你自己写下你的设计,迫使你去探索问题空间,并使你的想法具体化。你将不得不面对其他的方法和理解上的差异。这是一个动荡的过程,但是经历了这个过程,你会对你的设计和它的权衡有更好的理解。通过写下你的设计,你会得到清晰的思路,也会使设计讨论更有成效。
感觉就相当于是费曼学习法的一种实践形式。人脑是很弱鸡的,对于一次性完全掌握并做出复杂设计这样的任务可能存在局限性,尤其是当我们仅停留在脑海中思考而不将其外化为具象形式时,往往难以发现思维中的盲点和漏洞。 而以文字向他人讲述你的设计,可能会遇到一些难以表达清楚的地方,这正是我们尚未充分理解的部分(在口头表达中感觉这部分很容易通过技巧和气势锁略过)。通过反复推敲、修正和完善,我们能逐步填补认知空白,加强对复杂设计的全面理解和掌控力。
感觉就相当于是费曼学习法的一种实践形式。人脑是很弱鸡的,对于一次性完全掌握并做出复杂设计这样的任务可能存在局限性,尤其是当我们仅停留在脑海中思考而不将其外化为具象形式时,往往难以发现思维中的盲点和漏洞。
而以文字向他人讲述你的设计,可能会遇到一些难以表达清楚的地方,这正是我们尚未充分理解的部分(在口头表达中感觉这部分很容易通过技巧和气势锁略过)。通过反复推敲、修正和完善,我们能逐步填补认知空白,加强对复杂设计的全面理解和掌控力。
另外如果表达能力弱的话,用设计文档来征求反馈可能更加高效(
2/ 保证文档是最新的
文档其实可以分为两部分:
提案中废弃的方案注意标注出来,但注意最好不要删除历史提案,因为如果未来的开发者(或者自己)无法看到那些导致设计决策的讨论,可能会重蹈覆辙。
可以对设计文稿进行版本控制。
感觉可以用 Markdown + Git 作为方案设计的 single source of truth :>
1/ 不要让人惊讶
及时向reviewer汇报设计的进展。
2/ 进行头脑风暴
将头脑风暴分成多个会议,由不同的参与者参加,集中讨论设计的不同方面。
头脑风暴会议的规模从2人到5人不等。当一个问题特别多元或有争议时,要选择更大、更有包容性的头脑风暴会议。对于更直接的讨论,应保持较少的被邀请者人数,使谈话更容易进行
安排一个记录员。
如何做方案设计
软件设计不是一个线性的过程,更像是在独立工作和相互合作之间交替进行的螺旋式上升的过程,在每一步都要明确和完善设计。随着每一次迭代,设计文档变得更加清晰和详细,你对对解决方案的信心也在增加。
1 关于设计的思考
1/ 定义问题
首要任务是定义和理解你要解决的问题:
将你从各个地方收集到的答案整理成清晰的问题陈述。
2/ 着手调查
3/ 进行实验
编写 demo 和运行测试验证想法。实验能增加对方案的信心、暴露出设计上的权衡,并澄清问题空间。你也会感受到你的代码将被如何使用。在你的团队中传阅你的原型以获得反馈。
4/ 给些时间
给自己安排大段的不被干扰的时间进行设计。
设计是一种每天24小时都在进行的工作,所以要有耐心。你的大脑总在酝酿着各种想法,创意想法会在一天内随机出现(甚至在你睡觉的时候)。
2 编写设计文档
1/ 设计文档的目的 设计文档是一种工具,可以帮助你思考、获得反馈、让你的团队了解情况、培养新的工程师,并推动项目规划。
写作拥有一种暴露你不知道的东西的能力。迫使你自己写下你的设计,迫使你去探索问题空间,并使你的想法具体化。你将不得不面对其他的方法和理解上的差异。这是一个动荡的过程,但是经历了这个过程,你会对你的设计和它的权衡有更好的理解。通过写下你的设计,你会得到清晰的思路,也会使设计讨论更有成效。
另外如果表达能力弱的话,用设计文档来征求反馈可能更加高效(
2/ 保证文档是最新的
文档其实可以分为两部分:
提案中废弃的方案注意标注出来,但注意最好不要删除历史提案,因为如果未来的开发者(或者自己)无法看到那些导致设计决策的讨论,可能会重蹈覆辙。
可以对设计文稿进行版本控制。
3. 协作设计
1/ 不要让人惊讶
及时向reviewer汇报设计的进展。
2/ 进行头脑风暴
将头脑风暴分成多个会议,由不同的参与者参加,集中讨论设计的不同方面。
头脑风暴会议的规模从2人到5人不等。当一个问题特别多元或有争议时,要选择更大、更有包容性的头脑风暴会议。对于更直接的讨论,应保持较少的被邀请者人数,使谈话更容易进行
安排一个记录员。