第1章 没有最佳实践会怎么样

软件架构师等技术专家为什么要在大会上演讲或者写书?那是因为他们找到了所谓的“最佳实践”。虽然这个词已经被滥用到了光是提起它就会引起人们的抵触,但忽略这个词本身,技术专家写书是因为他们找到了新的方式来解决某个通用问题,希望借此传播给更广泛的受众。

但是如果大量的问题根本没有好的解决方案呢?软件架构中的所有问题其实都没有好的解决方案,有的只是针对一团乱麻的问题集合做出的(几乎)同样混乱的权衡取舍集合。

对于上网搜寻当前问题的解决方案来说,软件开发者个个技艺高超。例如,需要了解如何在环境中配置某个特定的工具时,只需熟练使用谷歌就可以找到答案。

但是这不适用于架构师。

对于架构师来说,很多问题带来的挑战都是独一无二的,这些挑战与组织中特定的环境和情况息息相关。

架构师可能疑惑过,与讨论框架、API等技术话题的书相比,为什么关于架构的书如此之少。架构师很少遇到通用问题,他们持续地在各种新奇场景中艰难地做着抉择。对于架构师来说,问题就像雪花,没有两片雪花是相同的。在很多情况下,问题不仅对于这个组织是新的,而且对于整个世界来说都是新的。没有任何已有的书籍或者会议讨论过这些问题!

架构师不应该盲目地为这些问题寻找银弹,它们和Fred Brooks在1986年创造这个词时一样稀少:

未来十年之内,无论是在技术上还是管理上,都不会有能将生产力、可靠性或简洁性提高一个数量级的单一的重大突破。

——Fred Brooks,“No Silver Bullet”

由于几乎每个问题都提出了新的挑战,因此架构师真正的工作在于他们能够客观地确定和评估相应决策每一方的权衡取舍,以尽可能好地解决问题。本书不讨论“最佳解决方案”,因为“最佳”暗示架构师成功地在设计中最大化了所有可能相互矛盾的因素。相反,我们的建议有点像开玩笑:

不要尝试在软件架构中寻求最佳设计,而应力求寻找不那么糟糕的取舍组合。

通常,架构师能做出的最好设计就是不那么糟糕的权衡取舍集合:没有哪个单独的架构特征能一骑绝尘,唯有平衡所有矛盾的架构特征才能让项目走向成功。

这也引出了一个问题:“架构师应该如何寻求这个权衡取舍集合(并有效地把它们记录下来)?”本书主要讲的是决策制定,帮助架构师在遇到全新的情况时做出更好的决策。