郭东白的架构课43
你好,我是郭东白。上节课我们讲了架构师成长的必要条件,分别是思考力、信息内化能力和适应力。那么这节课我们就来聊聊架构师成长的三个充分条件。
不满足必要条件,就做不了架构师。但是满足了必要条件,也不一定能成为架构师,因为还需要找到架构师成长的充分条件。什么才是架构师成长的充分条件呢?我先来公布答案:
- 大量高风险的决策机会;
- 对架构师友善的环境;
- 正确的目标。
我会先对这三个充分条件一一作解释。最后,还会试图说明为什么这两节课讲的充分必要条件是正确且完整的。
你或许会想,这三个充分条件似乎是没用的废话啊。其实不是的。所谓充分条件,意思是如果正好处在满足这些条件的位置上,还不缺少必要条件,你就会一路高飞,从程序员快速成长到CTO。
听到这里,你的耳朵是不是立马竖起来了?这不就是传说中的天马Pegasus吗?一骑上天马,我不就能纵横宇宙了吗?不过,这世间哪里有天马?如果真的有,凭什么轮得到我?
正如韩愈所说:“千里马常有,而伯乐不常有。”我将花一整节课来详细分析架构师成长的充分条件,就是要帮你识马,最大化自己的成长。而不是执策而临之,然后曰:“天下无马!“
需要预先建议的是,在学习这节课时,请结合自己的工作环境来做深度思考:我现在所处的环境适合架构师成长吗?我这坐骑是匹千里马,还是一头倔犟的老驴?
架构师成长的充分条件之一:大量高风险的决策机会
你从之前的课程可能感觉到了,“机会”是我们这门课中的一个高频词。是的,每个人的成长都需要机会,架构师也是如此。只不过架构师需要的是大量高风险的架构决策机会。
我们在讲总架构师能力跃迁时提到过“拍板”,指的就是在面临不确定情况时做决策的机会。架构师的成长,就是在更大的领域范围、更高的难度和更大的不确定性下做决策的过程。
- 比如说程序员,就是在代码层面做结构化的决策。
- 兼职架构师,就是在一个领域内做横向问题的架构决策。
- 跨域架构师,就是面对复杂的团队冲突,在多个领域间做全局最优的架构决策。
- 总架构师,就是面对技术发展的不确定性,从公司层面出发,顶住来自业务方的压力,作出长期最优的架构决策。
- CTO,就是面对竞争环境的高度不确定性,从贵公司层面出发,面对成本压力和团队内部压力,作出最利于企业长期生存的技术决策。
可以看到,从程序员到CTO,架构决策的领域范围越来越大,挑战越来越大,不确定性也越来越高,意味着决策的风险也越来越大。
为什么通过大量高风险架构决策的磨练,就能获得成长了呢?因为对于作出的每一次决策,无论正确还是错误,都会提升未来正确决策的概率。
在计算机时代之前,我们也应该能够理解这个论断。我们能从过去的经验中获取可以应对未来不确定性的知识,实践机会越多,成长就越快。因此不论东西方的教育,都强调实践。
那么该去哪里寻找高风险架构决策的机会呢?这似乎是个鸡生蛋,蛋生鸡的问题。我必须要有足够多高风险架构决策的机会,才能成长为一个资深架构师;我必须是资深的架构师,才能获得更多高风险架构决策的机会。我们该从哪里开始这个循环呢?
简单的答案似乎就是“人间处处是道场,修行到哪都一样”。其实道场与道场的差别大了去了!
我想在这里提一个概念,就是“机会密度”。什么是机会密度呢?就是在一个行业或者一家公司内部所蕴藏的职业发展机会,平均到每个员工身上到底有多少。
一个机会密度大的公司,会有很多做高风险架构决策的机会。而一个本来就没什么决策机会的公司,哪怕你再资深,也很难拿到架构决策的机会。
你可能要问了,是不是只有大公司才有很多架构机会呢?事实上,机会密度大小与公司的大小无关。有的公司很小,但却有不少机会。有的公司很大,但分到每个人头上却没什么机会。
根据我的经验总结,一个公司中架构机会的密度与以下几个因素有关:
- 赛道的竞争激烈程度:在一个竞争激烈的赛道上,短时间内会有大量新技术和新模式涌入,变化迅速。而在一个硝烟散尽的赛道上,技术的迭代将会逐渐停止。
- 公司的成长阶段:一个处于成长期的公司中会有非常多的机会,而一个已经开始老化的公司不但没有好的机会,甚至会非常糟糕。
- 公司的技术空间:在大多数公司和行业里,技术都是靠提升效率来创造价值。一个人均交易额越大的公司或部门,技术的投入相对来说增值越多,机会就比较大。但是这种提升机会是逐渐收缩的,越到后期机会越少。
两年前,国内某家互联网公司全年通过搜索推荐算法优化带来的大盘转化率提升,只有不到0.5%。可以说,这个领域的技术机会已经基本枯竭了。在这个过程中,这两个部门的人员纷纷离职或被离职,其实种子在两年前就已经种下了。
- 部门内软件系统的成熟度:软件也是有生命周期的。如果是一个刚刚诞生的软件,到处都有决策机会。但是一个已经要老去的系统,不但没有决策机会,甚至会反过来霸占原本属于新生软件的机会。这类软件和它们背后的利益群体,已经成为孔老夫子讲的“老而不死是为贼”这样的祸害了。
总结下来,在一个激烈竞争赛道中的成长型的中小公司,往往有大量高风险的架构决策机会。也就是说,如果真的想要修炼自己的软件架构能力,这类公司才是你的道场!
你可能又要问我了:竞争激烈,公司小,软件不成熟,为啥要去这样的公司啊?这不是在作死吗?先别急着下结论,这个话题我们下节课会专门讨论。
架构师成长的充分条件之二:对架构师友善的环境
在竞争激烈赛道上的中小公司,其实有着大量的架构决策机会。但每个公司的环境,对架构师来说并不都是友善的。对架构师友善的环境,需要做到如下三项:
- 相对宽裕的决策时间;
- 对架构师意见的尊重;
- 对错误决策有足够的包容度。
先解释第一项,相对宽裕的决策时间。在一个竞争激烈的行业里,任何公司都没有宽裕的决策时间。而架构师需要的,就是尽可能多的决策时间。
怎么获取呢?公司高层在讨论核心业务的规划时,要邀请架构师参与,让他们提前知道公司面临的挑战和即将到来的模式转型。而不是在公司完成最终决策之后,通知架构师第二天就要给出设计方案。
这其实需要公司有个相对透明的文化,任何业务产品和设计的讨论,都要把对应的软件架构师邀请进来。
第二项,对架构师意见的尊重。有不少公司在做业务决策时,要求架构师绝对服从,积极拥抱变化,勇于挑战。在业务目标、实施时间和技术可行性等方面,完全不接受架构师或者技术管理者的输入。
比如一切架构规划和项目实施目标都是按时间倒排,架构师也不敢挑战时间节点和项目目标。最后,架构师只能在设计上和实施上打折扣。时间一长,到处都是架构缺陷,架构师也被频繁指责。甚至在巨大的交付压力下,公司技术团队内部出现了反架构师和反架构规划的情绪。
怎么避免这种后果呢额?也很简单,就是让架构师和技术团队作为决策的参与者,并在决策过程中充分尊重他们的判断。不要每天拿“既要也要还要”来说事儿。
第三项,对错误的包容度。任何高风险的决策,必然有错误的可能性存在。但是有些公司非常惧怕风险,会通过各种惩罚性措施来防止意外事件的发生,而且还配置有严格的追责流程。
很多高风险决策中必然带有不确定的因素,那么这种抵制风险的政策,会让有些架构师因为担心失败而不敢创新,不敢参与决策,甚至以各种方式隐瞒或推脱已经出现的问题。哪怕口号喊得再好,流程做得再细,复盘做得再长,也无法改变团队同学的行为。在这种环境下,架构师学不到什么有用的东西。就像《天龙八部》里的星宿派,正经武功学不到,但是歪门邪道学了一大箩筐,还天天歌功颂德,捅队友刀子。
怎么解决这类问题呢?很简单,就是放弃或改变考核、处罚机制和追责制度。学习亚马逊建立“Bias for Action”的文化,也就是鼓励试错的企业文化。 当然,这对公司高层的决心有着非常高的要求。
如果能在这样的环境中成长,你就像骑在一个天马上,架构能力必然能得到提升。
架构师成长的充分条件之三:正确的目标
回顾我们对不同架构师角色的描述,会发现架构师在不同的成长阶段需要有不同的目标。无论目标是什么,我们都先假定这些目标是正确的。
我们在模块一的法则一中就提到了。从决策最高层到一线经理,都会出现设错目标的可能。目标设错的原因有很多,比如顶层决策者能力不足,没有看对方向;中层决策者由于自私,而将目标转移到最大化自己团队利益的方向上;一线管理者因为信息缺失导致判断失误,等等。
在这种场景下,我们是不是带着一种远离纷争的态度,去干好本职工作就行了呢?其实不然,如果这种问题在一个公司里长期存在,必然是在用人、决策和文化上出了问题。如果这个环境没法改变,你将受迫于考核压力,继而改变自己的行为和认知,以顺应这个错误的环境。
我们在模块一提到了,设错目标并不可怕,但如果一家公司缺乏有效的纠错机制,那将是非常可怕的事情。如果在这样的组织里做架构师,很难学习到“如何通过优化软件架构来帮助公司提升生存优势”的方法。因为在最开始,你就没有拿到过正确的目标。换句话说,往机器学习系统里灌注的训练数据是错误的,无论怎么训练,都无法训练出正确的模型!
反过来,如果一个公司能经常设定正确的目标,哪怕项目最终没有成功,那这个训练样本还是好的。也就是说,能从失败的尝试中知道什么路径是不可行的,那么你的能力依然会获得提升。
其实这种目标管理的环境也不难鉴别。这样的目标在定义中就公开透明,鼓励全员参与;在决策中尊重数据和事实输入,有确定的KPI和数据结果来衡量产出;在最终的复盘中,不忌讳失败,会认真反思分析。
只有在这样的目标管理环境之下,架构师的每次尝试都会带领企业更加逼近真相。
这些充分必要条件是完整且正确的吗?
到这里,我们就讲完了架构师成长的充分条件了,分别是:
- 能获取大量高风险的架构决策机会;
- 在一个对架构师友善的环境下工作;
- 工作环境能够一直维持正确的目标。
再结合上节课讲的三个必要条件,分别是思考力、信息内化能力和适应力。现在,让我们来探讨一下这些条件的完整性和正确性。
诚实地讲,对于这个话题,我也没有什么准确的答案,而只是一些思考。我今天分享出来,也请你帮忙判断一下逻辑的严密性,也欢迎你指出其中的缺陷。
首先,这些充分条件就是外部给予的成长环境。有了这样的成长环境,就能成长为一名好的架构师。而这些必要条件是你自身具备的能力,如果不具备,就无法做好一个架构师。
我们先看一下充分条件,如果你总能收到正确的目标,又在一个对架构师友善的环境下工作,同时还有源源不断的高风险的架构决策机会。在这种情况下,哪怕学得再慢,最终也会成长为一名能够找到正确架构设计的架构师。
但是,如果不满足必要条件,想想看,你凭什么会有源源不断的决策机会呢?如果你在一个小公司,没有足够的思考力、适应力和信息内化能力,公司也因为你的错误决策老早就挂了。如果你在一个大公司,公司相对公正,架构师人才充足,而你又连续犯错。在自身能力不足的情况下,怎么可能连续得到架构决策的机会呢?所以必须满足必要条件,先保证不容易犯错误。哪怕犯了错误,也能迅速学习改正。
刚才的描述分析,其实不是一个严格的证明,只能算作简单的解释。我们再换个角度来证明一下,这里我引用机器学习这个学科分支的基础假设:只要有足够多高质量训练的数据,和一个能够描述足够复杂场景的模型,那么机器就会在数据的训练之下变得越来越准确。
如果把架构师想象成一个大数据驱动的算法模型,那么架构师的成长,就是这个模型在不同场景下快速找到正确架构设计的过程。现在我们要证明的是:
- 最终能收敛到正确的模型;
- 可以快速收敛。
充分条件保障了前者,而必要条件保障了后者。我们来看下面这张图:
如上图所示,架构目标是算法的优化目标,高风险架构决策机会是算法的训练集。对架构师友善的环境,就是能在线上持续正确运行的机器学习的系统环境。这三样结合起来,就是架构师成长的外部环境,相当于机器学习算法系统的运行环境。
而你就像一个机器学习系统一样,利用大量高风险的决策机会来训练自己的架构能力。 当然,这个系统还有三个重要的内部能力:思考力、适应力和信息内化能力。这三个能力会把外部环境给予的锻炼机会,最终转化成自己的核心竞争力。
你的思考力,其实就是机器学习系统的算力。算力越强大,越能在有限时间内收敛到最佳模型。
而适应力,就是你脑海中思维模型演变的速度,以及应对真实世界挑战的能力,等价于机器学习里算法模型的演变和拟合的能力。当你从一个架构师角色升级到另一个架构师角色的时候,你的模型能够升级且适配新的场景。适应力越强,模型最终的效果就越好。
而由内化能力所积累的知识优势,就是算法模型内所包含的先验知识。知识优势帮你把业务理解转化成架构设计的约束,提升设计与所在环境的匹配度。同样地,先验知识越多越正确,算法模型的训练收敛得越快,最终的效果也越好,正确性也越有保障。
如果你的训练目标正确,训练集大,且计算环境能够保障正常运行,那么算法最终会收敛到正确的模型上,也就是保障了充分条件:系统最终能够找到正确的模型。对于架构师而言,意味着能够找到正确的架构原则,保证最终的成长是真实有效的。
如果算力大,收敛快,模型适配能力就越强,也就是算法模型能够快速收敛。这是算法模型最终胜出的必要条件,否则线上实验长时间等不到实验结论,就无法获得更多的调优机会和训练样本。对于架构师而言,就是说产出速度需要跟行业竞争和人才市场的竞争相匹配,这样才能比别人更快地产出架构设计,得到有效结论,迅速迭代调优。
那么最终的产出是什么呢?对于机器学习系统而言,就是高质量的算法模型。对于架构师而言,就是最优的架构设计。
充分条件保证了成长的有效性,必要条件保障了成长的速度。如果能同时满足充分条件和必要条件,就能获得更多高质量成长的机会,从而在架构师这个岗位上快速且有效的成长。
小结
这节课我们讲了架构师成长的充分条件,分别是大量高风险的决策机会、对架构师友善的环境和正确的目标。在上节课,我们还给出了架构师成长必要条件:思考力、信息内化能力和适应力。
充分必要条件的寻找很难,这两篇文章我改过十多个版本,没有完全思考清楚,也不敢说现在给出的结论是完全正确的。所以很欢迎你在留言区分享自己对这个话题的看法。
从某种角度而言,必要条件是先天的,改变起来比较困难。但充分条件是外部给予的成长环境,是后天可以选择的。有了这样的成长环境,才能成长为一名好的架构师。所以我花一整节课去详细分析架构师成长的充分条件,其实是在帮你认识什么才是有利于架构师成长的好环境。
如果你下定决心想要做一名优秀的架构师,就必须找到一个好环境。它是Pegasus,是你的天马。我们下节课还会深入讨论这个话题。
思考题
三道题,任选其一。
- 我们提到了机会密度的四个判断条件,请你用这些条件来判断一下你所在的生存环境,它满足这四个条件吗?哪个条件没有满足呢?为什么?当然,有时四个条件都满足了,但机会还是不够,比如说公司资金短缺。你遇到过类似的情况吗?是如何克服的?
- 课程中还提到了对架构师友善的三个环境条件。我们很难说公司完全满足这些条件,但也很难说一点儿都不满足。在你看来,自己最需要最大化哪一个条件呢?为什么?
- 算法里有个理论,叫作“天下没有免费的午餐。同样的,架构师的成长也需要付出代价。有的人满足了必要条件,却在寻找充分条件的过程中放弃了,因为他要付出的代价,远远大于他想成为优秀架构师的决心。你经历过这样的内心挣扎吗?结果是什么?
欢迎把你的思考和想法分享在留言区,我们下节课再见!
本文来自博客园,作者:易先讯,转载请注明原文链接:https://www.cnblogs.com/gongxianjin/p/17012848.html