这是一篇干货文。
为什么要成为一名资深软件工程师
让我们先考虑一个问题,我相信也是绝大多数程序员迷茫和思考过的问题:
我现在工作(一二三四五六)年了,听说程序员写代码最多也就到(3035)岁,那之后我该怎么办/em>
对于这个问题,恐怕很多人想的大概都是转行吧。也经常有新闻 道有程序员不干了,在国贸CBD卖煎饼果子一个月赚好几万,有程序员不干了,卖了五道口的房子创业去了。
这些新闻无一不带来满满的负能量:程序员到了30多岁就别干了,想个其他的办法去赚钱吧。
对于热爱软件行业的我们来说,这能接受吗是完全无法接受。往煎饼果子上刷酱能有敲击键盘的感觉舒爽吗,今天搞定了几个找茬的城管能有搞定一个折磨很久的BUG更让人值得庆祝吗,更不用说 会地位和 会认可这些了。
至于创业……我现在就作为一名士兵,站在创业者的战场里,看着这满地的尸骸,“一将成名万骨枯”这句话太贴切不过了。真心想说,创业比换一份工作难多了,如果没有被周围朋友都认可的魄力和领导力和实力,还是再修炼一段时间再考虑创业的事情吧。
所以对于这个问题,我要说的就是,对于普通的我们来说,不换行,就在这一行做下去,找到自己最合适的方式做下去。这不是一条前路未知的凶险路,美帝的软件行业已经证明,程序员可以做一生。
成为一名货真价实(划重点)的资深软件工程师,无疑是热爱代码享受编程的同学一条不错的道路。
可能有的同学要问,我就这么在软件行业混着不行吗,为什么一定要折磨自己,去学习那么多东西呢。
让我们假设下面一张图,这张图展示了随着工作经验的增长,同龄同行的技能水平分布,y轴是百分比,x轴是什么握的技能分值家仔细看看,恐怕也明白了吧。
(本图未采集实际数据,只是演示一个趋势)
结论:只要也只有不停的努力,才能在这一行呆下去,才能不被淘汰被动转行,才能收获更高的薪水。
怎样才算是资深软件工程师
让我们再考虑一个问题:
我上招聘 站,浏览各个公司岗位的职位要求,为什么总有种要求很高的感觉,就连我们公司扩招的,我这个级别的职位,怎么感觉那要求我自己都达不到(惊恐脸)/em>
下面是某招聘 站上某知名互联 公司的招聘要求:
大略一眼看去,好像这三个职位除了岗位职责不同,对技能的要求除了行业经验和技术经验,对其他并没有太多区别。
然而大家都明白,这只是冰山在海面的一角,海面之下的要求到底有多少,是谁也难以说清的。
“对其核心思想,实现原理有一定认知。”多少才算一定认知个级别的岗位要求的认知是一样的吗如spring,如果我要投递资深研发,会使用会配置就算一定认知,还是读过源码、对spring的实现原理了解三分透算一定认知,还是能够写一个自己的代替spring的开源框架才算一定认知/p>
“具有基于SOA架构的复杂业务系统开发经验。”三个岗位要求是一样的吗,是会在SOA的框架下写符合规范的业务代码,还是会在已有框架下独立设计填加模块,还是说能够自己独立搭建一个SOA架构,还是说要对SOA有自己独到的见解。
还有那些没说的,技术以外的,比如对个人素质的要求呢些又是什么要求/p>
以上实在是太模糊了,如果能够量化该多好。
那就让我们做一个量化好了,为此我总结了大量招聘启事的要求,并将简历里提到相关要素全部抽取并列了出来。
基础知识 | 大学里学习的知识以及一些语言基础知识 |
后端技术 | 实际开发中会用到的后端技术 |
前端技术 | 实际开发中会用到的前端技术 |
架构设计 | 搭建架构的能力或者在已有架构下设计新模块的能力 |
行业经验 | 各类行业的知识和经验 |
技术实践 | 一些需要经历实战才能得到的经验 |
交流沟通 | 与各类人等沟通 |
解决问题 | 解决各种开发和上线后的问题 |
首先,我将专业技能掌握程度分为几个级别,大概是如下的分法:
0分 | 刚刚接触,完全不懂 |
1分 | 会使用,仅此而已 |
2分 | 使用熟练,懂一些基本配置,可调整基本配置 |
3分 | 懂几乎所有配置,读过一些源码,懂一些原理,可做小部分自定义扩展 |
4分 | 完全理解原理,读过几乎所有源码,并可做大规模的自定义扩展及改动 |
5分 | 特殊级别,行业专家级别,可以在这个领域提出更好的建议 |
素质类技能分法如下:
0分 | 非常糟糕,这方面情商为0 |
1分 | 不太糟糕,多亏你达到了这个分数,人们才能把你和动物区分开来 |
2分 | 一般而已,但也仅限于此了,并没有人会觉得你这方面出众 |
3分 | 还算优秀,人们在想到这方面做的优秀的人时会想起你 |
4分 | 简直完美,如同人民币一样,几乎人人认可,人人夸赞,甚至都有人主动宣传你了 |
5分 | 特殊级别,心灵导师,慕名而来的人们踏破门槛 |
就拿沟通能力来说,一岁宝宝对外的沟通能力无疑只有一分,马云的演讲能力也许可以达到3.8分,观世音菩萨最可能就是5分的水平了吧(不说话都一堆人整天来拜)。
有了这个量化评分标准,我试着给自己打了一下分,画了一个雷达图出来
我已经尽力夸奖自己了,没想到还是这么惨不忍睹……
我们再试着分析一下,上面某公司的三个职位要求,又是分别什么水平呢
如果再去投递,是不是就心里有底许多呢/p>
讲了这么多,我们终于可以给出一个资深软件工程师的具体量化标准了,以下就是我对大量招聘启事的收集,套用上述量化标准,汇总得出的资深软件工程师(后端)平均要求雷达图:
结论:毫不夸张的说,如果你能达到如上能力值,市面上的绝大多数公司都可以投递了。
如何成为一名货真价实的资深软件工程师
讲了为什么要做资深软件工程师,怎样才算资深软件工程师,那接下来自然是要将如何成为资深软件工程师了。
以下,是我参考了某 站的技能图谱,以及招聘启事提到的具体技术,列出的资深软件工程师(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等) |
多线程模块 |
已经很清晰了,可以看出,只是混日子、混工作经验是没用的。要成为一名货真价实的资深软件工程师,必须经过大量系统的学习,刻苦的学习,大量的实践,以及对自身综合素质的修养和提高才可以。
除了资深软件工程师,我们还可以成为什么
诚然,许多人并不喜欢一味的钻研技术。在技术打底的情况下,有的人更喜欢做项目管理多一些,有的人更喜欢做一些产品相关的事情。就算是一味的钻研技术,也可以细分成喜欢做基础框架的纯技术流,喜欢解决实际问题的业务流。
但不管怎样,只要有心仪的方向和职位,只需分析一下市面上的招聘启事,依照那些要求打打分,同样可以得出一个硬性的要求,找准自己努力的方向。
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91437 人正在系统学习中 相关资源:聚才快递单打印软件-互联 工具类资源-CSDN文库
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!