郭东白的架构课_46_35模块导读回过头来看你觉得架构师到底是做什么的
你好,我是郭东白。
我们今天就正式进入模块三的学习了。
我们在开篇词里介绍了模块三的目的呢是向你介绍架构师的能力维度,以及获取这些能力的方法。
既然是总结架构师成长的课程,那么什么是架构师?就是一个绕不去的话题,我们就从这个话题开始,整个模块的学习,你肯定会有疑问,为什么课程都过半了才定义架构师呢?再说了,架构师这个岗位不是很普遍吗?人人都知道啊,用得着定义吗?我给你三个原因。
第一,业界无标准架构师呢并不存在一个标准的定义。
你去百度或者google搜索一下架构师这个词,看看你能找到一个令人满意的定义吗?你会发现架构师这个角色定义五花八门。
如果这些定义有共性的话,那就是他们两两都不一致。
事实上呢,哪怕是我之前在各类演讲讲座中给出的架构师定义,也有七八种。
第二羽翼在飘移。
架构师呢是一个正在被滥用的名词。
架构师本来在软件业是一个具有特殊含义的岗位,代表了这个岗位的人才,具有较高的综合能力。
所以架构师呢就成了具有稀缺能力的软件研发人才的代名词。
但是呢有些不太有节操的公司,需要把架构师这三个字作为很多研发岗位的前缀或者是后缀,让这个岗位看起来至少是个高薪苗子。
这种乱蹭热度的现象,就把架构师这个岗位给污染了。
估计再过十年,你说不准会看到皇家架构师这种职位在招聘。
第三呢是模块必须。
老子呢有句话说,有名万物之始没有一个准确的定义,我们就没办法锁定架构师这个名字的内涵,更没办法锁定该岗位角色所必须的能力项以及能带来的价值。
那么架构师的定义是什么呢?如果你读过任何一本关于本体论的哲学论著,你就会明白为什么定义这个概念这么难呢?我先给出一个架构师的一些定义,你可以来比较一下。
第一种呢是a software architect is a software development expert who makes high level design choices and try to enforce technical standards, including software, coding standards, tools and platforms from wikibidia.第二种呢是a person holding. This position drives all critical decisions about organization of the software system. Indeed啊indeed是一个drop search site.第三种是呢a software architect, defines software architecture MSDN第四种软件架构师是一个复杂软件系统的设计者和规划者,从架构师dictionary到com architect一词应声而来。
第五种呢架构师是软件架构活动的定义、规章和实施保障层。
第六种软件架构师是一个以软件架构能力谋生的人。
第七种,软件架构师是一个具备软件架构能力的人。
第八种,软件架构师是一个主动的软件架构师。
记者,第九种软件架构师是一个具备架构思维的人,其中东从四到九呢是我在不同场合中曾经使用过的定义。
如果你仔细研究一下,你会发现这些定义中还有其他要解释的概念。
比如说软件系统、软件架构架构、活动架构、能力、架构、思维等等。
从另一个角度来看呢,这些定义分别描述的是架构师的工作内容,具备的能力、创造的价值以及思维方式等等。
究竟哪一个是对的呢?似乎呢每一个定义都有一定的道理,包括他们各自出发的角度和覆盖的范围不同,所以也存在一定的差异。
事实上呢这些定义都和使用的上下文有关。
举个很简单的例子,假设呢你在观察一个关于狮子和老虎的纪录片。
如果开头的文案是狮子和老虎,是地球上两种最大的猫科动物。
你可以想一想,接下来内容会是什么?如果下一句话说,但是狮子不同于老虎,狮子是群居动物,那你可以想象到的内容又会是什么呢?也就是说呢,一个名词定义是为使用它的上下文而服务的。
既然我们这个专栏是关于架构师的职业成长,那么我打算使用的定义是这样子的。
软件架构师是具备软件架构能力的人,或者呢是以这种能力谋生的人。
而所谓软件架构能力,就是为相对复杂的场景设计,并且引导一个或多个研发团队实施结构化软件系统的能力。
有了这个定义呢,你就可以开始我们这个模块的内容了。
这个模块的主要内容就是帮助一名软件行业的从业者在架构师这个职业道路上快速成长。
软件架构师的工作职责是设计和引导实施软件系统,为公司创造的主要价值呢是为复杂场景设计和实施结构化的软件系统。
这个角色呢可以是兼职的,也就是具备能力,也呢可以是全职的,也就是以此谋生。
从这个定义来看呢,模块一是讲架构,工作中要遵守的原则。
模块二呢是讲具体的工作方法。
模块三呢是讲做好架构工作所具备的能力项。
而模块四就是讲这些能力,维度后面的本质能力,也就是思考力。
而我们这个模块的目的呢,就是梳理架构师工作所必须具备的能力维度。
同时呢帮助架构师找到提升这些能力的方法,也就是为一个复杂系统设计软件的能力的提升,以及引导研发团队实施这种能力的提升,有了更高的内在能力,就可以为企业创造更大的价值。
这里呢我特别要强调一下内在两个字。
所谓内在能力是你本身具有的能力,而不是所处的环境和岗位赋予的能力。
最好的例子呢就是中国古代的玩皇帝,他处在皇帝的位置上,但是并不具备管理国家的内在能力。
那么依照刚才对架构师所下的定义呢,哪些角色可以是一个真正的软件架构师呢?我们接下来给出七个例子来一起判断一下。
第一,刚入职的校招生结论呢是有可能。
因为我们在这个定义呢,并没有说复杂到底从哪里开始。
那么这个校招生在学校里面就勤工俭学开发过多个软件系统呢?第该是不是可以够得上一个预备架构师呢?第二,工作两年的职场新人。
答案是很有可能如果他在一个小公司工作,应该能够独立设计一个营销系统了,或者已经迭代了一个大版本了。
他应该算得上一个兼职架构师吧。
第三,大厂的技术专家肯定是的,不一定是一个全职的架构师,但至少是一个兼职的架构师。
因为他必须为复杂场景做结构性设计,那么呢他应该已经重构了不止一个系统了,肯定对结构化这个词有着自己的理解。
第四,大厂的业务架构师肯定是的,这不就是他们的工作吗?第五,某个部门的总架构师,也就是首席架构师结论是,当然是的,这不就是他们的工作嘛,而且附加性也更大了一些了。
第六,一个企业的总架构师,也就是首席架构师,结论是也应该是的呀,企业的软件系统不就是一个复杂的业务场景吗?第七一家企业的CTO结论是也应该是吧。
不过CTO亲自做软件设计嘛,他会引导实施吗?无论怎么说,小厂的CTO肯定是一个兼职架构师吧。
你看这些大大小小的角色或多或少都满足了软件架构师的定义。
的确是这样的,我们这个模块就是要帮助你从小白程序员成长到CTO,帮助你积累所需要具备的内在能力。
为什么呢?如果你还能回忆起我们开篇词里的一句话就明白了,那就是没有战略意图,就无法成为一个优秀的架构师。
哪怕现在是个小白程序员,你也应该有成为一个优秀CTO的战略意图,让自己能够成为具有终极软件架构师的能力的架构师。
而这种能力的定义就是在一个充分竞争的市场里,在高度不确定的商业环境中,在具有高度复杂的业务复杂性的情况下,引导企业的研发团队持续优化一个软件体系,并因此带来企业成功的能力。
如果能做到这一点呢,其实你就是一名相当优秀的CTO了。
惭愧的说呢,我虽然认为这是一个优秀架构师所具备的战略意图,但我自己呢还远没做到这一点,让我们一起往这个方向努力吧。
接下来呢我来描述一下优秀架构师应该具备的能力维度。
架构师的成长呢有明显五个明显的职业阶段,分别是程序员、兼职架构师、全职架构师、首席架构师和CTO.其实这些阶段的命名没那么重要,我们甚至可以称之为软件架构师阶段。
一到阶段五,因为真正重要的是在这五个阶段里,一个架构师所具备的内在能力发生了根本的变化。
我在文稿里放了一张图,就说明了这种变化。
我也再来解释一下这张图。
这张图呢事实上是一个状态机描述了架构师成长的五个阶状态,分别对应于我们刚才提到的这架构师的成长的五个阶段,或者说这五种不同成长阶段的架构师角色。
从更深的层次来看呢,这张图呢还给出了架构师每个成长阶段的能力模型,以及每个阶段需要跨越的具体障碍。
在这个模块中呢,我们会详细描述这些障碍以及对应的能力建设办法。
需要注意的是呢,在现实情况下并不排除一个架构师,具备多种角色。
比如说一个创业公司的CTO往往是五种角色兼备。
那也许你会问,为什么是五个状态,而不是六个或者四个呢?其实这五个能力维度只是一个建模抽象,是我认为软件架构师成长过程中比较明显的能力项。
同时呢这五个的维度呢又是互相正交的,哪怕你在某个能力维度上达到了极致,也不等于自动获取了另一种能力。
也就是说呢这五种能力维度具有不连续性,是我主动有计划的补充自己所缺失的能力维度。
那么有没有第六项的重要能力呢?我认为必然会有的。
比如说算法能力呢就是下一个强有力的能力。
项竞争者之前,我们通常认为算法能力不属于架构能力的一部分。
但是在很多的新兴企业里,算法已经和所有的业务深度结合了。
所以在软件架构设计中,怎么最大程度的放大算法的作用啊,我认为在不远的将来将会成为一个非常重要的架构能力维度。
那还有没有其他的和架构师能力?正交的软件研发能力呢?当然是有的,而且非常多。
比如说数据挖掘能力、系统运维能力,还有全栈研发能力和技术影响力。
但是这些能力呢并不是软件架构师最核心的能力。
也就是说呢他们不是设计和引导实施结构化软件系统这个工作的强依赖。
虽然这些能力呢很重要,但是在软件架构师成长这个乡下文里并没那么重要。
当然在技术能力之外呢,还有其他更广义的职业成长所必须的能力。
比如说沟通能力、学习能力、项目管理能力和科学决策能力等等。
同样的,这些能力对所有的互联网从业者来说都很重要,并不属于我们这个模块的上下文。
你可能会问了,我离CTO还远着呢,那么现在就花时间做为CTO做准备,这明智吗?有两个原因,一方面呢我用CTO角色代表了一个高阶的技术架构能力,也就是通过技术带来业务增长的能力。
你并不是非要当上CTO才能用到这个能力。
我只是说这个能力是CTO岗位的核心能力。
从一线工程师到各个级别的架构师,其实都在不同程度上需要这个能力。
这些能力的培养非常消耗时间。
所以你要急早培养和其他的高阶能力也一样,不是说你在程序员阶段你就永远用不到,只是机会少一些罢了。
第二CTO呢其实是企业技术职能的一个代表。
Cto的视角呢代表了企业期望技术职能能创造的价值。
通过对CTO视角的学习,你将认识到自己作为技术团队的核心能力,我只才能最大程度的为整个企业创造生存优势,关注CTO的视角。
并且根据CTO视角,优化自己在技术团队中的价值定位,才能和其他团队成员充分形成最大合力,为上下游创造价值,最终放大自己的职业成功概率。
好了,今天的内容呢就是这么多。
我们来总结一下,我们今天这节课讲了软件架构师的定义,强调了架构师是通过为复杂场景设计和实施结构化软件系统来为公司创造价值的,并且给出了架构师在职业成长的五个阶段,从而引出了我们整个模块要覆盖的五个核心能力维度,也就是结构化设计解决横向问题,解决跨领域冲突,正确的技术决策和创造生存优势。
我们这节课的内容呢,其实演示了一个很重要的架构师的思维方法,就是深度挖掘并定义一个实体的概念,然后从概念的定义推导出内在属性。
我们之前呢在模块二统一语义的环节中也介绍过类似的方法。
其实定义好一个概念是我们架构师在整个职业生涯中不断遇到的挑战。
因为我们要确保所有相关方用一个词表达同样的概念。
这是统一语义过程中的第一步,也就是对重要概念给出一个准确的定义。
这是架构工作的一个基本功。
但是很少有人完全做好。
通过这节课呢,我希望你能看到定义概念。
这个看似非常简单的过程,其实呢是一项极其重要的能力。
通过短短的一节课,我们为软件架构师下了定义,就能让我们准确的描述整个专栏给你简要的价值。
同时呢,你作为学习者对我们课程的交付目标,也就是一个有了一个相对完整的理解。
未来你可以自己从自己的视角出发,给出课程效果的评价。
所以你看就是从一个概念定义出发,我们拟定了彼此之间的合同。
好了,我们从下节课开始就正式进入合同履约的过程,开始学习架构师职业成长中的核心能力维度。
最后呢我给你留三个客户作业,我建议你任选其中一个,认真做一下目标呢不是做的全,而是做的深,做的有感触。
第一个作业建议你去一个招聘网站,看看你所在的行业和背景相关的架构师岗位,判断一下有多少岗位是符合我们这节课所讲的架构师定义的。
然后结合课程内容分享一下你的洞察。
第二个作业请认真看一下,有几个架构师的岗位是你能勉强够得着的。
同时呢也看看自己的差距在哪里。
然后把这个差距总结成几个关键词分享。
在留言区。
第三个作业,请你把对架构师的定义延展到我们这节课的细分架构师角色上去,看看有什么不合理的地方。
你的改进建议是什么?好了,今天的内容就是这些。
欢迎把课程分享给你的同事和朋友,我们一起获得职业成长,我们下节课再见。