郭东白的架构课45

你好,我是郭东白。很快就到了这个模块的末尾,这节课我们来简单总结一下。

什么是结构性?

整个模块是从架构师的角色定义开始,而后引出架构师最核心的价值创造,也就是设计和实施结构化软件系统的能力。

不过这个定义其实把“架构师的核心价值创造到底在哪里”,转化成了“什么是结构性”这个问题。那么现在让我们再重新诠释一下模块导读中的这幅图:

“结构”这两个字在图中仅仅出现了一次,也就是架构师的准备阶段,程序员角色所必须具备的结构化设计能力。之后的四个能力,看起来似乎跟结构性没有什么关系啊?这是为什么呢?

事实上,另外四种能力,都是我们对“结构性”这个词内涵的拓展。

你应该还记得,我们在第37讲定义“结构化”时,使用了同质(Homogenous)这个词。请仔细回顾和思考整个模块三的内容,会发现我们在定义架构师的能力维度时,都维持了“同质”这个概念。但是在这个过程中,我们对每个能力维度到底要在哪些方面维持同质,也就是对同质这个词所描述的对象,作出了修改。

这些对象,其实就是不同架构师角色创造的结构性价值的作用域。用更朴素的语言来说,就是架构师不同成长阶段的领地。那么接下来,我们就总结一下在维持同质这个核心价值上,具有不同能力维度的不同架构师角色的领地是什么。

首先是程序员/代码的结构性,这是软件结构性的最小起点,指的是每个程序员提交的代码在设计上的一致性。代码是所有上层软件结构性的最终载体,也是现实世界中所有结构化决策,最终具象化到软件世界中的呈现方式。这种一致性的主要价值,在于代码的可维护性,以及代码易于变更、升级迭代和扩展的性质。

然后是兼职架构师/横向问题的解决方案。这是第一层抽象,也就是在多个代码模块中间共享同一个横向问题的解决方案,让横向问题的解决方案在多个模块中是一致的。这种一致性往往来自一个简单的组织抽象,也就是在多个代码模块中共享同一个有解决横向问题的兼职架构师。这种一致性的价值,就在于更低的实施成本和更高质量的解决方案。

接着是跨域架构师/整体的解决方案。这是第二层抽象,指的是在多个领域之间维持整个解决方案的结构性。这种结构性体现了设计理念、数据模型、信息交互的一致性,最终将促进整个领域的结构性。这种结构性的价值,就在于让整个领域的软件质量更高、可维护性更好、更容易升级迭代。

接下来是总架构师/决策原则。这是第三层抽象,指的是在软件架构相关投入上的决策原则,在整个企业内具有一致性。也就是说,总架构师的存在是为了保障企业在不同层次、不同领域上的软件投入的决策原则是同质的。这个决策原则,就是最大化技术的长期增值。

程序员、兼职架构师和跨域架构师,这三个角色都是在依照同一个假设来工作的。这个假设就是更高层次上的软件系统的结构性,会带来更好的外部适应性。这三个层次,按照从高到低的排序,依次是跨领域的、横向问题上的、代码层面上的一致性。

这些性质似乎是多多益善的。但事实上,实施这些假设需要投入研发成本、时间成本、甚至是机会成本才能完成。而一个公司中的研发资源是有限的,那么首先应该在哪个领域中的哪个层次投入呢?是否应该现在就投入呢?这就是要由总架构师通过最大化外部适应性的原则,来做出优先级决策的内容。此外,他也要为这些决策应该带来的预期商业回报和实际结果的一致性负责。

最后是CTO/企业生存优先的理念。这是最高层次的抽象,指的是理念上的一致性。我们在课程中提到了,从CTO的视角看,企业在决策理念上应该和CEO视角保持一致,也就是最大化企业的生存。在这个理念之下,企业的资源投入,不论是在技术、运营,还是市场,都应该和最大化生存这个目标保持一致。技术这个职能没有特殊性,仅仅是其中一个手段。

需要强调的是,这个理念背后是公平的价值观。而这个理念对整个公司来说都是极端对称的,是公平意志的体现。而这种理念一致性的价值,就是最大化企业的长期生存。

你可能会质疑,CTO这种终极的理念一致性,似乎已经超出了软件架构设计这个范畴。为什么我作为一个一线的工程师还需要学习呢?

在日常的架构决策中,你不一定会用到CTO这种视角。但是也要知道,寻求最大化生存这个理念,一定会体现在架构设计的方方面面,包括如何保证一个软件模块能够被快速变更,而不影响到整体的稳定性和结构性。

其次,我们在课程里不止一次提到过理念的一致性和规则的公平性。比如规则本身的对称性,对规则而不是权威的尊重,对架构师活动中共识的建设、决策信条的建设和迭代优化,等等。你肯定已经意识到了,这种理念的一致性,不仅对于CTO这个角色来说很重要,其实对于企业中每个职能的每个行动都至关重要。

这种理念的一致性,与我们在第14讲里提到的相信过程正义如出一辙。也就是说,这种理念一致性是渗透在日常行为中的,在职业生涯中是连续的,是和决策的规模无关的(Scale-Invariant)。小到一个团队内的设计评审和季度评优,大到整个企业的管理,保持理念的一致性,能让最终决策为大多数所认同,并被更高效彻底地执行。

能力成长的关键,在于发现和跨越障碍

我们整个模块内容都遵循着一个表述模式,就是要先看清楚目标:在一个新的角色上要解决什么问题?为什么这些问题需要开发一个新的能力维度?然后我们再分析:现有能力为什么不满足这个新的目标?最后再分析:成长出这个新能力维度,所需要跨越的障碍是什么?

如下图所示,完整表达了这个分析过程:

其实这是个非常有用的解决问题的模式,就是先找到问题的本质,再寻找解决问题的方法。从程序员成长到CTO的过程中。我们需要认识清楚的是每个重要的成长阶段,必须迈过去的是哪个坎儿,它为什么在那里,该怎么克服。

我相信你在学习的过程中已经意识到了:跨越这些障碍是件很不容易的事情,要付出成本。不过,我们从程序员一口气讲到了CTO,似乎每个人做架构师的终极目标就是成为CTO。真是这样吗?

我之前在做架构师演讲时进行过一个调研,问架构师学习班的学员和刚刚入行的架构师们“为什么要做架构师?”我得到最多的答案是“架构师挣钱多”和“架构师的权力大”。

我们先用挣钱这个目标来分析一下。事实上,一个大公司的资深架构师的现金回报,远远大于一个小公司的CTO。也就是说,如果仅仅以收入为优化目标,你不一定要一口气成长为CTO。

如果我们用权力这个目标来分析一下。同样地,你会发现一个大公司里管理者的管理幅宽,往往要大于一个小公司的CTO。此外,由于大公司的团队稳定性高,他们的管理理念更容易贯彻到每个人。

那么,在我们第一张图里表示的不同能力维度上的成长,跨越的那么多障碍,最终能得到什么呢?

答案很简单:你能够获得这些能力。或许这些能力和金钱、权力有一定的关系,但是这些回报,是由使用这些能力的场景规模和带来的具体商业回报决定的,与能力并不是直接相关的。

如果仅仅是得到能力的话,你还愿意投入吗?

我的答案是:当然愿意。我认为人生就是要最大化自己经历的丰富度,所以我非常喜欢自己从程序员到CTO的成长过程。每一段经历,都给我带来了不同的思考和体验。所以如果你向我咨询职业发展,我认为成长过程和获取新的能力维度的过程,才是最美妙的。我想象不出为什么任何一个有条件的人不这样做。

那么接下来我们就总结一下这些条件。

还有其他的必要和充分条件吗?

我们花了两节课去解释架构师成长的必要和充分条件。分析充要条件的目的,是帮你看清楚在架构师成长上的优势和不足在哪里;在当前所处的环境下,是否跟自己想成为一个优秀架构师的战略意图相匹配。

分析充要条件这件事,不但对架构师的成长很重要,我认为对你生命中的每个重要决策而言都很重要。我们的每一天都在发生变化。在这个变化的过程中,我们必须学会分析生命中那个战略意图的重要里程碑在哪里,是否能满足那个里程碑的充要条件。如果没有,要在哪些方面作出改变。

此外,我们还分析了一个公司能给架构师提供的机会密度有多大。如果想最大化架构师成长的话,应该到哪里去寻找最大的机会。如果把这几节课的内容总结成一句话,就是“不舍孩子套不着狼”。

怎么理解呢?给你分享一个故事。

有一次我的一个朋友远道来看我,我请他喝酒。喝到兴头上,他说自己的梦想是当一个CTO。我愣住了。他的层级不低,是一个大厂的P9。当时也有不少小公司在找CTO,应该有很多机会。于是我问他:“那你为啥不出去看看机会呢?我知道几家公司不错,要不帮你推荐一下?” 他吞吞吐吐地拒绝了,提起“自己是家里的顶梁柱”之类的话题。

如果他真想当CTO,在此之前肯定也遇到过不少机会。所以在我看来,他还在大厂中的确定性回报,与小厂中的冒险和决策机会之间徘徊。

我没有鼓励他去看CTO的机会,并不是我们的关系还没有好到可以直言相劝的地步。而是认为每个人都有自己的风险承受度,以及内心最喜欢做的事情。有的人内心可能很喜欢当一个CTO,但却无法承受能提供这种机会的高风险环境。所以我认为CTO对他的诱惑还没有那么大,否则他会想办法说服自己的。

所以说从程序员到CTO,还有一个隐含的必要条件,就是你成长的意愿,这也是最重要的条件。

小结

我们这个模块的内容就到这里了。回想我从中学时就开始兼职程序员,再到漂洋过海去求学,又在海外工作十余年,然后再回国,积累了6年的CTO工作经验与思考。这是一个非常大的时间跨度,从我第一次在少年宫接触计算机,那是单板机和巨型机并存的时代。而现在,已经跨越到了移动互联网时代。

在过去的三十多年里,计算机和人类的关系已经发生了巨变。再过三十多年,我想计算机和人类的关系必然会发生更大的变化。我写这篇总结时就在思考,到了那个时候,这个模块中提到的能力维度中,到底还有几个有存在的价值呢?很可能其中大部分能力已经不适用了。不过无论如何,我相信我们大多数人追求成长的欲望不会变,我也相信我们为人类创造生存优势这个理想不会变。

既然这篇是总结,那么我希望你也能为自己做个总结。在过去的一年里,你有什么成长吗?在未来一年,你希望自己能有哪些成长呢?你觉得自己或者公司在为人类创造生存优势上,做了什么事情吗?

期望这些思考能帮助到你,我们下个模块再见!

posted @ 2022-12-29 16:08  易先讯  阅读(90)  评论(0编辑  收藏  举报