不知不觉就毕业这么多年了,年前的时候就想总结一下自己的工作心得,复盘一下自己的工作学习之旅,但是最近因为忙于工作,抽不出时间来写这篇文章。

通过这么多年的工作,java生态圈或多或少都有用过或者接触过。小程序、前端、运维也都会涉及到一些。毕竟不同的公司对员工要求也会不一样,大公司可能专精一项就可以了,小公司可能就要做全栈开发。下面给大家我将从做事、学习、架构师三个维度给大家分享一下自己的心得。

自曝一个“平平无奇“程序猿五年的工作历程_思考

一、做事

1.1 心态

首先先来说说工作中,如何做事比较好。在职场中有形形色色的人,他们对工作的看法截然不同,有些人认为工作只是一份工作,我只是在这里打工的,上班摸摸鱼到点下班就可以了,然后就这样日复一日。有些人认为工作是积累自己能力和人脉的关键场所,会想方设法的做到最好,尽最大可能提升自己。

因为选择的不同,最后结果也必然不近相同,我面试过的人中就有一些就是这样的,5年工作经验以上,但还是停留在业务的增删改查上面,对技术没有深入的掌握,技术的广度也没有得到提升,然后又想拿高工资。人家企业也不是冤大头,结果肯定是被pass掉的。

1.2 方法

工作态度转变之后,我们还需要讲究工作的方法,我见过很多人,工作做事都非常认真,天天加班,也非常负责,但是做事的结果却不尽人意。你说他也不是,不说他也不是,人家确实很努力的工作了,但是结果总是不尽人意。

这类人我认为一定要深度的剖析自己内部原因,追寻最本质的原因。是因为自己能力不够胜任这个岗位,还是做事的方法上面欠缺思考呢?千万不要抱着自己都这么努力的工作了,大家为啥还这么苛责我的想法。公司作为一个盈利机构,都是以目标为导向的,虽然你加班到深夜,但是你的结果是不好的。那公司宁愿要不加班,可以按时处理好事情的人。所以一定要摆正好心态,积极的去寻找原因。

1.3 细则

做事要讲究有始有终,每一件任务都会有周期,做事的原则其实就是在规定的周期内把事情做好就可以了。当然这里面的水很深,我这边就总结几点:

  • 一件任务安排下来,你一定要清楚自己做什么,不清楚就找能问清楚的人确定清楚。

  • 任务确定好之后,要分解任务,作为开发人员,我认为任务可以被分解为接口级别,如果能分解到这一级别,我相信你对需求已经理解的差不多了,最后还需要将流程和上级捋清楚,千万不要什么都没确定就开始写代码,到时候发现自己写的代码都是错的,那就凉凉了。

  • 任务开发过程如果有问题,也不要啥问题都问别人,这样会让人觉得你很弱智,问问题都没经过大脑。最好的问问题的过程是带着自己的看法问问题的,而且至少要自己尝试过解决问题才可以,这样人家才愿意跟你深入的沟通。

  • 任务开发完成要发布上线之前,一定要进行反馈,特别是新员工,不了解当前公司的运作模式,就沿用之前公司的习惯,脑子一热就上线了,那后果有时候可能跟核弹一样。

  • 任务全部完成之后,一定要记得复盘,复盘自己整个过程中遇到的问题和当前模式可能存在的隐患,后面要如何进行优化,这些都要文档化。相信我,几个月过去之后,你可能自己也看不懂自己的代码。

1.4 责任

作为开发,不可避免会遇到线上紧急情况,最难受的是,这个紧急情况出现在凌晨,也就是你在呼呼大睡的时候,这个时候如果你收到报警,一定要起床修复。千万不要睡时一时爽,上班被开除。这个其实是责任心问题,任何一家公司都不会要没有责任心的人,越是身居高位,越是会看重这个,这也是别人通常说的这人靠谱不靠谱。

1.5 小结

做事就分享到这边,这边就不展开了,每个人都有自己的做事的风格,但优秀的人一般都具备上面几点,毕竟如果连事情都做不好,再优秀也没人敢用你。还有最重要的一点,做事情一定要给自己留一条后路,每次上线之前一定要想一下最严重的后果是啥,是否可以快速回滚之前的版本,这样才能稳如泰山。

二、学习

关于学习部分,作为程序猿,大家都会收到来自各大公众号传播的焦虑,例如人到中年被离职、Java未来还有前景嘛,我是如何做年入30+之类的软文,点进去一看发现都是培训广告。

其实每一行都会有这样的压力的,因为随着年龄的增大,身上的责任也会越来越重,对收入要求也会有更高的追求,但是高薪岗位就那么多,老板们也不是傻子,他们只能把钱给具有对应价值的人。所以唯有时刻学习,让自己持续成成长,未来才不会被淘汰。

2.1 提升认知:

这就涉及到如何学习的问题,刚工作的时候,可能是认知不够完善,一直都在学习各个框架技术如何使用,也就是所谓搭框架的级别,认为把springcloud所涉及到的启动起来就很牛逼了,后面才发现这只能浮于表面,简单的来说,这种大家看个视频边学边做,谁都可以弄出来,没啥竞争优势。

后面意识到自身的不足的时候,就渐渐的开始学习spring、mybatis、jdk等这些优秀框架的源码,当然说是学习,其实就是简单了解一下他们的实现原理,还远远没有到掌握的地步。通过学习这些源码之后,程序在运行过程中,如果出现bug,可以有效的提高查找bug的效率。毕竟你连框架的根都知道了,剩下的就是业务性问题了。

2.2 持续学习

关于如何学习这些框架,我建议大家可以先看书,第一遍可以不求甚解,先知道这个框架模块分为哪些,然后再深入研究自己感兴趣的部分,不然很快可能就散失继续学习的兴趣了。

随着项目不断升级迭代,我愈发觉得java生态圈本身的技术已经不足以支持处理问题的能力,首先项目是运行在linux程序上面的,你要了解linux操作系统相关原理,其次服务肯定要进行网络交互,这就会涉及到计算机网络的内容,甚至还需要知道编译原理的内容。

软件说白了就是一堆程序+数据运行起来的结果,所以都绕不开数据库这个层面,数据库的优化那又是一门大学问了。所以如果说程序猿是吃年轻饭的,那肯定最简单的应用发开,如果一个人想精通Java、操作系统、计算机网络、编译原理、算法、数据库、框架等相关内容,没有个十来年基本不可能。

2.3 小结

大家要牢记一点,经验并不是凭空产生的,一定要找一份可以给你不断成长的工作,虽然你可以自学技术,但是如果这些技术没有落地实施,过几天就忘记了,我的建议是:可以和工作相结合那是最好的,跟着项目一起成长,不断迭代,这样的技术才是最踏实的。

三、架构师

如果大家想往架构师层面发展的话,那就不能仅仅只知道java层面的内容,而且还不能仅仅只知道后端,我认为一个优秀的架构师应该懂得后端、前端、运维、产品等相关知识。这边为什么要加上产品呢,因为产品的功能直接影响底层设计,就比如秒杀系统,对一名架构师的挑战那可是相当大。但是这边不对产品进行扩展,毕竟博主本人对这方面也不是很精通,就不班门弄斧了。

3.1 所需技能

如果想成为架构师,对后端的技术就不能仅限于了解,至少要熟悉掌握相关技能。这边说的后端不仅仅是java本身,包含编程语言、框架、大数据技术、数据库、分布式、微服务等、操作系统、计算机网络、jvm虚拟机、算法、数学、计算机组成原理、软件工程、设计模式等。

3.2 能力要求

各个公司对架构师的要求也不近相同,但是有几点是共通的,架构师一定是解决问题能力最强的那个人,可以根据当前用户和未来用户对系统的负载进行估算,进而对系统进行调整,保证系统持续性稳定和高可用。

简单的来说,比如线上的服务需要部署多少的实例、每台服务器的带宽要设置多少、要设置哪些维度的报警、系统出现问题的时候如何第一时间发现、系统出现严重问题如何快速恢复,这些都需要关注。所以架构师对技术的要求会相对更高,而且是站在整个系统的角度来要求的。

3.3 沟通

很多时候架构师面对的都是方方面面的问题和人,沟通也是一项重要的技能,如果只会闷头研究技术不懂得产品或者需求中隐晦的技术要求,也做不好架构师。当然并不是说你要像销售一样,能吹牛逼,至少你要能理解对方的问题,懂得将问题归纳总结为你需求点,然后进行分析设计。

四、总结

通过从做事、学习、成为架构师三个方面,复盘了自己这几年来的工作,发现了很多问题,一路走了很多的坑。现在回想刚工作那一两年,感觉浪费了很多时间,自己的认知、技术、学习、做事都没能走上正轨。希望通过我复盘,能对大家有所启发。

当然每个人经历不一样,自身的认知也不一样,如果大家觉得有道理,能吸取一点经验就点个赞,如果觉得接受不了,也没事,毕竟我没有你的人生阅历,只希望大家以后可以越来优秀,加油!

-----------------------