文档章节

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

可信
 可信
发布于 2016/11/11 03:25
字数 2788
阅读 81
收藏 3
点赞 0
评论 0

这是一篇干货文。

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

        让我们再考虑一个问题:

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

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

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

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

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

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

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

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

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

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

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

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

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

        素质类技能分法如下:

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

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

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

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

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

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

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

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

 

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

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

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

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

一站式框架

(spring、spring boot等)

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

MVC

(springMVC、struts2等)

Html/css IAAS\SAAS\PAAS 保险 海量数据场景

与各种角色沟通

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

系统运维
JAVA语言

ORM

(mybatis、hibernate等)

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

数据库

(mysql、oracle等)

组件式框架

(React、AngularJS、VueJS等)

  电商 灰度发布    
JAVA集合

NoSql

(MongoDB、HBase等)

    支付 系统调优    
JAVA I/O

消息队列

(ActiveMQ、RebbitMQ等)

    其他 第三方支付    
JAVA socket

分布式缓存

(redis、memcached等)

      多线程模块    

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

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

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

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

       

© 著作权归作者所有

共有 人打赏支持
可信
粉丝 1
博文 2
码字总数 3676
作品 0
杨浦
程序员
干货系列1:Java互联网网站开发工程师 的技术提高与晋升路线(技术专精)

前几天写了自己对于Java软件开发工程师职业发展规划方面的一些感悟,陆续收到一些反馈,希望我能再就Java工程师不同的开发(职责)方向谈谈职业发展问题。(上一篇:Java软件开发工程师的自我...

半饱即好
06/26
0
0
作为一名java程序员你的薪资为什么上不去?

不管是开发、测试、运维,每个技术人员心里多多少少都有一个成为技术大牛的梦,毕竟“梦想总是要有的,万一实现了呢”!正是对技术梦的追求,促使我们不断地努力和提升自己。 很多人在问我,...

java高级架构牛人
05/07
0
0
Java研发大学毕业后为何找不到理想的工作

现在大学生在大学学习Java技术,毕业后直接工作,我想在大家心里这只是再平常不过的事情了,可是为啥刚一毕业的Java应聘工程师会遭到各个研发企业的拒绝,这是刚毕业的每个大学生心中的疑虑,...

我爱编程学习
06/07
0
0
阿里获邀加入 JCP ,参与制定 Java 全球标准和技术规范

2018年5月17日,作为唯一中国代表,阿里巴巴获邀加入 Java 全球管理组织 Java Community Process (JCP) 的最高执行委员会。此次获得执行委员会席位,让中国企业首次加入到 Java 全球标准的制...

王练
05/17
0
5
为什么大批的JAVA程序员都是在转大数据

前言 首先JAVA的精密,强大,拥有其它语言不可替代的性能和可维护性,早已经是成为最受欢迎的编程语言之一,很多人想进入IT行业,首选的第一门语言就是JAVA。但是,在未来10年肯定是大数据的...

JAVA丶学习
04/18
0
0
燃!Java全球标准中国人参与制定,阿里成首个受邀中国公司

2018年5月17日,作为唯一中国代表,阿里巴巴获邀加入Java全球管理组织Java Community Process (JCP)的最高执行委员会。此次获得执行委员会席位,让中国企业首次加入到Java全球标准的制定中,...

技术小能手
05/17
0
0
我们在谈高并发、分布式,其实都在谈什么?

2018年,互联网行业风起云涌,IT工程师如果仅凭传统开发思维,无法突破固有知识体系,终将会被社会所淘汰。既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的领导型人物—...

技术琐话
06/20
0
0
原来Java大数据才是真正的高富帅!

大数据时代,中国IT环境也将面临重新洗牌,不仅仅是企业,更是程序员们转型可遇而不可求的机遇。 国内大多数大型互联网公司的程序员被称作研发工程师,但实际上国内几乎没有研发项目,只能叫...

r6auo52bk
05/04
0
0
书单丨5本Java后端技术书指引你快速进阶

一名Java开发工程师 不仅要对Java语言及特性有深层次的理解 而且需要掌握与Java相关的 框架、生态及后端开发知识 本文涉及多种后端开发需要掌握的技能 对于帮助提高开发能力非常有帮助 NO.1...

Java高级架构
05/30
0
0
请问在jsp页面里怎么得到本页面的url

如何在a.jsp使用一个变量得到该url,即http://a.jsp request.getRequestURI()能够得到本页面的相对路径 用你的例子即"a.jsp" 用javascript就可以得到 alert(window.location.href); request...

johnnyhg
2009/05/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Tomcat内存设置

第一步骤: 1、路径是Tomcat目录下的/bin/catalina.bat文件 打开catalina.bat文件 加入下面这句代码: set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m 2、路径是...

一梦心草
13分钟前
0
0
IDEA 及 Gradle 使用总结

IDEA 及 Gradle 使用总结 自动编译组件 目前Android开发的主流开发工具是 Eclipse 和 IDEA 目前主流的自动化打包工具时 ant,maven,gradle。 maven工具中有自己的依赖仓库维护,很多开源支持...

舒文joven
13分钟前
0
0
lombok 引入后,测试类始终找不到get,set方法。

开发环境为idea,jdk1.7,maven3.5. 网上直接搜出来的方法有: 1、在setting里安装lombok的plugins; 2、如下图,勾选enable annocation processing选项 3、升级maven plugins插件 我尝试了以...

Kidult
15分钟前
0
0
Duang,HUAWEI DevEco IDE全面升级啦

想感受全新UI带来的视觉及交互体验、 HiKey970开发板调测、 HiAI API推荐和收藏、 深度AI模型分析等新功能, 体验高清晰度和流畅度的远程AI真机调测吗? 全新的UI设计 采用最优秀的视觉及交互...

华为终端开放实验室
23分钟前
1
0
阻止事件冒泡,阻止默认事件

1.event.stopPropagation()方法 这是阻止事件的冒泡方法,不让事件向documen上蔓延,但是默认事件任然会执行,当你掉用这个方法的时候,如果点击一个连接,这个连接仍然会被打开, 2.event....

闫亚亚
25分钟前
0
0
网络监控工具类

package com.guorentong.learn.organ.utils;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.net.ConnectivityManage......

王先森oO
25分钟前
0
0
命令

sudo nginx -s reload 重启nginx sudo lsof -i -P | grep -i "listen" 查看端口占用

那个猴子
29分钟前
0
0
用scrapy-redis爬去新浪-以及把数据存储到

需求:爬取新浪网导航页(http://news.sina.com.cn/guide/)所有下所有大类、小类、小类里的子链接,以及子链接页面的新闻内容。 准备工作: a.安装redis(windows或者linux) b.安装Redis Des...

丁典
30分钟前
0
0
PHP常用函数篇

1.为什么要使用函数? 除了内建的PHP函数,我们可以创建我们自己的函数。 函数是可以在程序中重复使用的语句块。 使代码逻辑更清晰 避免过多的全局变量 封装后避免相同逻辑重复代码,只需调用...

天地有涯风有信_大海无量不见人
30分钟前
0
0
对List分组

在日常工作中会遇到这样的情景,我们需要对List按照List中对象的一个值进行分组。比如一个Human的List,我们要根据性别分组,传统的方法是做双层循环,逐个对比,今天我要介绍一种详单简单的...

珂jack
32分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部