对咱们程序员来讲,发展的途径要么是走管理岗,从开发升级到项目经理甚至是部门经理;要么走技术升级路线。不过在技术路线方面,没法升级到架构师的程序员不在少数。一方面,在很多公司的高级开发岗位上,没法让程序员实践甚至接触到架构师的技能,另外一方面,有很多程序员甚至不清楚架构师所须要掌握的技能和升级途径。因此从结果上来看,至少有5成的程序员止步于“高级开发”的程度,这是很是使人惋惜的。linux
我这几年一直努力地从高级开发升级到架构师,目前虽然职位上没达到,但好歹多少也能干些架构师方面的活了。在本文里,将结合我自身和其它一些程序员的经历,分析很多程序员没法升级到架构师的广泛缘由,由此向你们展现从高级开发升级到架构师的难点,并在此基础上给出相关的升级建议。nginx
大多数的程序员能在工做中接触到高级开发的技术,因此从初级开发升级到高级开发,难度并不大,但架构师就不一样了。程序员
好比在外包公司里,程序员大可能是作重复劳动,业务变了,但用到的技术仍是增删改查。或者在一些规模比较小的公司,项目组出于成本和质量监控的考虑,也未必会让程序员从事架构方面的工做。哪怕在一些技术含量比较高的互联网公司,出于业务封装的角度,一些高并发高可用的实现每每被封装在方法里,程序员仅仅是经过调用方法实现功能,未必能在代码层面,显式地看到架构方面的技能。面试
接触不到相关技能,单靠看视频看资料积累起来的技能,在面试过程当中每每会不堪一击,从而没法应聘架构师的岗位,这反过来制约了程序员向架构师发展的脚步。 redis
我有时候在面试高级开发的时候,会深刻问些架构方面的问题,好比我问,大家系统里,模块间的通信用的是什么组件 ,很多高级开发甚至是一头雾水,或者在他们眼里,更多的是调用方法实现功能。shell
不少工做中得过且过的程序员,在实现的功能经过测试之后,或许就无所事事了,并且这类程序员不在少数,在小公司或外包公司里,这类程序员每每会更多,说实现的,他们的竞争力和从培训班里出来的程序员没什么两样,或许就更熟悉业务背景。数据库
或者有些程序员虽然上进,但会深挖单机版的技术细节,好比我问String对象的== 和equals方法有什么差异,或者,JVM虚拟机调优有哪些实践要点,此类回答他们会回答很是到位。这当然要比纯粹会写代码的程序员要好,但此类技能顶了天只能算高级开发的技能。若是在升级时过分追求这方面的技能,无异于缘木求鱼。 服务器
上文是从客观和主观两个方面,讲述了架构师升级的难处,在讲述升级方法前,咱们先来看下架构师究竟要干什么活,以此来明确努力的方向。架构
1 须要搭建高可用的框架,好比就拿最简单的搭建数据库服务来讲,得考虑若是一台MySQL服务器宕了,如何保证业务切换到另一台机器上。并发
2 须要考虑高并发的因素,从这个点展开,架构师至少须要会用nginx,mycat,netty,redis之类的工具,以及考虑搭建实现负载均衡的集群。
3 须要把设计好的架构部署上线,或者哪怕上线动做是由运维来作,但架构师至少要知道如何把nginx集群等组件部署上线的活,由此架构师须要了解必须的linux命令和脚本,以及了解jenkins之类的部署工具。
4 上述技能不是简单会用便可,若是在开发部署和运行过程当中由问题,架构师得负责解决。这就要求架构师不能仅仅靠看视频知道如何搭建系统,更得具有针对netty等组件的debug能力,还得能经过看日志,知道集群的运做状况,若是集群出了问题,还得知道如何快速解决。
5 不能仅仅关注技术,更得结合业务,把诸如抢红包之类的需求经过架构实现,这就要求架构师得知道各类组件的优劣,以此能选型并设计方案。
从上述对架构师的需求来看,从高级开发升级到架构师很难,也在情理中了。
升级到架构师很难,但绝非不可能,对于高级开发而言,从运维入手,或许能熟悉架构师的技能。
1 好比先从ant脚本,jenkins脚本和linux shell脚本入手,能知道系统的部署方式,以及熟悉必备的linux调试技能。
2 经过观察nginx或dubbo或zookeeper配置文件,了解各组件的运做方式,并能经过这些了解高并发高可用系统里负载均衡和失效转移等配置方式。
3 能够观察线上相关的日志,了解系统部署的状况,以及从架构层面了解诸多组件间的关联。
在上述步骤里提到的脚本和日志,在平时工做中只要上点心,应该能够看到,或者咱们能够和运维人员多交流请教,上述组件部署和配置的知识也不难知道。在这个过程当中,暂时没涉及“修改配置”和“搭建组件”等技能,毕竟这属于熟悉阶段。
程序员在熟悉基本的部署和架构方面的技能之后, 就能够参与解决一些实际的问题了。在公司里,测试和上线阶段出现的问题不能算少,其中也会包含不少和架构相关的问题,好比kafka没配好,致使消息积压,或者dubbo超时时间配置过长,致使调用链路超时失效,或者再如redis超时时间过长,致使OOM异常。相似问题的种类五花八门,只有想不到的,没有不可能出现的。
刚开始,程序员能够跟在资深人员以后查问题,或者找到问题后,再手动复盘一下,学习架构师分析和解决问题的入手点,一来二去,必定能熟悉组件的配置,并了解组件的底层代码,更能熟悉配置各类框架组件的实施方案。
这个阶段依然属于“见习”,但至少能从实践角度,掌握架构师所需的技能。对比本身经过看视频,以闭门造车的方式积累架构师的技能,经过上述步骤获得的相关经验来源于实际,无疑值钱得多。
其实在小公司甚至是外包公司里,都有机会了解甚至实践上文提到的架构师相关技能。程序员经过上述步骤掌握架构师的相关技能后,若是再加以实践机会,就能很快成为名副其实的架构师。
这种实践机会在大公司里不难找,但在小公司里或许就很少了,不过也没关系,这时若是再出去面试架构师的岗位,基本上就没什么难度了。咱们来看下架构师的面试问题。
1 如何部署nginx(或其它组件),从而实现高可用?
2 Redis集群里,容灾通常是怎么作的?
3 Kafka消息队列里,如何实现消息重复?如何确保消息不被重复消费?
4 或者是问底层的问题,好比说下netty里的读写索引工做方式。
或者在目前阶段,你们未必能回答好上述问题,但一旦在运维层面了解过组件的搭建方式,或者经过排查实际问题了解过组件的运做和交互方式,再专研下相关底层代码,哪怕没太多的架构师实践经验,此类问题也不难回答。
或许一个没太多实践经验的架构师,在公司里日子会很难过,能够会让领导和组员感受实践经验不足,但大多数架构师也都是经过实践一点点积累相关经验的,在这个阶段里,若是再肯多听多看多问题,升级到资深架构,就指日可待了。
其实对于咱们作IT的人来讲,升级到架构师未必是惟一的发展途径,但不是每一个人都适合搞管理。若是走的是技术加成路线的话,从架构师到技术专家,或许是一条比较合适的发展途径。
对于高级开发而言,或许真有30岁或35岁现象,毕竟高级开发所需的技能很容易被毕业生或培训生掌握,年纪一大了就没竞争优点了,但正是由于升级到架构师不是那么容易,到35岁时,或许还有竞争的能力。
并且,一旦升级到架构师,退则能够找个小公司作技术负责人,以求小富即安,从而不会像高龄码农那样被淘汰;进则能够再到大厂里去磨练一番,而后再经过各类途径拓展影响力,那么真就能够说成为技术大牛了。反之,若是止步于高级开发,虽然也能经过跳槽提高工资,但格局始终没法像架构师那样开阔了。
版权说明:
若是要转载本文,请先征得本人赞成。