我成功转行做了 java 程序猿!
一、前言
首先,欢迎来到我的个人博客。来到这里的每一位同学,都是即将或者已经进入 JAVA 这个行业的人了。不管你是学生,还是已经工作或者即将工作的,都希望你能有所收获。
我是一名 java 程序猿“老”司机,“老”不是说技术牛 B,而是长得老。2015 年从一个不知名的 985 院校的生物专业硕士毕业,出来找工作时才后悔选错专业,着实已晚。不幸中的万幸是我的专业方向是生物信息,是生物和计算机的交叉学科,出来的对口工作就是去做基因测序图谱分析,就像现在的新冠病毒的基因组序列的分析一样。在外人看起来好像是还不错的工作,但实际上就是跑跑脚本,出出分析报告,感觉没啥意思。所以刚毕业就找了一家做生命科学领域的云计算的公司,为以后的转行打下基础。在经过五年的摸爬滚打后,现在也能称得上是一个高级 java 开发工程师,也略懂一些架构相关的知识。做过车联网、物联网系统升级相关的业务,也做过移动支付相关的业务。通过五年的学习成长,总体的自我评价是,有一定的技术广度,但缺少一定的技术深度。
通过这篇博客,希望我个人的职场成长经历,能给大家一个学习参考,希望大家少走弯路;同时本文也是我对个人过去一段时间的工作总结和复盘。
二、心态篇
当前的社会是一个浮躁的社会,都希望一夜暴富,一夜成名。程序员这一行也一样,很多人选择做程序员并不是因为喜欢,而是因为听说这一行赚钱。我一直很羡慕 NBA 那些球员,能把篮球当做自己的爱好,同时因为这一种爱好而获得了不错的财富和声望。现实是残酷的,没有那么多人有这样的机会,所以我们需要在工作方向和兴趣爱好上做一个平衡;我选择做技术,这符合我的个人性格,也是我的兴趣爱好,同时我认为我的能力可以做好它,它可以成为我在这个社会更好的生存下去的工具。如果只是因为听说高薪才选择这一行,技术是无止境的,更新换代速度很快,如果没有兴趣的支持, 你很难长久的做下去,同时,996 和 007 的工作常态也不是谁都愿意做的。所以你要明白技术是不是你的兴趣,加班的常态化是不是你能接受的,他能不能成为你生存下去的技能,这是你选择做技术的关键考虑指标,而不仅仅是薪资。
程序猿传说中是高薪的。每到毕业季,就会看到各大新闻热搜上各大互联网公司给 各大高校毕业生开出的白菜价都是 25w/30w/40w 年薪数字,甚至不乏有百万年薪的。要知道这些公司招收的都是顶级 985 或者专业非常对口的学生,其中不乏有硕士、博士;这些人在中国的人口基数下毕竟是少数,不是每个程序猿都是这样的;一个事实是,程序猿确实比一般的工作工资高,但是工作时间也很长。我身边的一个朋友跟我说,我的工资比他高不少,但是他不羡慕我。他追求的是自由和生活,而不是天天无止境的工作。
程序猿的浮躁,就是山望着那山高。在这个行业混几年后,经常看到有同事跳槽,带来的结果就是可观的薪资增长;每次在讨论群里一讨论,都会给自己的内心带来极大的冲击,感觉当前公司给的薪资太低,还是外面公司给的高,跳槽的想法一直是蠢蠢欲动。并不是所有的互联网公司都像 BAT 等那些大公司一样给出很高的薪水,很多公司的工资可能差不了多少,只是薪资结构的差异。当然有不少技术非常强悍的大牛,去哪里都会有高薪。有目的有计划的跳槽是可以的,如果纯粹是因为高几千块钱就跳槽,可能会得不偿失。
技术永远是程序员的核心竞争力。 我们总是被生活中大量涌现的热点所吸引,几乎没有深度阅读和思考的时间和机会。 学习技术, 需要沉下心来慢慢钻研的,是长期的;同时,学习不应该被赋予太多的功利色彩。 一个 JAVA 程序员的成长也应该是循序渐进的,初级程序员应该具备基础语法、基础框架;中级程序员应该具备:各种中间件、数据库、协议,各种优化;高级程序员应该具备网络安全、分布式、高并发、架构思维等。然而,很多程序员学习完基础语法之后,就去准备做个网站开发、研究 JVM 优化、学习高并发等,这种知识的断层很容易上演 JAVA 开发从入门到放弃。强大的核心竞争力,是长时间的学习,多个项目的磨练、实际线上项目的问题解决中获得的。初学者要做到,不急于求成,不好高骛远,一步一步,稳扎稳打,功到自然成。不急于求成,可以避免走弯路,非但不会延缓你成长的速度,反倒会节省你的时间。不好高骛远,达成一个目标,再制定下一个目标,在连续的成功和进步中,建立起自信心,激发出更强的学习兴趣。
三、技术篇
现在市面上的 java 程序员的水平参差不齐,现在的培训机构可能每个月都会送一批程序员到社会上来,以至于有人说 java 程序员已经烂大街了。培训机构出来的确实有一小部分技术实力很不错的,但是很多没有实际经验的程序员凭借着培训好的成熟的面试技巧,很容易混进了公司,等到干活的时候,理论不能和实践结合,导致企业招聘失败,所以现在企业对 java 程序员的招聘要求越来越高了。JAVA 程序员有一句话叫做:面试造导弹,工作拧螺丝。面试需要问这问那,实际工作只会用到一点。这也没有坏处,毕竟知识面广,看问题站的高度就更高,出错的概率就会更小。
一个 java 程序员,必须要会很多技能,在小公司可能需要你既当爹又当妈,需要你参与产品设计、技术架构设计、开发、压测、上线部署、运维等一系列的工作,对技术的广度要求可能要高于技术的深度。在大公司可能就需要你会这其中一种或几种,但是要求的技术深度会更高,对代码的设计和执行的性能以及可维护性要求更高。
这里是我给大家整理了一个高级程序员应该需要具备的知识技能,希望对大家差缺补漏有用。
在之前的一篇文章张整理了一些视频资源,有兴趣的也可以去看看,很多资源还是很不错的。
1.java 基础
一个好的 java 开发工程师,一定具备很好的基础知识,这些基础知识是一个程序员能迈向更高点的坚实基础和快速掌握其他语言和技能的加速器。
知识点:基本语法、数据结构、面向对象思想、常用的工具类、文件操作、JDK1.8 新特性
2.开发框架 Spring/Mybatis 等
框架可以加速企业级应用的开发,框架中有很多大牛程序员的智慧结晶,很值得大家深入学习和研究。
知识点:IOC、AOP、反射、MVC、微服务、源码
3.web 基础
很多后端 java 程序员该开始做开发的时候,都需要会简单的前端开发的基础,但是到了一定的阶段,可能就后更专注与后端技术的开发了。在很多公司,2C 的项目的前端会有专门的前端人员开发,但是内部的管理平台可能就需要后台程序员自己开发了。
知识点:HTML、CSS、JavaScript、servlet、JSP、cookie、session、json、JQuery
4.数据库
数据库是每个后端程序员必须掌握的技术,而且需要学会相关的优化技巧
知识点:基本语法、sql 优化、事物、索引、引擎、数据库设计、分表分库
5.缓存技术
缓存是现在常用的技术,缓存无处不在,cup、磁盘等都会有缓存。使用缓存的主要目的就是一个字:快。现在也可以用缓存做一些其他的功能,比如秒杀等。
知识点:redis、memcached
6.Linux
一般我们开发完成的程序是需要在 linux 环境中运行的,所以一个普通的 java 程序员可能需要会一下简单的 linux 操作比如文件操作、日志查看等;但是对于一个高级的程序员来说,压力测试、性能调优、集群搭建等都是要掌握的技术。
知识点:文件操作、常用配置修改、服务器资源查看、日志分析、项目部署、各种集群搭建
7.并发编程
一个程序只有一百个、一千个、一万个用户时,可能没有问题;但是在百万、千万个人访问时,就可能会出现各种问题。这中间就会涉及到并发编程的问题。并发问题也是面试经常问的,中间会涉及到比较底层的相关操作,比如 CAS 等。
知识点:并发包、线程池等
8.协议
作为一个程序员,必须要对网络知识有一定的了解,特别是 http 协议中规定的相关内容,比如请求报文、响应报文的格式,http 请求的交互过程等。
知识点:http、https、TCP、mqtt 等
9.JVM
jvm 也是面试长问的一个问题。关于垃圾回收机制、算法、如何调优等是需要掌握的知识。
知识点:GC 算法、可达性分析、优化
10.设计模式
设计模式对于一个高级程序员是要有所掌握的,很多时候是能够用到我们的实际项目中的。
知识点:单例、工厂、代理、策略、模板、迭代器、观察者等
11.IO
高级程序员要对 IO 的相关知识也也要了解,有一些框架比如 netty 就会用到 nio,具有高并发传输快等相关特点。
知识点:NIO、BIO
12.安全
对于一个高级程序员要对网络安全有足够的认识。
知识点:ssl、RSA、加密解密、签名验签、PKI
13.压力测试
软件上线前,需要知道我们的系统的极限是什么,有没有达到开发设计的标准,没有达到标准如何优化,这些都是高级程序员要掌握的技能。
知识点:压测步骤、工具、操作、调优
14.大数据
这个点可能要求的就不是那个高了,但是对于 zk、kafka、elk 还是经常会在实际的开发和生产中用到,zk 的数据一致性算法、kafka 的数据丢失重复消费问题也是需要高级程序员掌握的。
知识点:zookeeper、kafka、elk、hive、hadoop、spark 等
15.高并发
高并发是一个概念,也是程序员经常会听到,但是大部分程序员都接触不到的一个东西(除了压测),在互联网公司中,真正有高并发业务的也就是那些大家都听过名字的互联网公司,很多公司根本就发展不到高并发的阶段就挂了。
知识点:分布式事物、分布式锁、CAP、架构设计、分表分库、缓存技术、大数据技术、搜索引擎技术等
四、工具篇
工欲善其事,必先利其器。好的工具可以让工作效率提高一大截,下面是我个人常用的工具和网站。响应的一些资源都可以去我的网站上下载。有些工作需要激活码,建议大家支持正版,这里提供的相关资源只能用于个人的学习,不能用于商业的使用,大家学习完成后请自觉删除。
1.开发工具
IntelliJ IDEA: java 程序员最喜欢用的一款开发软件,可以去官网下载,关于激活码的事情参考我公众号上之前的一篇文章。
eclipse:也有不少人用,我最开始的开发工具。官网可以下载。
2.数据库连接
SQLyog: 这是我最喜欢用的一款 mysql 数据库连接软件,有需要可以去我的博客下载:http://wuxiaolong.tech/?p=118
sqldeveloper:这是 oracle 数据库连接工具,我用的比较少,资源也在我的博客上。
3.服务器远程连接
SecureCRT:这是系统管理员最新最喜欢用的一款远程连接工具,需要激活码。我的博客上有相关资源下载,http://wuxiaolong.tech/?p=118。
Xshell:用过一段时间,没啥感觉。
putty:也用过一段时间,一个会话一个窗口,感觉不是很友好。
4.团队开发,版本管理
GIT:非常好用的团队开发和版本管理的工具。我的博客上有相关资源下载。
SVN:几年以前用过,现在基本不用了。
5.项目构建
maven:java 开发常用的项目构建工具。官网可以直接下载。免费。
gradle: 也是常用的项目工具,我目前接触过的公司 java 开发基本不用。好像 Android 开发会用。不太熟。免费。
9.接口测试
postman: 免费的 HTTP 测试软件,可以发送 HTTP 请求并获取相应内容,前端开发,API 开发必备。我的博客上有相关资源下载,http://wuxiaolong.tech/?p=118。
10.抓包工具
Fiddler:很好用的 http 抓包工具。免费。官网可以下载。
11.文本编辑器
Notepad++: 我常用的文本编辑器。很好用。也可以下载很多插件。免费,官网可以下载。
EditPlus:用的少。
UltraEdit:用的少。
12.FTP 管理
FileZilla:免费开源的 FTP 管理软件,可以作为客户端也有服务器端,非常好用,可以通过简单的拖拽,实现文件的上传下载
13.远程桌面软件
TeamViewer:简单好用的远程桌面软件,不需要配置各种内网穿透,用手机 APP 就能控制电脑,很实用。收费。免费资源参考我的博客,http://wuxiaolong.tech/?p=118。
14.数据库设计
PowerDesigner:做数据库设计时,可以很容易构建对象之间的 ER 实体图之间的关系,一键导出 SQL,好用。免费资源参考我的博客,http://wuxiaolong.tech/?p=118。
15.虚拟化工具
VMware: 搭建测试环境,测试集群时,常用的工具,很好用。需要激活码。免费资源参考我的博客,http://wuxiaolong.tech/?p=118。
16.压力测试
Jmeter:我常用的款压力测试软件。有需要的可以去官网下载。
17.VPN
网上有一些免费的资源,可以下载客户端使用,很多都不是很稳定,下面我推荐两个,不知道是否还能使用多久,大家自行去网上搜索。greenvpn、fg757p。
18.常用网站
参考我博客总结的一篇文章:http://wuxiaolong.tech/?p=121
五、工作篇
很多程序员出来找工作时,简历不要太夸张,水分不要太大;面试不要吹的不着边际。要知道,简历过了,还要面试,面试过了,还有试用,试用过了才能转正;转正后你才有一定的主动权。薪资是和领导对这个岗位期望挂钩的,当薪资给到,但是个人能力不能匹配这个岗位的要求时,就会在公司过的很难受。可以拿比个人能力高一点的薪资,但是不能拿的高太多。大部分企业都是希望能够给员工最少的钱来让他们干最多的事。 我提倡的,拿多少钱,办多少事,不让公司吃亏,不让自己吃亏。实际上很难做到,这点,还是讲究一个平衡。
不要在公司讨论薪资情况。公司对薪资问题都是禁止员工讨论的。对于刚工作的同学,特别好奇别人的工资是多少,这一点特别不不值得提倡。讨论工资,对公司和对个人其实都是没有多大好处的。对个人而言,听到能力不如我的人工资比我高,我会心理不平衡;这种心理会不自觉的带到工作中,影响工作心态;同时员工之间可能会形成攀比心理,薪资较高的员工可能会产生自傲,而现在较低的员工可能会心里不平衡 。对于企业来讲,制定员工工资的保密制度,能够使员工对公司更加的忠诚。如果员工之间互相不知道彼此的工资,那员工之间的利益牵扯程度就会降低,员工一心为公司服务。如果员工一致认为工资较低,那他们就会在私下达成某种协议,共同组成团体来罢工对抗公司,影响公司的整个运行过程,打乱公司内一些重要事项的进度;同时企业的工资制度透明,也不利于企业压缩用人成本,企业必须要用较高的薪资才能够招揽到人才。
在公司,你解决不了问题,就是你有问题。老板和上司永远是一套强盗逻辑:不认同我,要么忍,要么滚。老板和领导的想法很固执的一点就是我请你是干啥的?就是把我的想法变成现实的。所以,哪怕你很认真地想跟他沟通你的想法,你得到的却是老板或领导的反感,甚至是一顿臭骂而已。而相反,你有多听话,老板就有多喜欢。
如果老板的想法很沙雕,怎么办?请记住这句话:“无论马云的决定是什么,我的任务都只有一个——帮助这个决定成为最正确的决定。”老板的正确的想法要去做,傻逼的想法也去做:想办法让这傻逼的想法变成牛逼的做法。想得通要去做,想不通也要去做。千万注意:如果不认同老板或领导的做法,千万不要心里盘算着表面上答应,实际没按照他的意思做而去阳奉阴违更不要消极怠工。否则就是在 zuo!
老板安排的事情,要件件有回应、事事有着落。就是要主动及时的汇报工作。及时让老板知道你做啥,做到什么程度了。一旦你主动汇报工作,不仅能表现出你对工作的尽职尽责,给老板留下好印象,还能让老板及时根据你的工作进度,对后续工作进行安排。每次接到工作,隔一两天就汇报情况,短短几句话也行,让老板能了解到目前的进度。短时间内能完成的工作,一完成就要汇报;时间跨度较长的工作,要坚持每天汇报,让领导了解进度。千万注意:千万不要接下任务后拍着胸脯说没问题,然后一个星期没有一点声音,然后让老板主动过来问你做的怎么样了。一句话:只要是领导交办的事,都应该件件有回应、事事有着落。
不怕穷一阵子,怕穷一辈子。不怕穷一口子,怕穷一家子。混职场,多数都是为了挣钱养家。所以别去仅仅为了自己去挣那一口气而去吵去骂,把领导得罪了对你一点好处没有;不妨把这口气忍下来,把工作做好,继续往上爬,挣更多钱。
花了一天时间整理的,如果您感觉对您有帮助,可以关注我的公众号交流讨论。
完成,收工!!
【传播知识,共享价值】,感谢小伙伴们的关注和支持,我是【诸葛小猿】,一个彷徨中奋斗的互联网民工。
版权声明: 本文为 InfoQ 作者【诸葛小猿】的原创文章。
原文链接:【http://xie.infoq.cn/article/c758f02bb7e928a527ca0b3de】。文章转载请联系作者。
评论