如何成为资深软件工程师(JAVA方向)

这是一篇干货文。

为什么要成为一名资深软件工程师

        让我们先考虑一个问题,我相信也是绝大多数程序员迷茫和思考过的问题:

        我现在工作(一二三四五六)年了,听说程序员写代码最多也就到(3035)岁,那之后我该怎么办/em>

        对于这个问题,恐怕很多人想的大概都是转行吧。也经常有新闻报道有程序员不干了,在国贸CBD卖煎饼果子一个月赚好几万,有程序员不干了,卖了五道口的房子创业去了。

        这些新闻无一不带来满满的负能量:程序员到了30多岁就别干了,想个其他的办法去赚钱吧。

        对于热爱软件行业的我们来说,这能接受吗是完全无法接受。往煎饼果子上刷酱能有敲击键盘的感觉舒爽吗,今天搞定了几个找茬的城管能有搞定一个折磨很久的BUG更让人值得庆祝吗,更不用说社会地位和社会认可这些了。

        至于创业……我现在就作为一名士兵,站在创业者的战场里,看着这满地的尸骸,“一将成名万骨枯”这句话太贴切不过了。真心想说,创业比换一份工作难多了,如果没有被周围朋友都认可的魄力和领导力和实力,还是再修炼一段时间再考虑创业的事情吧。

        所以对于这个问题,我要说的就是,对于普通的我们来说,不换行,就在这一行做下去,找到自己最合适的方式做下去。这不是一条前路未知的凶险路,美帝的软件行业已经证明,程序员可以做一生。

        成为一名货真价实(划重点)的资深软件工程师,无疑是热爱代码享受编程的同学一条不错的道路。

        可能有的同学要问,我就这么在软件行业混着不行吗,为什么一定要折磨自己,去学习那么多东西呢。

        让我们假设下面一张图,这张图展示了随着工作经验的增长,同龄同行的技能水平分布,y轴是百分比,x轴是什么握的技能分值家仔细看看,恐怕也明白了吧。

234152_PzKd_3026173.png

(本图未采集实际数据,只是演示一个趋势)

结论:只要也只有不停的努力,才能在这一行呆下去,才能不被淘汰被动转行,才能收获更高的薪水。

 

怎样才算是资深软件工程师

        让我们再考虑一个问题:

        我上招聘网站,浏览各个公司岗位的职位要求,为什么总有种要求很高的感觉,就连我们公司扩招的,我这个级别的职位,怎么感觉那要求我自己都达不到(惊恐脸)/em>

        下面是某招聘网站上某知名互联网公司的招聘要求:

135317_yZLy_3026173.png 135416_bJV2_3026173.png 135509_TB4Y_3026173.png

        大略一眼看去,好像这三个职位除了岗位职责不同,对技能的要求除了行业经验和技术经验,对其他并没有太多区别。

        然而大家都明白,这只是冰山在海面的一角,海面之下的要求到底有多少,是谁也难以说清的。

142851_nm72_3026173.png

        “对其核心思想,实现原理有一定认知。”多少才算一定认知个级别的岗位要求的认知是一样的吗如spring,如果我要投递资深研发,会使用会配置就算一定认知,还是读过源码、对spring的实现原理了解三分透算一定认知,还是能够写一个自己的代替spring的开源框架才算一定认知/p>

        “具有基于SOA架构的复杂业务系统开发经验。”三个岗位要求是一样的吗,是会在SOA的框架下写符合规范的业务代码,还是会在已有框架下独立设计填加模块,还是说能够自己独立搭建一个SOA架构,还是说要对SOA有自己独到的见解。

        还有那些没说的,技术以外的,比如对个人素质的要求呢些又是什么要求/p>

        以上实在是太模糊了,如果能够量化该多好。

        那就让我们做一个量化好了,为此我总结了大量招聘启事的要求,并将简历里提到相关要素全部抽取并列了出来。

基础知识 大学里学习的知识以及一些语言基础知识
后端技术 实际开发中会用到的后端技术
前端技术 实际开发中会用到的前端技术
架构设计 搭建架构的能力或者在已有架构下设计新模块的能力
行业经验 各类行业的知识和经验
技术实践 一些需要经历实战才能得到的经验
交流沟通 与各类人等沟通
解决问题 解决各种开发和上线后的问题

        首先,我将专业技能掌握程度分为几个级别,大概是如下的分法:

0分 刚刚接触,完全不懂
1分 会使用,仅此而已
2分 使用熟练,懂一些基本配置,可调整基本配置
3分 懂几乎所有配置,读过一些源码,懂一些原理,可做小部分自定义扩展
4分 完全理解原理,读过几乎所有源码,并可做大规模的自定义扩展及改动
5分 特殊级别,行业专家级别,可以在这个领域提出更好的建议

        就拿前端来举例吧,我最擅长的是jQuery,也仅仅是会用,所以我给自己打1分。业内名人前端专家阮一峰,对某项前端技术的了解,也许可以打个3.5分,vuejs的作者尤雨溪,我认为他对vuejs的了解是接近5分了。

        素质类技能分法如下:

0分 非常糟糕,这方面情商为0
1分 不太糟糕,多亏你达到了这个分数,人们才能把你和动物区分开来
2分 一般而已,但也仅限于此了,并没有人会觉得你这方面出众
3分 还算优秀,人们在想到这方面做的优秀的人时会想起你
4分 简直完美,如同人民币一样,几乎人人认可,人人夸赞,甚至都有人主动宣传你了
5分 特殊级别,心灵导师,慕名而来的人们踏破门槛

        就拿沟通能力来说,一岁宝宝对外的沟通能力无疑只有一分,马云的演讲能力也许可以达到3.8分,观世音菩萨最可能就是5分的水平了吧(不说话都一堆人整天来拜)。

        有了这个量化评分标准,我试着给自己打了一下分,画了一个雷达图出来

014910_F8i9_3026173.png

我已经尽力夸奖自己了,没想到还是这么惨不忍睹……

我们再试着分析一下,上面某公司的三个职位要求,又是分别什么水平呢

015456_gT0m_3026173.png 015716_evTz_3026173.png 015858_Tt39_3026173.png

如果再去投递,是不是就心里有底许多呢/p>

讲了这么多,我们终于可以给出一个资深软件工程师的具体量化标准了,以下就是我对大量招聘启事的收集,套用上述量化标准,汇总得出的资深软件工程师(后端)平均要求雷达图:

020919_e6kp_3026173.png

结论:毫不夸张的说,如果你能达到如上能力值,市面上的绝大多数公司都可以投递了。

 

如何成为一名货真价实的资深软件工程师

        讲了为什么要做资深软件工程师,怎样才算资深软件工程师,那接下来自然是要将如何成为资深软件工程师了。

以下,是我参考了某网站的技能图谱,以及招聘启事提到的具体技术,列出的资深软件工程师(java),所需修炼的能力(以下技能要求掌握程度并不相同)

基础知识 后端技术 前端技术 架构设计 行业经验 技术实践 交流沟通 解决问题
数据结构与算法

一站式框架

(spring、spring boot等)

javascript 单点架构SOA架构微服务 金融 高并发场景 人员带培 技术调研
JVM虚拟机

MVC

(springMVC、struts2等)

Html/css IAASSAASPAAS 保险 海量数据场景

与各种角色沟通

(产品经理、运营、其他程序员、运维、其他职能部门、第三方厂商、客户等)

系统运维
JAVA语言

ORM

(mybatis、hibernate等)

jQuery 容器技术 物流 大数据分析   技术难点
JAVA多线程

数据库

(mysql、oracle等)

组件式框架

(React、AngularJS、VueJS等)

  电商 灰度发布    
JAVA集合

NoSql

(MongoDB、HBase等)

    支付 系统调优    
JAVA I/O

消息队列

(ActiveMQ、RebbitMQ等)

    其他 第三方支付    
JAVA socket

分布式缓存

(redis、memcached等)

      多线程模块    

        已经很清晰了,可以看出,只是混日子、混工作经验是没用的。要成为一名货真价实的资深软件工程师,必须经过大量系统的学习,刻苦的学习,大量的实践,以及对自身综合素质的修养和提高才可以。

除了资深软件工程师,我们还可以成为什么

        诚然,许多人并不喜欢一味的钻研技术。在技术打底的情况下,有的人更喜欢做项目管理多一些,有的人更喜欢做一些产品相关的事情。就算是一味的钻研技术,也可以细分成喜欢做基础框架的纯技术流,喜欢解决实际问题的业务流。

        但不管怎样,只要有心仪的方向和职位,只需分析一下市面上的招聘启事,依照那些要求打打分,同样可以得出一个硬性的要求,找准自己努力的方向。

       

转载于:https://my.oschina.net/mappush/blog/785949

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91437 人正在系统学习中 相关资源:聚才快递单打印软件-互联网工具类资源-CSDN文库

来源:cidu9800

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年10月8日
下一篇 2016年10月9日

相关推荐