郭东白的架构课50
你好,我是郭东白。
上节课我们讲了架构师在架构活动中所需要的思维模式,并强调这些思维模式是阶段性的,要随着架构活动生命周期的变化而调整。
与此同时,我们还强调了思维和思维是架构活动实施前所需要的。那么进入架构活动后呢?也就是在执行阶段和复盘阶段,我们应该采用什么样的思维方式呢?这就是我们接下来要探讨的问题。
执行阶段:实用主义思维
一旦进入执行阶段,我们就要在最大程度上保障用户价值的交付了。那么在这个阶段我们要具备什么样的思维方式呢?
答案是实用主义思维(Pragmatism)。如果具体到软件架构的上下文里,实用主义思维指的就是以实际增值作为检验架构设计唯一标准的思维方式。
实用主义思维是近代美国最重要的哲学思想,可以说,它影响了整个美国发展和壮大的过程。时至今日,依然是美国社会主流的思维方式。
不过实用主义思维并不是美国人独有的。它是一种比较朴素的思想,在中国的历史长河中,也有很多思想家非常崇尚实用。即使是最具理想主义的庄子,在他的部分文章中也体现出了实用主义思想,“屠龙之技”就是最直接的例子。除此之外,还有距离我们比较近的例子,譬如*理论中的“黑猫白猫,能抓到耗子的就是好猫” 。
如果说你是一个信奉实用主义的架构师,那肯定会认为应该以实际的价值和最终的商业成败去理解模型和架构设计。换句话说,商业的成功就意味着架构设计的正确。
实用主义与上节课提到的实证主义不同。实用主义认为理论是实践的工具,一切理论都由它所带来的实际增量价值来评判。没有产生价值和实际影响的理论就是虚无的,没有任何意义。反之,能带来持续价值的理论就是真理。可以发现,与实证主义相比,实用主义思维在一定程度上是轻理论、重实践的。
相比之下,实证主义的核心是先从理论(规律)出发,实践是对理论的检验。一般来说,架构师的成长主要靠从架构活动中总结和沉淀的规律,同时不断修正这些规律,最终形成能够指导实践的理论。
因此我们上节课强调,从职能定义上来说,就要求架构师必须坚持实证主义。甚至要相信由于现实环境的复杂性,结果的失败不一定代表规律的失败。不能一上来就放弃对规律的信心,而是要进一步分析规律失败的根因,然后做出相应的修正。所以我在第一节课就表达了,我会把实证思维当作贯穿架构师职业生涯的思维方式。
但是你可能会问了,为什么到了架构活动的实施阶段,我更建议你采用实用主义的思维方式呢?而且,我们不是说架构师要关注整体的结构性嘛,那改成实用主义思维的时候,还要不要关注模型和规律呢?
这些都是好问题。架构规划在实施之前,相当于一个还不存在的想象,没有任何实际的载体。在架构活动初期,为了完善这个想象,我们不断强调全方位思维和批判思维。而一旦到了执行期,要做的工作就是将想象转化为现实,那么我们的目标就是在最大程度上实现它。
一个被实现了的想象,才是一个能生存下来的、能够被见证和检验的理论。而这个检验的过程,就是对架构理论的一次实践和验证。如下图所示:
如图所示,架构理论和架构规划属于理论部分,而项目交付,以及由此带来的实际结果和最终的价值创造则属于实践部分。
在完成交付之前,架构规划仅仅存在于理论世界之中,没办法创造真实的价值,也没办法接受检验。因此,我们要以实用主义的思维最大化实现过程,尽力保障交付。只有这样,一个存在于理论世界的架构规划才能在现实世界中生存下来。
也就是说,不惜一切代价保障实践结果、交付用户价值,其实是实证主义验证过程的一个必要条件。原因很简单,如果你的规划停留在图纸上,那么对规划的验证,甚至是部分验证,也就无从谈起。
如果架构规划完成得不够完美,但至少保留了部分的验证能力,也是有价值的。这也就是为什么我们在模块二里非常强调交付最小价值单元(MVPU)。
这种理念也跟我们法则五的最大化企业生存的理念相契合,活下来永远是第一优先级。架构也是如此。当架构思想在现实世界中生存下来,你才能得到反馈。我们可以在整个职业生涯中都相信实证思维,但是在这个阶段,更要用实用主义思维去指导行为,在最大程度上实现实证主义的理想。这两种思维模型并不冲突,仅仅在使用的场景和范围上有差异。
当然,并不是所有架构活动刚到实施阶段就需要生离死别的取舍。多数时候,我们完全可以坚持实证主义,首先关注建模,对规律进行抽象和利用,只在极端取舍的时刻才以实用主义思维方式来保障生存。
有了实用主义思维的保驾护航,就能在最大程度上完成我们的架构活动。那么接下来的问题是,到了复盘阶段,我们还要坚持使用实用主义思维吗?
答案是否定的,我们又需要换一种思维方式了。
复盘阶段:反思和分析思维
在交付结束之后,最重要的节点就是复盘了。关于具体的复盘动作,我们在模块二里有详细的描述,这里就不再重复了。
一提到复盘,你可能会马上联想到反思思维。是的,我们在课程里反复提到了反思这个词。不过这个词有些被用烂了,我先来试图解释一下反思思维(Reflective Thinking)。
首先,反思是批判思维的一个具体应用。反思是一个理性的思考过程,是基于逻辑思维的、理性的、怀疑的、公正的思维方式。
其次,反思过程的主要作用对象是你自己。反思首先是个自我批判的过程。我们前面提到的批判思维虽然也包含反思,但它的作用对象更多是一个客观的对象,也就是对架构规划进行批判。而反思,一般来说更关注的是自己,因此这是一个怀疑自己或团队的过程。
最后,反思的内容主要是自己的思考方式。在复盘过程思考的对象,就是你在架构活动中的思考过程本身。说得更直白一点,你在为过去的思考逻辑找Bug:我到底因为何种思考方式的缺陷导致漏算了?
反思还有其含义,但我认为以上三点是最主要的心法。如果能在日常中把这个心法应用好,思考力肯定能提升到一个全新的层次上。
不过可能你在学习复盘这节课时已经感受到了,在复盘的过程中,这个“我” 不仅指架构师,还指参与架构活动的整个集体,是从决策者到赞助者再到执行的每一个人。而你作为架构师,只是在帮助整个公司完成复盘的反思。
那么有了反思的思维方式,是不是复盘就完美了?当然不是,反思只解决了一个问题,即所有参与者的思考态度的问题。在研究架构活动的得失时,不把自己的失误排除在外。但这并不能保障我们可以找到所有的根因。
与上节课提到的架构规划不同,一个项目的失败,与导致这个项目失败的因素是“或”的关系。任意一个强依赖失败了,整个项目就失败了。那么如何寻找所有的相关因素呢?
复盘在英文里有一种说法叫“Post Mortem”,直译过来就是“尸体解剖”。在这个过程中,我们需要的其实就是剖析的思维方式,也就是分析思维(Analytic Thinking)。
分析思维和上节课提到的全方位思维正好是相对的。很显然,全方位思维在复盘过程是帮不上什么忙的。我们已经知道架构活动出现问题了,现在的目标是寻找根因,找到一个或多个导致整体失败的因素。而不能认为失败就是集体的失败,有责任大家一起抗。
那么在分析思维模式下,什么样的思考过程才能最大化复盘的价值呢?
第一,分解问题。分析思维本身就是把一个整体拆解成更小的、更容易理解的部分。在这个过程中,我们需要从多个维度上做拆解,把父问题拆解成更细粒度的子问题。
在这里,重点在于控制分解的维度和粒度。作为架构师,要把注意力放在最终能创造的价值上。首先要找到能够带来最大价值的维度,然后在这个维度上持续分解和下钻,发现更细粒度的关键点。最后,将那个通过最小改变就能带来最大增值的点,作为解决问题的关键点。
我们之前介绍的复盘过程中的“5Whys”,就是分解和下钻的具体方法。
第二,发现重点。影响架构活动的因素太多了,多数时候,通过一次复盘得到的结论的有效性是存疑的。因而最重要的是找到2-3个高价值的改进点,而不是找到几百个不一定有啥效果的跟进项目。这是个深度思考和发现的过程,不是把任务简单地分配给不同领域执行者的过程。
第三,追溯本质。在复盘时,要在探索问题本质的过程中不断深入,发现抽象的、跨领域的、在更长周期中有效的不变量。在这些不变量上做提升,从而带来更具普遍性的价值。
在这个过程中,架构师的职责是在逻辑上挑战一个复盘者思考的同时,对不变量的价值做出判断,直到找出高价值的不变量为止。同样,我们在之前介绍的复盘环节中,对如何通过寻找不变量来推进思考的过程有详细描述,这里就不重复了。
整个过程可以由下图来表示:
你可以把这种思维方式与全方位思维方式对比一下,其中的差异还是很大的。
这里有个很有趣的现象。当你养成深度的分析思维的习惯之后,会帮助你提升自己的全方位思维能力。因为做全方位思维时,其实就是把每个执行领域或者每个维度上的细节思考,委托给其他人去完成了。但是很显然,这个委托过程是不完美的,最终也会遇到失败。
那么在细节上的深度复盘,不仅会帮助你识别委托者的漏洞和验收逻辑的漏洞,同时也会帮助你提升全方位思考的能力。
架构活动中的思考方式
架构活动的生命周期有很明显的特征,需要不同的思考方式。如下图所示:
在目标确认、可行性探索和架构规划的过程中,我们需要在最大程度上使用全方位思维。这个使用的峰值发生在目标确认的环节上。
在可行性探索阶段和复盘阶段,我们都要使用批判思维。所以代表批判思维的使用程度的曲线有两个峰值。第一个是较大的峰值,处在可行性探索的过程中。你需要通过批判思维来保证风险和预案的评估是否足够客观,而不是沦为形式。第二个峰值是在总结复盘的过程,你需要通过批判思维来提升参与者的思考质量。
规划确认的后期、项目启动、阶段交付和全面上线的过程中,则主要采用实用主义思维。而到了复盘阶段,则主要采用反思和分析思维方式。
这张图也表示了每种思维模式在每个节点上可以创造的价值。这些思维模式不是零或一的状态,而是在每个节点上都占有一定的比重。
举个例子,在节点二的目标确认环节,最重要的思维模式是全方位思维。但是这个节点上有一个步骤是判断和锁定核心执行团队。这个时候,坚持实用主义思维就至关重要了。你要以最大化实践成功的概率为唯一的评判标准,首先选择“能拿耗子的好猫”。
小结
我们这两节课讲了四种思维模式。如果你感兴趣,可以看看相关的哲学书籍和课程。这方面的文献也有很多,我们提到的每一种思维方式都有人花毕生的精力去研究。
不过,我其实没有把每种思维都系统性地研究过,甚至不能说真正理解了任何一种模式。在学习思维方式上,我更认同实用主义的学习方式。任何一个思维方式都需要大量的机会去验证, 我们的生命有限,没办法学到滚瓜烂熟之后在多个平行宇宙中做A/B实验。
所以我采用的办法是在最早的时间点去实践,好用就延续。如果试了不能解决实际问题,就去研究是不是我学得不到家,到处找找文章和书籍看一下, 回头再去重试, 或者是换一个学说和方法论试一下。
对我个人而言,这种先尝试再学习的过程更容易一些, 因为很多哲学书籍看起来太烧脑了, 学习成本非常高。
所以, 如果你喜欢我们这两节课里面提到的任何一种思维方式,我建议你不要等,今天就在工作中尝试一下吧。
思考题
三个思考题,你如果有心得,那么答案应该都比较长, 我建议你就选其中一个做深度的回答。
第一题,关于批判思维,有这样一个悖论。一个持有批判思维的架构师在一个信仰驱动或者等级森严的企业文化中很难生存。教众们都认为他是个自以为是的个人主义杠精。 但事实上,正是因为这种文化中缺乏理性思维,他才能最大程度地创造价值。反倒是人人都是理性主义者的学院型企业,他的批判思维也就没那么大的用途了。你是怎么看待这个悖论的呢?你有见过类似的案例吗?
第二题,我们整个课程都是基于理性思维的,这跟我个人的思维模式有关。我不太相信靠信仰而提升成功概率的理念,甚至是拒绝相信的。不过在人类历史上,信仰的价值的确非常大,尤其是在战争中。这也是我个人没有思考清楚的地方。
那么,在你的职业经历或学习中,有见到过由信仰驱动而带来成功的架构案例吗?如果有的话,请你多描述一下背景。
第三题,任何思维模式都需要一个能够被接受的交流环境,否则就会像被关在疯人院里的智者。你有过类似的经历吗?后来你又是如何从“疯人院”里逃出来的呢?
欢迎把你的思考和想法分享在留言区,咱们下节课再见!
本文来自博客园,作者:易先讯,转载请注明原文链接:https://www.cnblogs.com/gongxianjin/p/17012868.html