郭东白的架构课42

你好,我是郭东白。

到上节课为止,我们的内容已经覆盖架构师的五个核心能力了。不过无论做什么事情,都必须先问自己这么一个问题:我做这件事情的优势是什么?也就是说,我凭什么可以成长为比别人更优秀的架构师?

其实这个问题背后隐含着两方面的诉求:一个是成长为优秀架构师的必要条件,另一个是成长为优秀架构师的充分条件。

我们今天先来讨论第一个话题。说起必要条件,让我想起了小时候背过的古文《为学》。其中有一句:“子何侍而往?” 曰:“一瓶一钵足矣。” 用白话文说就是:你凭什么可以去那么远的地方呢?有个瓶,有个碗就可以了。

其实今天我们要找的,就是做架构师的一瓶一钵。

代表架构师成长的五种角色

我们先回顾一下代表架构师成长的五种角色:程序员、兼职架构师、跨域架构师、总架构师和CTO。我们先看一下下面这张图,通过这个总结思考,我们能看到架构师这个职业背后更深刻的内涵。

如上图所示,这五个角色分别代表了架构师成长的五个阶段。在不同的阶段,架构师关注的是软件架构的不同侧面:

  1. 在程序员阶段,主要关注需求实现的结构化,也就是一个模块内有关业务的部分。
  2. 兼职架构师阶段,主要关注模块整体,以及与业务无关的横向问题。
  3. 跨域架构师阶段,主要关注不同模块间结构合理性的问题。
  4. 总架构师阶段,关注技术架构的长期正确性。
  5. CTO阶段,关注企业的长期生存。

可以看出,这五个阶段其实是关注点不断扩展的过程。回想上节课我提到的双重人格, 现在我要说,在架构师成长的整个生命周期内,最好培养出这五种人格。不同的人格,代表站在不同的立场,从不同维度去审视公司软件结构的合理性。

就像我现在是CTO,依然保持写代码看代码的习惯,依然要去看横向问题的投入,依然需要在团队间争吵不休时对跨域问题作出裁定。与此同时,我还要履行总架构师和CTO的职能。

我们之前也提到了,任何一个架构师,都要关注从宏观到微观的所有问题,只不过权重有所差异罢了。也就是说,对于这五种人格,并不是每个职业阶段只需要其中一种,而是需要兼具。只是随着职业的成长,你的关注点会逐渐向宏观问题迁移,更关注企业的生存。

这五种人格其实代表了五个不同维度的能力。所以哪怕不做架构师,也必须要想办法提升自己在这五个维度上的能力。比如从程序员成长为一名有影响力的自身程序员,也同样需要这些能力。

那么我们思考一下,想培养出这五个维度的能力,需要具备什么必要条件呢?

必要条件之一:思考力

如果说架构师成长的必要条件只有一个的话,我认为只能是思考力。更准确地说,是独立思考的能力。我们在模块四会专门讲怎么提升思考力,这里我先把概念解释清楚。

在我看来,思考力是在我们生活和工作中,通过独立思考带来有效结论的能力。

这里的关键词有两个,首先是独立思考。独立,并不是避免跟别人讨论,或者是不上网查资料、不参加会议。而是指得出的结论,主要来自如下三个方面:

  1. 有别于其他人的视角;
  2. 不同的证据组合;
  3. 不同的思维方式。

也就是说,通过你的独立思考,能得出区别于他人的结论。

其次是“有效”,也就是为公司或团队带来足够的价值。简单来说,就是你看到了别人看不到的东西,并且这些东西对于公司来说是有价值的,而不是把大家的注意力分散到了没有价值的方向上。

有很多人把思考力误认为是学习能力。其实这两个能力完全不同,后者指的是把已有的知识高效吸收和利用的能力。好的学习能力会帮助你获取更多维度的证据。而思考力是创新的源泉,是得到新的有效结论的能力。

我在开篇词就提到思考力是架构师的“渔”,为什么这么说呢?

一方面,随着网络的普及,这个世界获取知识的成本越来越低,知识扩散的延迟越来越低。作为架构师,如果所有的知识来源就是知乎、极客时间和StackOverflow,或者是某本流行书籍的映射,就没办法通过学习来持续获得额外的竞争优势。

另一方面,我们现在的互联网其实是充分竞争的状态,解决方案远远比市场需求多得多,从基础设施到云,到服务框架,到展示模型,到端上交互,有多种组合。在这种情况下,我们缺少的往往不是答案,而是甄别多个答案优劣的能力。

当我们面临一个问题时,多数人都能Google出十个答案来。获取答案不难,难在通过对场景做推演,也就是靠你的思考力,最终排除九个次优的答案。

这就是为什么我认为思考力是互联网时代软件架构师的必要能力。

必要条件之二:信息内化能力

谈到架构师成长的必要条件时,很少有人会提到信息内化的能力。但是根据我过去十多年的观察,在架构职能上做得比较好的人,一般都具备一定程度的信息优势,以及高效内化这种优势的能力。

所谓信息优势,就是你所在的环境有大量高质量的信息,或者你获取这些信息的能力比别人强,渠道比别人多。所谓内化,是指能够从这些源头中有效总结,比别人积累了更多的知识。这里我特别用信息,特指独立于客观存在的那些内容。用知识,指我们脑海中可以随时随用的那些内容。

信息内化的过程,也就是从接触信息到消化吸收成个人知识的过程。如果能更进一步把这些知识系统性地表达出来,你就是一个很了不起的知识传播者了。

信息优势的例子有很多。比如说十几年前国内架构做得好的人,往往英文很好,因为他们在读文档上就占了优势。再往后是海归,带着在国外大厂积累的互联网经验和知识,也很受欢迎。因为很多国外大厂的技术细节没有对外开放,别人学不到。再往后就是一些随着国内大厂成长起来的老兵,在PC和移动互联网高速增长的过程中积攒了大量的实战经验。

我出国很早,一直在国外大厂工作,在国内互联网爆发前积累了一定的信息优势。如果你是一个刚入行不久的程序员,怎么去寻找自己的信息优势呢?这让我想起前不久在极客时间直播,分享架构师成长这个话题时弹幕中出现了如下的问题:

  • “我在一个小公司,用户量少…验证不了架构设计是否合理。”
  • “公司规模小…接触不到很完整和很主流的架构模式或者实战机会。”
  • “我们公司太大了,我就是一个小螺丝钉,知识面不够广。”
  • “我们公司有专职的架构师,根本轮不到我来做架构,专职的架构师还抢不过来呢!”

有相当多类似的问题,我梳理总结了一下,同学们基本上就是这么一个需求模式:

  • “我想在大公司里求广度。”
  • “我也想在小公司里求深度。”
  • “我也想在大公司里快速成长。”
  • “我也想在小公司有一个高度稳定的职位来钻研技术。”

我引用一个禅宗公案来回答这类问题:

  • 行者问老和尚:“您得道前,做什么?”
  • 老和尚说:“砍柴担水做饭。”
  • 行者问:“那得道后呢?”
  • 老和尚说:“砍柴担水做饭。”
  • 行者又问:“那何谓得道?”
  • 老和尚回答说:“得道前,砍柴时惦记着挑水,挑水时惦记着做饭;得道后砍柴即砍柴,担水即担水,做饭即做饭。”

无论是大厂还是小厂,都用不同方式提供了架构师成长的信息优势。大厂更有利于增加深度,小厂更有利于拓展宽度。如果你在大厂里,就要多解决难题,把这种信息优势转化成某个领域的深度。如果你在小厂里做事情,就要把小厂提供给你的信息优势内化成所在领域的宽度。

这个过程,会帮助你把外部的信息优势内化成内在的知识优势。当处在一个有相对信息优势的环境中,你又比别人更擅长发现、总结和抽象知识,最终就会形成知识优势。

这是一种从大量信息中提炼出知识模型的能力。这些知识最终固化到你脑海里,帮助你的一生。我在模块一介绍的六个法则,以及这个模块里举的稳定性的六个法则,就是从信息到知识的典型例子。

当然,最佳的选择是在一个小厂,然后随着小厂成长为大厂,能同时提升自己的深度和宽度。要做到这一点,就需要有足够的眼光了。关于这个话题,我们在这个模块的最后会有讨论。

总结一下,在当前高度竞争的环境下,缺少信息优势,很难在架构师的成长过程中胜出。我们需要深度理解自己所在企业和行业的特点,找到自己的特定信息优势,并最大程度地内化这些信息来获取成长,同时也能帮助到公司。

必要条件之三:适应力

通过前面几节课的分析,我想你已经看到了:从程序员到架构师再到CTO的职业成长阶段,与其他职业相比有个重大的差异,那就是能力的不连续性。

有的职业,比如书法家、工艺美术家、中医和厨师等,匠人精神就非常适用。他们在职业生涯中不断打磨同一种能力,所以越老越值钱。

但是架构师这个行业很不一样,一个人从程序员到CTO的成长过程要经历多次蜕变。比如在职业初期要沉迷于技术,而一旦成为CTO,反倒要不断思考技术之外的解决方案。 在职业初期基本上不需要什么人际关系能力,但是作为一个跨域架构师,要想解决好冲突,这个能力就是绝对必须的了。

所以架构师成长的一个必要能力就是适应能力 (Adaptivity)。在不同的成长阶段,根据环境和场景不断调整和扩大自身的能力维度,目标是最大化自己的产出,以及对企业的增值。

我们在模块导读里提到过,架构师职业成长中需要的不止是这五种能力。其他能力,比如沟通交流和人员管理等,也是不可或缺的。

为了把这个道理解释清楚,我把程序员到CTO成长过程中所要经历的能力变迁,用下表来描述一下。这个表的主要目的是展示出架构师成长过程中的变化,所以我没有追求完整性。还有很多能力,比如写文档、 做培训、跨职能协同、 规划落地等,没有在下表中描述。

我把这些能力大致分为四组:

  • 第一组是伴随职责而扩大的岗位技能;
  • 第二组是个人技能;
  • 第三组是管理技能。
  • 第四组,就是我们前面几节课提过的每个角色的工作范围、工作重点和核心能力,这里就不重复解释了。

第一组技能是靠时间、经验和机会磨练出来的,不能仅仅靠读书学习来提升。从程序员到CTO,所处理问题的不确定性越来越高。而在应对不确定性的过程中,业务理解能力也变得越来越重要。更大的领域范围,也要求更大的技术宽度和更好的沟通交流的能力。

第二组技能是可学习的,往往学校里的优等生会比较出色,但是随着架构师职责的扩大,对技术深度、项目推动交付的能力和执行细节的关注,就会越来越少。所以这组技能对于职业初期的成长来说很重要,随着时间的推移,慢慢地就没那么关键了。

第三组技能是管理宽度,一般来说,架构师这个角色没有下属,少数的首席架构师会带小团队,对管理能力的要求不高。但是CTO的管理幅宽非常大,往往会突破Dunbar Number,也就是社会学家认为的一个人能够有效管理团队的大小。

这个数字有很多版本,比较流行的是150。但是据我的观察,互联网软件行业高速变化,每个人的工作职责要宽很多。如果管理幅宽超过100人,就很难靠个人管理来有效协调所有人的工作了,而必须靠下属来协调大家的工作。

这时候一个人真正的管理能力就凸显出来了。请注意,不是社交能力,而是基于自身经验和管理科学的管理能力。这和之前程序员到架构师的个人贡献者的角色跨度非常大。也正是因为这个原因,一个优秀的个人贡献者,在成为管理者的过程中往往会栽很多跟头。

总结一下,多次角色的转移、多次的能力变迁和职业后期复杂度的迅速提升,意味着适应力对于架构师而言是一个成长的必要条件。

小结

上述这些必要条件其实并不完整,还有其他一些高收入职业成长的必要条件,比如自驱力、学习能力、影响感召力、推动力、沟通交流能力和管理能力等。不过我认为大多数都是普遍存在的能力,或者是没有高区分度的能力。

举个例子,架构师本身是个非常自驱的职业,所以自驱力也是架构师成长的一个必要条件。但是我觉得整个软件行业已经进入极度内卷的竞争环境中,无论是做程序员、产品经理,还是UED,自驱力都是标配,我就不专门提了。

当然,我选择思考力、信息内化能力和适应力作为架构师成长的三个必要条件,还有一个很重要的原因。我认为这门课就是在帮你做架构师成长的战略规划。所谓战略,就是根据长期目标做合理取舍,要主动放弃一些能力,然后才能专注在另外一些能力上。

就拿我的职业发展来举例。我的职业生涯已经走过了二十多年,但还有很多能力仍然有欠缺。这些短板之所以没有影响到我的职业发展,主要是靠一些相对强的能力来给自己遮丑。如果我建议你修习100个能力,对你来说其实根本没什么帮助。在我看来,思考力、信息优势和适应力就是一个优秀架构师成长的必要条件,已经足够了。

思考题

请你务必完成这个作业,目的是强迫自己尝试与他人不同的思考角度,最好还能给出一些具体的理由。举个例子:老师,我不认同你的观点,我认为架构师成长的三个必要条件不是思考力、信息优势和适应力,而是某某条件,原因如下。

欢迎把你的思考和想法分享在留言区,我们下节课再见!

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