我认为的⾼级开发⼯程师到底应该是怎样的?你⼜具备这些能
⼒吗?
之前有很多读者会经常问我类似的问题:
达到什么⽔品才能进阿⾥? 阿⾥的P6有哪些要求? 我想进阿⾥,我要准备什么?
✍阿⾥的⼈才画像
其实⾃⼰也做过⾯试官,也⾯试过很多优秀的⼈,⼼⾥⼤概有⼀个标准,知道什么样的⼈才是我们想要的⼈。
但是这个标准我⼀直都没有仔细的去思考过,刚好最近有时间,我好好的思考了⼀下,根据我的理解,谈⼀谈我认为的阿⾥的⼈才画像是怎样的。
我觉得阿⾥需要的⼈才⼤概需要具备这⼏⽅⾯的能⼒:
1、软件开发能⼒
2、架构设计能⼒
3、项⽬管理能⼒
4、线上运维能⼒
5、业务理解能⼒
6、学习能⼒
7、影响⼒
8、⽬标导向
以上,是我认为是⼀个P6需要具备的能⼒的⼏个⽅⾯,但是每个⽅⾯的能⼒并不⼀定要求⾮常出众,但是有些⼜很重要。
♨软件开发能⼒
对于⼀个程序员来说,软件开发能⼒当然是⼀个最最基础的能⼒了,很多⾯试主要考察的也都是软件开发能⼒。
那么,到底需要掌握哪些知识,才能达到阿⾥的P6的标准呢?
在回答这个问题之前,我看了很多⼤⼚的招聘要求,并且回顾了⼀下以往⾯试时⾃⼰对于候选⼈的要求,⼤概总结出⼀些我认为⽐较重要的知识点。
可以说,如果以下这些知识点,候选⼈不能完全掌握的话,⾯试挂掉的概率很⼤。
1、基础。这个是最最基本的,像集合类、IO、反射这些常见的内容⼀定要做到如数家珍。
2、并发编程。这个也是⾯试很看重的知识点,对于线程安全问题、相关关键字的⽤法及原理、并发包等知识也要掌握。
3、JVM相关。这部分⼏乎是⾯试必考!JVM内存结构、GC相关的、调优、类加载等等这些的原理都要有了解的。
4、框架相关。⽬前主流的⼀些框架⼀定要了解的,如Spring等开源框架, 要知道⽤法及重要特性的原理、
4、分布式相关。这是⼤⼚⽐较看重的⼀点了,对于分布式理论知识、缓存、消息、RPC等⼯具的⽤法和原理有了解的话,⾯试会轻松很多。
5、⾼并发、⾼性能⽅⾯只是。这部分也是挺重要的。
6、数据库相关知识。如Mysql的⼀些知识、锁、隔离级别、事务、索引等等。
7、数据结构与算法。这部分很多公司喜欢问⼀些算法题。
如果你能满⾜以下要求,那么说明你已经基本达到了:
基础篇:掌握70%;底层篇:掌握60% ;进阶篇:掌握50%;⾼级篇:掌握30%。
那么,你的知识⾯的⼴度以及深度的话,我认为算是达到了⼀个相对符合标准的程度。
♨架构设计能⼒
很多⼈会认为,我只是⼀个做开发的,⼜不是架构师,为什么要求我有架构能⼒呢?
这⼀点其实也能理解,因为⼀个P6在公司内部的定位应该是⼀个系统或者⼀个域的Owner,他需要负责这个系统和这个域的系统设计,那么就需要具备⼀定的架构设计能⼒,这样才能设计出合理的系统。
要想设计出好的架构,我觉得需要⼏个⽅⾯:
1、了解常见的架构设计原则
2、对于常见的架构问题的解决⽅案有了解。
3、有⼀定的架构经验。
⾸先,架构原则,那么就需要掌握⼀些基本的原则,如单⼀职责原则、开放封闭原则、⾥⽒替代原则、依赖倒置原则、接⼝分离原则等。还有⼀些理论,如破窗理论、康威定律、墨菲定律等等。
除此之外,还需要对于常见的架构问题的解决⽅案有了解,很多⼈觉得这个好像离开发很远,到底什么是架构问题的?游戏开发工程师需要学什么
其实并不远,简单点说,分布式⼀致性问题、性能问题、⾼并发问题。这些都可以理解为是架构问题的,所以,需要掌握的就是⼀些分布式相关知识。如果你能把以下⼏个问题回答好,那么你算是对于这些问题有⼀定的理解了:
1、如何分布式系统的解决数据⼀致性问题
2、说⼀下想要设计⼀个⾼并发的秒杀系统,都需要做哪些事情?
♨项⽬管理能⼒
好像很多公司有专职的项⽬经理,但是在阿⾥的的⼤部分技术团队,都是不设⽴纯项⽬经理职位的,⼀般都是由项⽬组中的某位技术⼈员兼任项⽬经理⾓⾊,负责项⽬推进。
所以,⼀般⼀个⼩型项⽬,都会需要⼀个P6来担任项⽬经理的。那么相关管理的能⼒就⾄关重要了。⼀般需要可以作为负责⼈领导部门内跨团队的项⽬。
⾸先最基本的要求就是需要把控项⽬进度以及项⽬质量,这个就需要有很好的协调能⼒,可以在项⽬中很好的了解到成员的情况,适当的想办法解决合作的问题。
稍微⾼⼀点的要求,就是要求可以提前预知项⽬风险,并给出建设性建议。如果能够做到这⼀点的项⽬经理,就算是⽐较优秀的了。
还有⼀点我觉得也是⽐较重要的,那就是在项⽬管理中,如何协调业务⽅以及开发团队之间的⽭盾问题,如何做到业务⽅满意,⼜让兄弟们不那么累。好的办法就是既要适当降低业务⽅的预期,⼜要提升兄弟们的战⽃⼒。
还有⼀点,我觉得也挺重要的,那就是项⽬经理需要保护项⽬组好兄弟们,不要因为项⽬倒排就压榨兄弟们的时间,因为加班⼀⽅⾯会影响兄弟们的⾝体健康,另外加班加点上线的项⽬,⼀旦出了故障,还是需要兄弟们扛的。。。
♨线上运维能⼒
我之前看过⼀份调查报告,在雇主调查中,雇主们最希望程序员掌握的技能列表中,问题排查能⼒是排在前三名中的。
⽽问题排查就是线上运维的能⼒之⼀。
不要以为线上运维就是专职的运维⼈员的⼯作,其实不是的。还是那句话,P6的⼈是⼀个系统或者⼀个域的Owner,他是要对这个系统的所有情况都负责的。
从开发到上线再到后期运维,他都要完全掌握,要知道线上的正常⽔位是怎样的,什么指标是存在问题的。出了问题之后⼜如何排查,这些都是⾄关重要的技能。
关于这种部分,其实需要掌握的知识点并不是特别的多,主要有以下这些:
1、常见的Linux命令的使⽤
2、常见的服务器指标(Load、CPU、内存、GC情况等)的查看、问题排查
3、系统调优、性能调优、sql优化等技能
4、常见问题排查思路。如死锁问题、慢SQL问题、内存溢出问题、Load飙⾼问题等等。
♨业务理解能⼒
我在⾯试的时候,最开始都会问⼀下和业务有关的,如果候选⼈对于⾃⼰负责的业务都不是很理解的话,那么基本就很难过关了。
因为技术是服务于业务的,尤其是⼀个业务开发,如果⾃⼰做的业务都不了解,只是机械的完成⾃⼰负责的⼩功能的话,那么我不认为他是⼀个好的开发⼈员。
⽽且,我们希望⼀个达到⾼级开发的⼈,不只是⼀个只会做业务需求的⼈,达到这个层级的⼈,需要有⾃⼰的判断,先⽤嘴解决需求,不⾏的话再⽤代码解决。
⼀个好的P6应该是可以独⽴负责⼀个业务,并且分辨出需求的优先级,能够提出⾃⼰的意见。可以影响业务的⾛向的。
所以,针对⼤部分程序员来说,⾸先要理解业务,然后要尝试着提出⾃⼰意见,并且可以分辨出需求的优先级,并且敢于对不合理需求说不。
当然,在提出问题的和意见的时候,如果能够给出好的⽅案,那就更好了。⼤多数情况下,技术⼈员应该是整个项⽬组最了解业务的,毕竟代码是他写的。
♨学习能⼒
学习能⼒不⽤我说,⼤家⼀定都觉得他很重要,这是⽏庸置疑的。
但是经过这么多⾯试下来,我发现,这个能⼒并不是所有⼈都具备的。
P6这个层级在阿⾥并不是⼀个很⾼的层级,还有很⼤的上升空间,所以,真的需要很强的学习能⼒才能不断的提升⾃⼰。
⽽且,我理解的学习能⼒,不仅仅是快速学会⼀个知识,⽽是可以在实际⼯作中运⽤他。
所以,我⾯试的时候,⼀般会通过以下⼏个问题考察候选⼈的学习能⼒:
1、你知道最新版的JDK是哪个版本么?新特性知道吗?
2、lambda表达式⽤过吗?
3、最近在看什么技术书籍吗?有什么技术是你刚刚学会的吗?
所以,⼀个⾼级开发,是可以快速上⼿新的技术或者业务,可以独挡⼀⾯的。所谓独当⼀⾯,并不只是在⾃⼰熟悉的那⼀⾯可以独挡,⽽是换个⾯,你也可以快速的独挡起来!
♨影响⼒
影响⼒,这⼀点看起来很虚,但是确实也很重要的,这也是为什么很多招聘要求中会写"有开源项⽬经验优先"的⼀个原因之⼀。
从外⾯招⼈的话还不是特别的明显,阿⾥内部的晋升在影响⼒⽅⾯⽐较看重,因为提名晋升是要可以服众的,那么怎么让别⼈信服?那就是这个⼈有⾜够的影响⼒。
⼀般来说,对于⼀个P6的⼯程师来说,要求是要在⾃⼰的团队内部有⼀定的影响⼒,可以被团队内重视,⼀提到某个领域,⼤家第⼀个想到你。
提升影响⼒的⽅式有很多,⽐如经常帮助团队内同学解决技术问题、经常在团队内部做技术分享,经常分享技术⽂章等等。还有⼀些⽐如开源项⽬、专利、著作等也是很好的提升影响⼒的⽅式。
但是其实,影响⼒这东西,并不是刻意培养就能做得到的,这个是⼀个潜移默化的过程。真的做到可以正⾯的影响到别⼈,影响⼒就出来了。
♨⽬标导向
很多招聘都会说要求有钻研精神、责任⼼、抗压能⼒强等,很多⼈理解是要求能加班,但是其实这是对于候选⼈是不是⽬标导向的⼀个筛选。
对于P6来说,⽬标导向就是可以做到指哪打哪,交给你的⼯作,你可以全⼒的把他做好,⽆论遇到什么样的困难,都可以想办法去克服。
⽬标导向,还可以换成⼀个词,那就是要性,⼀个要性强的⼈,必然是⽬标导向的⼈。
"要性"就是代表着我不仅想做,我还⼀定要做成。
⼩编的从零基础到⾼级软件开发⼯程师
涉及:游戏开发、课程设计、常⽤软件开发、⿊客等等...
♨总结
以上,说了很多很多,我的⼀些理解。相信很多⼈会有不同的意见,这也是正常的,每个⼈的⼈才观都不太⼀样。
⾄少我⾯试的时候,招⼈的⼀个标准,就是和他聊下来之后,我觉得我可以和他很好的合作,可以把我认为重要的事情交给他的,那么他就可以通过我的⾯试了。
那么,如何在⾯试中给到我这种信任感,那就是让我觉得他技术能⼒不错,有⼀定的架构思维、有线上问题排查的能⼒、了解⾃⼰的业务、可以负责⼀个项⽬的管理、也能快速的学习⼀些新的知识。另外,如果可以让我感受到他是⼀个⽬标导向的⼈,并且有⼀定的影响⼒的话,那么我会更加愿意接受他。
以上,这8点,不仅仅是对P6这个层级的要求,其实不同的层级都适⽤,只是针对具体某⼀项,不同层级的要求不同⽽已。
当然,其实我并不觉得这只是阿⾥的要求,因为我只是在阿⾥当过⾯试官,所以我只能表达下我认为的阿⾥需要的⼈才是什么样的。
如果以后我去到其他公司了,或者⾃⼰创业了,那么我相信我招⼈的标准也⼀定还是这个。因为我始终认为,⾼级开发⼯程师,⼀定不仅仅是写代码的。
最后,希望我今天的⽂章可以让你到⼀点⽅向。愿所有读者:长风破浪会有时,直挂云帆济沧海。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论