为什么写这篇文章
我是一名毕业四年的后端开发(可能会很多人来说,工作时间也没多长嘛),但是在这四年里,我写过PHP、Go、vue、做了两年多的敏捷团队管理,也设计过一些系统的架构。也算是有着相对较丰富的项目经验。在这几年,我的成长一直十分的明显,比如在当前的公司,我从转正的评级 6级(应届生级别),经过两年多的努力,升到了9级(相当于公司的中高级开发,10级是高级开发,也是组长的基础职级),因此我也想对过去的自己,简单总结一下,同时提供一些建议给新手程序员,希望可以帮助到大家。
一些建议
1、多写代码(重要程度:四颗星)
不要听公司老人抱怨工作枯燥,没有挑战性,新手一定要多写代码,工作初期,新手和老手最大的区别就是经验的差距,有些东西新手可能要搞好几个小时才能解决,老手可能只需要花个几十分钟,你不需要崇拜他们,其实他们也只是做了太多这种东西了,只是十分熟练而已,就好比你考试一样。人家刷了几年的题,你才刚做题,肯定是做的又慢错的又多,这是十分正常的,因此,如果你不是天才,只是一个普通人,一定要多写代码积累经验,很多东西你不实践是很难去积累真实的经验的,只有你做了很多很多的业务,写了很多很多的代码,才能慢慢成熟起来,熟练起来,当然写的多,也要不定时的做下总结和笔记。
2、基础很重要(重要程度:五颗星)
你可能在很多文章都看过很多人都在强调基础了,这点我也想强调,基础是决定你未来高度的重要因素(可能你现在还无法感知到),当你到了一定的层次,需要从网络、操作系统的层次来分析问题时,你此时就可以明白基础好和基础差的同学的差距了,我举个例子,有个组说我们的接口在某个时间响应较慢,我的思考过程是这样的。
他的机器到我的机器经过了哪些链路,链路的每个节点之间是不是有问题。(网络延迟?抖动?)
请求到了我的机器,我的机器资源的情况是否有问题。(CPU、磁盘IO、内存等情况)
接口的代码是否编写存在缺陷。
sql 或者命令语句是否存在问题。(慢SQL?)
依赖的第三方系统是否正常。(比如数据库是不是炸了?)。
如果是基础较差的同学,他可能直接先从代码开始分析。跳过了网络层和操作系统的问题。先看代码是否存在缺陷,再看sql 是不是慢查询,再分析数据库的负载情况。
最后我通过对日志的分析和各类资源的监控面板的分析,确定了是网关的问题,并且报告给了运维,将分析的数据和证据给到了他们(一开始他们还不肯承认是网关问题,最后看我的分析报告没有逻辑破绽,才承认了),再简单举个例子,我们有个服务一直报协程泄漏,组员查了很久都没查到是哪里的代码出现了协程泄漏,然后我通过pprof 结合 POD的TCP连接情况,以及服务发现的iP和服务的映射关系,发现是我们公司的一个文档服务一直在和我们的服务进行长连接的通讯,一直不释放, 导致协程数一直线性增长。类似的例子还有很多很多,大多都是非业务代码的问题导致的。如果你不懂网络,是很难发现原因的。所以当你掌握了基础,你是可以解决稍微更深的问题的。这也是你和别人不一样的地方。
3、学会向上管理(重要程度:三颗星)
这对新手来说可能会比较难,但是当你学会了向上管理,你就更容易得到更多机会晋升,算上实习的话,我呆过了好几家公司,我发现那些有机会晋升的人,往往都是存在感很高的人,我们常说会哭的孩子有奶吃,这句话我在职场中验证过,在某些公司确实是这样的,身边大多数没有机会上去的人,基本都是没有学会向上管理,对管理层来说,他们也都是容易替换的一群人,也是适合干活的人,一个团队中,必然有着这几类人,先驱者,创新者,劳苦者。所谓的先驱者,就是有一定的领导天赋,大家愿意听他的话,可以带领大家实现更高的价值,属于领导者(要做到这个真的很难,它和老板不同,老板只能靠职级压迫员工干活,而领导者可以让员工心甘情愿、高高兴兴帮他卖命),创新者则是团队中比较有想法的一群人,他们经常勇于尝试,热衷技术,有专研精神,可以帮团队输出高价值、有亮点的东西,而劳苦者则是默默不闻干活的人,其实他们做的大多数都是苦劳,对于有些只看重功劳不看重苦劳的公司来说,这些人是最好替换的劳动力(其实大多数公司都不看苦劳,你加班干活,别人不加班,这对资产阶级来说就是你工作能力不行,虽然态度可以,愿意加班,但是下次有裁员会优先考虑你,因为这类人最难给管理层输出可以向上报告的成果)。
那么怎么学会向上管理呢,我举个例子。
比如说,有个专项交给了你。我们如何让领导放心呢。
1、输出可行的技术方案并主动与其讨论
2、明确工作量和人员分工,列出开发计划
3、定时汇报工作进度和相关的问题,记录解决方案,如果有风险及时汇报会给出解决方案
4、项目完成后,复盘分析过程中遇到的问题,沉淀经验
5、让领导给你反馈意见,哪些地方可以改进
如果你这么做,我相信,慢慢的,你的领导会对你越来越看重,越来越放心,有重要的事情才敢交给你,但是你还是需要及时的汇报进度和风险。让整件事情可以闭环。
再举个例子,当团队遇到了一个问题的时候,你要及时的反馈这个问题的解决进度,不要等着领导问你才回答,而是积极的去汇报,在你认为他要做某件事的时候,你提前做了,在他动口之前,就先把答案告诉他,换位思考。所以我才说你需要了解你的领导,明确他的做事风格,管理层平时是比较忙的(虽然管理层大都不写代码不开发,但是有很多的会要开,很多的事情要跟进,很多的文档、表格、PPT要填写,很多的人要沟通,这也是我这几年的感受),当然,向上管理其实更需要你根据实际的工作场景做出合适的动作,我这里只是抛砖引玉,你可以在网上找几本看看,这个真的很重要,决定你的前途发展。
4、职场沟通(重要程度:三颗星)
大多数程序员都是不喜欢沟通的,可能都比较的“内向”,有人说,我写代码做IT就是不想和人打交道呀。其实你写代码也是跟机器在直接沟通,别人读你的代码也是在间接和你沟通,所以这也是属于沟通的一部分,也有很多人在网络上十分的活跃,到了现实一句话都不敢讲,其实这都是沟通能力差的表现之一。
在工作中,沟通也有很多的技巧,如果沟通能力差,很容易会导致协作效率低下。比如说经典的 X/Y 问题,举个例子,有个开发问你怎么获取字符串的最后三位字符,有的人可能直接就给他写了,有的人则会问他要这么干嘛,他说他想要获取文件的后缀。文件后缀可不一定是最后三位字符,而且基本上大多数语言都有现成的函数可以使用,明明问题是 X,但是他却问了 Y,所以在日常沟通中,和别人协作,多问一下背景是什么,这样才可以尽量避免发生 X/Y 问题,而且知道问题的本质,你也可以给出更好的方案或者建议。
我在日常和产品沟通需求的时候,经常会问他这个需求的背景是什么,是为了解决什么问题,对用户来说有没有价值。一般相对专业的产品,都会提前思考这几个问题,并给出回答,此时我会站在技术的角度上分析产品给的方案是否合理,从各个角度去分析方案的优劣势,尽量保证不要给未来的人留坑。
沟通过程中,我们也尽量保持中立的态度,不要情绪化,工作中确实会遇到一些很奇葩的人,但是大家应该都是奔着解决问题的方向去前进的,如果那个人确实很过分,就及时上报,但是你不要被他抓到把柄,做好自己,做好本职的工作就可以了。我就遇到过奇葩同事,整个部门的人都认为这个人性格有问题,甚至部门负责人和HR和他的直接上级都找他聊过,让他平时好好沟通,不要动不动发脾气,影响同事和谐关系,遇到这种人,尽量少接触就好了,这也是考验你的忍耐力的时候。
5、和同事搞好人际关系(重要程度:2颗星)
为啥要提这个话题呢。有些文章会说,在职时不要把同事当朋友,免得被坑。其实这句话我想反驳。作为公司的内推王(一年内推进来了8个人),我有挺多的朋友,也有很多关系比较好的同事,有些同事虽然没在一起工作好几年了,但是我们还是会经常的交流。在这里做中台的这几年,我和公司形形色色的人打过交道,普通研发,基层管理,部门负责人,产品总监、架构师,财务,产品运营,销售,他们都咨询过我问题,或者我找过他们开过会啥的,甚至每个部门我都基本有一两个有私下联系过的同事。因为找我的人太多了,因此我写了个自查文档。
我才发现公司很多人认识我,写完不到半年就有200+人读过这篇我放在签名的文档。这个数字确实也让我惊奇(因为我只是个后端开发兼管理而已)
那么如何和同事搞好关系呢。
第一点是你要学会真诚待人,在同事面前,不要表现的太高冷了,放开心胸,该严肃时严肃,该搞笑时搞笑,尽量做个好相处的人。
然后平时表现大方一些,比如说买点小零食放座位上,偶尔给大家分一些吃的,必要时候可以请大家喝奶茶吃饭。(比如说拿奖了)。有空的时候可以了解一下大家的兴趣,看看能不能玩到一块去,比如说一起打羽毛球,一起爬山,一起吃饭,一起唱K,当然交际是很消耗时间的,所以你也可以不需要投入太多的精力,有些人是不值得交往的,你需要注意甄别。
和同事搞好关系的好处是什么呢,一个是如果你需要他们帮助的时候,他们会更加愿意帮助你,另一个则是培养人脉,说不定哪天你就需要他们的内推机会。
6、坚持读书学习(重要程度:五颗星)
我承认我是一个三分钟热度的人,所以我经常需要用各种方式来激励我去读书学习,我很羡慕那种喜欢看书,喜欢学习的人,学习其实是很反人类的,我估计只有极少人会喜欢学习,但是我们如果要上进,就不得不学习,我经常对自己说,对自己的投资才是最值得的投资,所以我从大学开始,就经常性的“逼”自己学习,在大学的时候,我主要是看慕课网的视频,那个时候我用一年多总共看了慕课网三百多个小时的视频。因此我刚毕业的时候,去面试,面试官都以为我已经有一两年经验至少了,后面毕业后,我开始迷恋于极客时间,也投入了一些时间去看各种专栏,同时也买了很多很多的技术书籍(毕业到现在,买了应该有几十本了),当然我没有全部看完,大概就看了一半左右,如果你是刚入门的,我建议你可以多看看视频课,然后对着视频敲代码,视频是比较好入门的,当你入门后,就需要多读书看报了,极客时间是一个很好的学习平台,也是目前我看过质量最高的课程平台。总共买了49门专栏,拿到了12门结业证书(有很多专栏我是挑着看的,所以没有拿到证书),其中有技术相关的,也有和技术无关的。有些专栏我还重复看了两三遍。做了很多很多的笔记。
对于技术来说,刚毕业的1-3年是成长最快的时候,这个时候的你积极性高,脑子转的快,学东西特别的快。到了3-5年的时候,基本上学习效率就会开始慢慢下降,因此你需要付出更多时间。超过5年后,你的学习能力基本上已经赶不上年轻人了。
因此,如果你还是处于1-3年的时候,一定要花足够多的时间去学习,否则你到后面会慢慢的落后于其他人,我想我也是因为懂得了这个道理,所以才能达到今天的目标。(其实我们公司的9级,基本上平均工作年龄在7年以上,有的甚至述职了两三次才过,当然这也是我运气好,抓住了机会)
不学习就要落后,落后就要挨打,我看过好多吃老本的人,工作了八九年,甚至十几年,写出的代码和毕业一两年的没有差别,解决问题能力也差,靠着所谓对业务熟悉吃老本,这些人迟早要被淘汰掉。互联网35岁就没人要的前提是这个人没有坚持学习。否则你要是坚持学习到35岁,技术能力肯定十分的牛逼,怎么会没人要呢?
在职场和读书有一点很像,就是你不努力,就很难升职加薪,机会往往是给有准备的人的。
常常听到一些朋友抱怨他的公司不给他加钱,说他的领导让他先给出成果才能帮他提加钱。其实这是没有问题的。公司也是要赚钱的,并不是搞慈善的,当你认为你确实为公司贡献了很多能力,很多成果,这个时候我建议你主动的要求加薪,这是你的底气,别老想着公司会主动帮你,奶肯定是优先考虑有需要的人喝,你不提,我就是认为你对当前已经很满足了,有优秀的人提了,我为了留下他,我肯定是先把机会给他。
7、持续运动健身(重要程度:五颗星)
搞IT的人压力大,加班多,已经是互联网常态了,很多人不爱惜自己的身体,一天天的消耗自己的身体,最后身上一堆肥肉一堆病,我们工作是为了赚钱,赚钱是为了过自己想要的生活的,但是身体才是革命的本钱,拿命换钱,有钱赚没命花呀。尤其是当我听到耗子叔的消息,我更加确信,身体健康才是第一要考虑的,你会发现,爱运动的人,往往都是积极向上的,这些人很自律,因此在工作中也经常是出类拔萃,我们公司的老板就很喜欢跑步,他也经常鼓舞大家要多运动,做个健康的人。
因此,培养一个运动爱好,是很重要的,别老是想着打游戏打王者来放松心情了,偶尔多出去走走,徒步、爬山、骑车、打球、游泳都可以,我前阵子就开始接触了公路车运动,已经参加了两次百公里骑行活动了,现在又在健身房办了卡,早起的时候就会去撸撸铁,跑跑步,然后回来洗个澡再去上班。
我认为你至少需要一个健康的兴趣爱好,当然也不是说不让你打游戏,毕竟劳逸结合是对的,但是你只有打游戏一个爱好的话,这是很不健康的。
多投资一些钱在自己的身体健康上,也是很值得的。
8、暂时没有想到啥话题好说了
这是一个空白的地方,大家有想聊的话题可以评论一下,好的话题我会补上自己的见解(当然我会去看一些书再来回答你)