十年阿里P8架构师从业感悟:如何才能快速提高开发技能与职场视野?
相信大家在经历了2019年第一个面试高峰的悲痛后,大家都积攒着一股暗劲蠢蠢欲动。金九银十毕将会迎来2019年互联网行业换工作的大潮,技术工程师的升级换位对于一家互联网公司来说无疑是命脉般的存在——技术强则公司强!
如何做一个抢手的技术工程师呢?按部就班996、完成项目、清理Bug、储备技能,这些就够了吗?
别挠所剩无几的发际线了,今天我们就在这聊聊,做为程序员的我们,要如何快速提高我们的开发技能与职场视野?,相信读完这篇文章后能给正在找工作的你一些启发。
码农陈百万:你面试过很多候选人,平时也经常帮助工程师同事答疑解惑,他们一般都会向您请教哪些问题呢?AI乔治:一些工作时间较短的同事会找我咨询一些求职和工作相关的问题,遇到的比较多的有三类:
第一类:面试总失败,找不到合适的工作怎么办?
很多面试的失败,不是因为技术能力不行,而是给出的回答并不是面试官想要的。面试是有目的性的考察,同样也需要有目的性的进行准备,知招拆招。这就需要你对这个公司整体的业务、还有你面试的业务有很深的了解,同时也需要针对个人之前的工作经历,进行相应的匹配,给出面试官他想要的答案。(Tips:会说话很重要,也是大多数工程师欠缺的)
第二类:没有方向感,不知道自己应该如何提高自己怎么办?
很多刚参加工作的同事经常问这个。问题本质很简单——如何由学校的被动学习,转变成职场中的主动学习。
这里有个小经验,给自己准备一个Todo的列表,把工作中遇到的不了解的,感兴趣的内容,先记录在Todo列表中,有了空闲的时间,就从Todo列表中挑选一个跟目前工作方向最接近的,或者自己最感兴趣的、或者是自己职业规划中需要掌握的内容,进行学习。
第三类:我这个工作任务没什么技术含量,我不愿意做,该怎么办?
其实一个技术人,不太可能上来就直接进行核心项目的核心业务开发,一般都会有一段磨合期。通过在小任务中的表现,来逐渐获得领导的认可,进而逐渐获得核心项目的研发机会。
另外,并不是小的任务就没有技术挑战,如果可以在任务场景中多一些思考,仍然可以从中有所收获。不能眼高手低,从一开始就纠结选什么项目,往往容易丢了西瓜捡了芝麻。
码农陈百万:在您自己的职业生涯中,有没有遇到过当时觉得棘手的问题,是如何克服的呢?AI乔治:我之前在猫厂,从一个普通程序员到技术专家,也经历了很多变动。我认为一个技术人的成长,始终面临着这三个问题:
问题一:面临有挑战的任务和项目
开发工程师有自己的OKR,一般都是按部就班的完成自己的任务,但难免会临时插入重要且紧急的需求,或者接到难度较高、很有挑战性、需要自己探索的任务,很多技术人没法平衡这种压力,会把自己搞的很烦躁,甚至一怒之下冲动辞职。
我在之前也经历了很多重要的项目,大小不一,但最难、印象最深的就是做一个跨语言服务化的项目,这个项目不是一个新业务的研发,而是一个需要配合不同语言体系,不同架构的业务的中间件方案研发。这个任务最大的困难就是业界没有合适的方案进行参考,需要根据平台自身的需求、自身的业务特点,进行探索、研发、演进,一开始整个团队都很难推动开展。
但很快我们就进行了任务的拆分和细化,在这个项目中,我们从最根本的业务需求出发,设计各种方案,快速试错,逐渐演变成,与业界服务化最新趋势才思路不谋而合,我们的设计成为了Service Mesh方向上为数不多的大规模应用方案之一。
困难就是机会,面对突如其来的任务和挑战,合理的调整自己的心态,相信问题总是可以解决的,将自己的模块做到极致,也需要和团队打好配合随时补位。
问题二:组织架构的变动
现在的互联网节奏飞快,可能项目做了一段时间就被毙掉,在外人看来的高薪且稳定的技术人也要面临裁员和转岗的变动,2018年年底也看到了很多工程师被裁员的新闻。这种非主观意愿的变动,很容易让人难以接受进而对自己能力产生质疑。
我也曾经历过这种变动,当时加入到猫厂主要是负责支付相关的业务,后来因为组织调整和方向的变动,进行了调岗,当时的心态就比较波动,一是觉得业务不熟悉自己可能无法开展工作,二是心理上有一定落差担心与人沟通变得复杂。
年轻的时候心态调整是很难的,不过我觉得失落肯定是没用的,积极的在找解决办法。当时我快速了解新的工作,学习相关的领域知识,努力打造自己的技术品牌形象,也最终和这个团队融入的很好,得到了大家的认可。
经此调整,我发现工程师的立足根本永远是技术能力,无论是熟悉的领域或是不熟悉的领域,都需要能快速适应。我觉得面对这种问题,最重要的是提升自己的技术能力,不要将技术能力与业务绑定,也不要自怨自艾沉迷在颓废失落的情绪之中。
问题三:机会的错失和争取
之前的两点主要和日常工作相关,但整个技术人的职业生涯发展,都面临着机会的错失和争取。我发现大部分技术人都深知要努力提升自己的技术,相信只要技术好就能走天下的理论。但升职加薪的机会来临时,他们却往往抓不住。这个机会可能是一次职级调整的述职,也可能是一次换工作的面试.....
我在刚毕业1年半的时候,错失过一次人人网的入职机会,当时的人人网还是鼎盛时期,是个金饭碗。面试失败的原因可以归结为2点:
1、忽略了面试前基础知识的复习,从投简历到面试只有一天时间,基本等同于裸面;
2、对面试的职位没有提前沟通,面试到2面时,才发现不是自己喜欢的岗位,然后又调换了另外一个部门的面试官,这两个问题导致了最后的面试失败。
后来我面试猫厂时,吸取了失败的经验,进行了充足的准备。对面试的工作岗位也进行了详细的了解,当时面试的支付相关的岗位,我还专门在简历中突出了自己的做过支付的相关经历,顺利拿到了Offer,从而为自己之后的发展铺好了路。
码农陈百万:您认为一个技术工程师在工作中,或者晋升中面临的最大的挑战是什么呢?AI乔治:每个工程师在职业生涯中都可能会遇到一些迷茫和挑战,例如职业生涯中的平台期(技术没有获得明显提升)、职业的转型期等。
在我看来,一个最大的挑战是:很多工程师在工作时,没有从业务角度进行思考,甚至有时仅盲目的按照研发任务进行开发,虽然工作量很大,但在晋升时实际收获却并不理想,自己心里也会委屈。
技术工程师的晋升,其实最主要的是看重工作成果。这种成果一定要由量变引发了质变,比如你为了提高大家的开发效率,开发了一个公用平台,节省了很多时间;或者你研发的东西,解决了公司的一个技术难点,这些比埋头苦干不计结果更有用。仅仅做常规的工作,很难让别人看到你。要想成功晋级,我给大家4个建议:
1、从业务角度、产品角度思考问题,思考如何能在业务角度更好的为公司产生价值
2、目的性要明确,随时做好进度规划
3、工作或阶段性任务完成时,要及时做总结,既有助于发现不足日后进行改进,也有利于后续晋升答辩时提前准备内容
4、在工作中要尽量树立起自身的技术品牌。例如言出必行、技术问题排查与分享等
其实一个技术人,不太可能上来就直接进行核心项目的核心业务开发,一般都会有一段磨合期。通过在小任务中的表现,来逐渐获得领导的认可,进而逐渐获得核心项目的研发机会。
另外,并不是小的任务就没有技术挑战,如果可以在任务场景中多一些思考,仍然可以从中有所收获。不能眼高手低,从一开始就纠结选什么项目,往往容易丢了西瓜捡了芝麻。
码农陈百万:请您对0-5年经验的技术开发工程师,分别给一些职场发展的建议吧!AI乔治:对于不同工作经验的技术人,工作的能力要求和个人的发展要求是不同的,我把它划分成3个阶段:
大学生/应届生
求职:基础知识的掌握和逻辑思维的培养最重要。实习经历是非常重要的加分项,如果没有实习经历,可以自己进行一些小项目的开发或阅读经典框架的源码。
职场:工作前1、2年切记心浮气躁,先打好基础,注意知识广度的培养,保持对新技术的好奇心。
3年左右经验
求职:基础知识是重点考察对象,对于知识的了解深度、项目、架构的理解是非常重要的加分项。
职场:需要多一些主动思考,培养自我学习能力,要有意识的加强锻炼团队协作、跨团队沟通、项目设计等能力
5年左右经验
求职:项目经历的考察是重中之重,对问题的解决方案、架构设计都会有较高的要求
职场:这个阶段最重要的是树立起自己的技术品牌。要经常思考业务或项目中存在什么样的问题(不仅仅是技术方面的问题),如何解决,解决后的收益是什么。对于管理能力要进行有意识的加强
我们应该在不同时期应该培养不同的能力,才能在机会来临的时候更有底气。
码农陈百万:今年金九银十肯定是招聘的旺季,可以给换工作的朋友一些求职建议么?AI乔治:建议大家在面试前简单对即将面试的公司业务和岗位职责做一些功课。有针对性的准备,才能事半功倍。临时抱佛脚的成功几率肯定是不高的,因为技术能力不是一朝一夕之功,更多的是要坚持学习。
学习首先你要有个框架,就像书的目录一样,先梗概后细节,在自己的脑海里建立一套知识体系,再一块一块的填满。在如何争取到好的机会这方面,我也将自己多年的面试经验,梳理出成套的面试方法论,结合拉勾的面试大数据,形成体系化的Java面试课程,给大家共享一些面试的知识点和技巧。
不知你们看完以上内容是否收获满满?想要职业发展更上一层楼 ,不妨大家继续往下看。下面是我整理毕生经验总结出来的java后端架构学习体系路线,大家不妨可以参考下!
《分布式专题》
《微服务专题》
《源码分析专题》
《性能优化》
《工程化专题》
每个知识点都会讲到目前最热门的面试考察点和加分项,以及大厂的面试真题,从而梳理出清晰的大纲方便复习。
这些知识框架,不论今后用于面试前的查漏补缺,还是对你的职业生涯中的转正、晋升评审也有一定参考意义。
写在最后
以上免费Java后端架构资料需要自己领取:涵盖了高可用,高并发,高性能及分布式,Jvm性能调优,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx、jvm等多个知识点的架构资料。