vlambda博客
学习文章列表

Java程序员怎么才能成为架构师(原文标题:程序员到底牛到什么程度才能做架构师?)

程序员成为架构师 的步骤不是先掌握架构师的技术,然后才成为架构师,而是相反,先通过面试等方式得到架构师的项目实践机会,然后在项目实践中由弱变强,最终成为架构师。

上述这句话的另一种表达方式是:程序员很难指望通过自学技术的方式成为架构师,一定是先通过背题背说辞通过架构师的面试,然后再到项目实践中提升技能,最终成为架构师。

本人是做Java的,这里就以Java为例,讲讲Java架构平时干的活。

1 用Spring Boot+JPA+logback等组件的方式,搭建项目的框架,必要时封装一些数据库等通用的方法,这样java程序员就能在这个框架里通过添加类实现各种功能。

2 当项目遇到高并发需求时,首先是需要知道选用什么组件,比如缓存要用redis,然后要在linux环境上搭建redis环境,比如redis集群,然后指导程序员用redis解决缓存问题。更多的情况下,架构师需要根据业务所面临的并发情况,实现用redis,dubbo,zookeeper搭建好集群,然后整合业务,构建出一整套业务+组件的实现方案。

3 需要参与项目的部署和发布流程,这些未必要亲手做,但得知道相关流程,比如灰度发布,基于docker或k8s云端部署等流程和实现方式。

4 项目上线后,需要搭建监控系统,比如用zabbix或skywalking搭建监控系统,这还不算,当系统遇到问题时,尤其是遇到分布式组件层面问题时,需要能通过看日志等方式解决。

5 需要设计基于云端部署或高并发的整体实施方案,同时需要针对高并发场景经常遇到的问题,比如熔断或限流或分布式锁等,用组件等方式给出实施方案。

从中能看到,架构师绝不是简单使用分布式组件的API,平时还需要搭建组件环境、解决业务和组件层面的问题以及法发布部署项目。

程序员一定是从零基础一点点往上升级到架构师。在架构师前一个职级一般是资深开发,而资深开发所具备的能力一般是,熟练掌握spring boot中增删改查的技能,也会用些组件的API,适当知道linux相关技能,也知道一些项目部署和运维等方面的技能。

但资深开发普遍缺乏用分布式组件搭建高并发系统的能力,更缺乏解决高并发环境中组件相关问题的能力,至于云端部署等业务整合组件层面的架构技能,更可能只了解个理论,在这个程度,怎么能升级到架构师呢?

1 在本公司里升级,基本不可能。一方面,有些小公司根本没有分布式组件的使用环境,没法在项目里学,另一方面,哪怕项目里用到相关技术,但本职干的更多的是业务,在本职中很难全面实践相关组件,很难有机会系统地干框架层面的活。

2 先通过架构师面试?这也不大容易,因为面试架构师的面试官眼睛一般很毒,能通过三言两语就能确认求职者的架构能力是靠背的,还是真的在项目里实践过。不过虽然难,但很多程序员还真是走的这条路最终成为架构师。

也就是说,和初级开发升级到资深开发不同,资深开发升级到架构,绝不能先学技术再升级,而是反过来,先过面试再升级。

原因前文已经讲了,java资深开发所需要的技能,比如数据库调优,JVM调优,或者是用熟Spring Boot里的AOP或logback,这些技能初级开发在项目中都能接触到,所以只要上心,大概率能先掌握技术再升级,而架构师的相关技能,资深开发在平时项目过程中基本很难接触。

再这种情况下,资深开发该如何升级到架构呢?绝不能单靠背面试题,而是得先掌握API,然后嵌入项目,同时准备一些解决过的问题说辞,先准备过架构师的面试。

1 刚开始的时候,就学一些高并发组件的API,比如Redis,nginx,dubbo,mycat,dubbo或zookeeper组件,或者是spring cloud alibaba体系下的nacos,sentinel,gateway,ribbon或seata组件,这是两个不同的方向,学好一个方向即可。同时还可以学一些监控组件,比如skywalking或zabbix。

学的时候绝不能光看理论,更不能光看面试题,更要动手实践,如果项目里有用这些组件的机会,就从项目里学,否则的话,就在自己的电脑上搭建个环境学。我有本书,讲spring boot整合分布式组件,其中就详细讲述了在Windows上搭建分布式组件的步骤。

2 在原始积累架构技能的阶段,由于缺乏项目实践机会,或者甚至缺乏必要的分布式组件的运行环境,大多数程序员其实只能掌握到“熟悉组件API”的程度。但这个步骤是必备的,如果不掌握分布式组件的api等用法,甚至没法进行后文提到的面试准备工作。

要注意,自学阶段需要达成的目标一般不是熟练掌握高并发相关的实践技能,而是能在未来的面试中证明自己有高并发相关的项目经验。还是这句话,架构师的技能没法单靠学习学,一定得在项目中学。

3 程序员通过自学,能让自己掌握基本但必需的分布式 高并发技能后,此时就要准备面试,争取挑战大厂或互联网公司的那些真正能提供高并发项目实践机会的职位。

在这个阶段,由于程序员一般只具有并发方面的理论知识,或是api技能,顶多外带些实际应用和解决相关问题的经验,所以在这个准备面试阶段,可以采用“项目嫁接”的技巧,即尽量在你当前做的项目里,结合该技术的项目使用情况,这样就能证明该并发技术项目实践经验,进而能证明大多数并发技术有项目实践经验。

比如对于基于redis的缓存技术,大家可以在熟悉基本缓存和读取数据的api前提下,为缓存找个项目需求落脚点,比如因为在本项目里,多次去查询用户数据会导致性能慢,所以会引入redis。引入后redis的键是什么,值是什么,能解决什么业务。同时设的超时是多少,解决过缓存穿透问题,同时用RDB的方式做redis持久化。

当然,在面试中证明并发技术的项目实践经验也是个互动的过程,你说了以后,面试官会问细节问技术,所以在为技术找好项目实践背景后,还要背题,比如背redis面试题,甚至去看redis背后的线程和缓存处理流程。

4 其他的组件,比如dubbo,kafka等也照此准备,第一准备api,第二结合业务讲用法,第三讲解决过的问题。当然单准备组件是不够的,还需要准备熔断、限流和集群方面的技能和说辞。

5 通过了解并发技术外带按上文准备好面试说辞,当然再需要经过多次面试试错,程序员一般有机会找到能真正提供并发技术实践机会的公司和项目。

这里清注意,一般只有大公司才能提供真正的架构相关技能的项目实践机会,一些小公司,所谓的架构也就是用些组件的api,或者是夹杂干些项目经理和运维的活,小公司提供的架构实践机会不能和大公司相比。

所以程序员在按上文给出的步骤准备好架构相关面试说辞后,应当尽量找大公司的工作机会,这里大公司一般是指银行、保险和大厂,或者有高并发业务需求的公司。

通过上述方式得到架构方面的实践机会后,刚开始的一段时间,一定很辛苦,但由于真正能接触到集群、熔断、限流以及高并发相关的实践机会,所以架构方面的技能一定能一日千里地进步,这样甚至都不用自己考虑,被项目中的任务推动着就能真正掌握架构方面的技能。

然后这样辛苦个一年半载,架构方面的技能应该就不在话下了。至于分布式组件的API,应该都能熟记常用的,搭建个集群估计也就是敲几行命令的事,至于在项目里遇到架构方面的问题,比如dubbo组件出现OOM等,可能一看日志就能知道问题的所在了。做到这种程度,就能成为货真价实的架构师了。

但大家想象一下,上述技能如果没有项目实践经验,单凭看书,一定没法达到这种程度,所以还是这句话,不是程序员牛到什么程度才能成为架构师,而是先通过面试得到架构师的项目实践机会,在项目中不断实践,从而升级成架构师。

本号其它文章: