前言:

如今的职场,怨天尤人、不肯正视现实的职场人也是越来越多,而且这是个职场通病,也是一种可怕的传染病。工作中出现问题,抱怨是没有用的,向毫无裁定权的人抱怨,只有一个理由,就是为了发泄情绪。

当然,无良企业也是越来越多,逼着我们职场人不得不去吐槽。在职期间,我不敢大肆吐槽,我马上要走了,还不抓紧时间来吐槽吗?来,一起听听这位员工的离职吐槽。


来公司三个多月吧,年后就要背C离职了,自认为算是比较能抗的了,还是受不住pua的过程,后两个月在公司战战兢兢,恨不得卑微的整个人缩在角落里,没人能注意到自己,年后就离职了,这口气在肚子里憋了好多天了,憋在肚子里难受,一吐为快出出晦气吧,理工男,不太会写,就摘出印象深该的部分吧。


11月入职第一周:熟悉环境,领导挺好的,很感激领导,很和蔼。

第二周:分到QF手下,用蓝信发份任务小工具,三个接口(没有接口说明)加参数

我:第一天看grpc接口,猜测接口用法,写代码,第二天自测有问题,找QF

我:调这个接口服端好像有问题,看了下服务端日志服务好像崩了(没找到问题,找其他同事要的服务端日志位置,申请权限等好不容易找到的)

QF:谁让你这么用的,参数填得不对,少东西(带火气,不耐烦)

我:参数不是你告诉我这几个吗?

QF:我故意不告诉全你的,等你一晚上,你为什么不过来问?

(吐血)

我:还是有问题,服务端还是崩

QF:(排查日志后)我没告诉你的参数你也要填,不能为null知道不,填空字符串(吼)

第四天:写完蓝信(类似企业微信)找QF看输出结果

QF:对,大概就是这样,把结果中root按照顺序放前面我:这是返回来的切片 数据,按顺序取的话我放不到前面啊

QF:你会写for循环吗(跑过来吼)

我:我再差也不会写for循环吧(带火气,感觉受到了侮辱)被骂中沟通需求 ...

完活,私下找领导申请换组,一堆没营养话略过,最后结果是不同意,承诺有不懂的可以问领导,有问题可以及时联系他。

日子还得继续过不是,虽然知道是面上的说法,不到万不得已也不会找领导,就是还是有点太天真。

任务压测小工具,同上,一堆压测接口(不带文档说明),几个参数。同上,一顿艰难的揣摩,加自测时服务端崩溃后被骂着告诉一堆默认值,服务端输出打印错误结果无辜被骂略过不表,(一周左右)做完扔过来一套服务端模块代码,让总结接口流程图,看了三天左右,用markdown花了两天时间画流程图(流程图你们可以看做一个梗吧, 从这个公司开始一直 有深深的怨念),以为会让做这块,结果没信了,转眼日子来到11月18号。

QF:(蓝信)扔过来一套代码,把这个看完,单机版的重构为无状态的,用redis评估下时间

我:无状态是什么意思,不太明白需要做什么(过去找)

QF:劈里啪啦一顿说一.. (不耐烦)

我:你说的是重构成集群吧,我看完代码给您评估吧

QF:画流程图给我

一周后, 看完设计重构思路,Markdown 画完流程图过去找我,我过来按流程图说下大概的思路

QF:你这是流程图 (不耐烦)

QF:你了解业务吗,你没接触过吗,你知道怎么做吗,你画个大概流程图我怎么知道你能不能做出来。

第二天拿着新的流程图,过去找。

QF:听了一半一脸不耐烦地说,你这是说的什么呀,你这是说的什么?

QF:让你画流程图你就画这个,我怎么知道你的数据结构是什么,在哪里释放内存的。

我:这不是主要说大概过程吗?

QF:让你说过程,你就给我画这么简单,我没法给你评估你能不能做。

QF:你懂我意思吧,让你画流程图是让你把整个过程画下来,每个函数怎么样么调用的,都完完整整画下来,一个函数都不要落。

我:那还是流程图吗, 流程图不是说思路吗,那我用markdown得画到什么时候?

QF:谁让你用电脑画的,你可以用手画,给我一行一行代码的画下来,怎么走得全写下来。

QF:不然我没法评估你能不能正确做出来,百分之七十时间是画流程图,百分之三十是写代码,把流程无脑用代码写出来(这是我印象最深的一句话,恨不得一巴掌拍死他,流程图空想出来代替实际敲代码,至少我做不到)

问之前的做的人也画流程图吗,QF 回答,人不需要, 人是跟着这个功能一步步做起来的,你不熟悉。


三天后,入职发的一整个笔记本全画满了(空想的方案), 拿着流程图过去。开始对设计的redis数据结构,中间太多记不清了,只拿出零碎的话写下来吧,这里需要交待下是让做什么,不然没法继续了。

任务背景:是做一个导入员工信息以及部门信息的服务模块,员工信息里面有部分信息若不存在部门信息的话,导入员工信息的时候,将部门同时进行创建,防止无效调用创建部门接口,需要用map树形图进行存储,并获取部门的id信息,最后进行统一调用,完成创建不存在部门和导入员工信息。原先的服务是用一个对象, 包含一个切片存储了所有的导入信息,以及中间处理过程的树形结构来完成。全部放在内存中,经常会出现服务崩溃,所以需要设计为集群化,同时能够崩溃后在一定时间内由其他节点拉取下来继续运行,重点就是数据恢复运行。以及在不同节点都能够获取运行状态,本身业务不是很复杂,但是原有代码写的很复杂。

QF:为什么要存这个结构,一个树形结构(可以认为是存储-个公司所有部门信息的树形图)我:崩溃后恢复用, 不然需要重新拉取所有导入数据重新处理,所以在完成这个树形结构后进行序列化存储,优化时间。

QF:我问你假如我这个部门下有一万个子部门,你存得下来吗?

我:直属子部门怎么会有这么多, 这不符合现实场景吧,存的话用一个大key也是可以的。

(中间又怼了半天,还算了这个key大小,一万个部门id的大Key估计10M到20M左右,导入员工信息并不是一个频繁使用场景,所以同时使用的并发量很小,不会影响redis)

QF:那我传这个大 key再获取要多少时间,噼里啪啦一顿怼。

我:那我就不知道崩溃恢复后怎么优化了,

QF:你问我呢,是你做还是我做,

QF:这需要我告诉你怎么做吗?

僵持一会

QF:你既然做不出来,我给你一个,这个分支提交是别人写的,那个人写的是完全按照我的方法写的,那个人走了,我没有验证他的功能,所以没有合到主分支,你按他那个弄。

我:好的

半天后,找过去,不对呀,他的思路和我的差不多,你不让我用大key,之前写的可是把整个导入对象(员工信息加树形结构以及其他状态一大堆信息)都存redis了,每处理一条员工数据就更新这个更大的key呀。

QF:那就是他没按我说的做,我没看他代码,噼里啪啦一顿喷,结果就是自己重新设计方案。

被领导怼了半个月离职(背C离职别说吐槽领导)(1)

僵持一天,最后QF定的方案是不存储,每条员工信息发输入,中间状态,状态值部分(其实优化效果并不大,崩溃后避免不了的重新需要去处理获取部门树形结构信息,是真没力气陪他折腾了,只想赶快写代码,其他喷的还有为什么要设计redis做心跳,我说没有心跳超时,这个实例化导入对象不知道是否崩溃了,是否需要重新拉取等,不让用,问怎么实现,被怼你自己想。

中间折腾无数次,最搞笑的是问“为什么要用redis分布式锁,你不会写redis lua 吗,不会吧,我会,为什么不用lua做更新操作“,大哥我是要分布式锁啊,不是要原子操作,重构只让我用redis,又没其他可借助,难道我要在lua中写个sleep,把整个redis搞阻塞吗,一直到最后都不满意我画的流程图,我真不会画这种细致到代码行级的流程图,以前也从没经历过。


最后僵持到实在拖不下去才允许写代码,当然还是采用的心跳模式,整整画了一个笔记本的流程图,用新的笔记本还画了一小半,浪费了10个工作日时间,期间不只一次听到吵的过程中,嘴里若有若无小声嘟囔着sb,当时就想你只要敢骂出来,今天老子非打你,砸你脑袋见血不行,他幸运,我也珍惜这份工作,对我来说大快人心的事始终没发生。听隔壁同事都说经常听你俩吵,声挺大的,最后同意写代码我记得是12月初7,8号吧,QF让评估完成时间,看了下离职那哥们写了一半的代码,提交时间差不多有一个月,自己评估了下,说也一个月左右吧,然后开始敲代码重构疯狂加班)

期间还发生了两次非常不痛快的事,有两次让排查以前的单机版模块线上服务问题,第一次运维发了日志过来,排查结果告诉QF原因,告诉他调用某个服务模块接口超时了,并给了具体接口,上来就一顿怼, 说就是让你查为什么会超时,无语地吐血(我特么那个服务模块代码都没有)怎么去查,后来还多次拿这个说事,“下次别像上次那样,让你查个原因都查不出来"。最后才知道超时的是他负责的那个模块,他调用别人的模块时出问题,好像是数据库表没加索引。


第二次同样的问题,让排查这个单机版线上问题,“xx 环境",问怎么登录服务器查看日志,又非常不耐烦的吼,“你不看群消息吗,用vpn,vpn,'我心想没印象啊,QF不耐烦的当面找出来给我看,一看是别人在十天前在蓝信上转发的聊天记录,不点击根本看不到,而且那个偏偏是看过的,没印象是因为那个环境,是政府用的单独服务器,只给一部分人开设了VPN帐号,像我们新来的都没有给开通权限,所以自动忽略了没想起来,最后也不是我来查,只是被批得很郁闷。

集群版终于重构完成了,问怎么自测,QF告知开发环境没有界面,只能自己写工具,一直到这时候我都没见过前端长什么样子,说起来真是讽刺。12月24号终于用grpc工具自测完成了,找QF review 代码,直接过来吼让重构代码,要非浸入式的,理由是新版本有问题的话通过配置不通过回滚方式,方便他切回到单机版,不允许动他代码,QF抽像出来三个interface接口,只允许用这三个根本不可能用的接口来抽离代码(说不能用,是因为缺少参数,根本不知道具体哪个导入类进行更新),为了接口多加两个id参数,争论了一下午,最终QF只同意改两个接口,定完流程真的累的像是一场战争, 至于另一个不能用的接口只通过忽略更新-部分状态用其他方式更新(自测没发现问题)。QF还顺手把崩溃后恢复分阶段所有优化逻辑全删掉了,只能重新开始跑数据,理由是别进入他代码,怼了我两周左右的流程图啊,这一顺手删的优化功能只剩下一半了。

花了两天重新改代码,两天把代码测试完加上周未差不多1月份了,元旦休完3天小长差,1月4号QF给了新的任务需求,在现在这个版本上完成新功能(通过蓝信发过来的,基本上所有的任务都是这样,需要自己去理解), 估算了下时间差不多一周左右能做完,5号刚到公司通知需要回家隔离远程办公(这也是我很感激我们领导,不是QF,没有让我经济受什么损失的原因),10号左右把任务做完, 11号开始联调,远程在家联调任务量不大,所以问QF还有什么新任务吗,回复现在没有,之前有,但你一直拖现在做的这个时间太长了,交出去了”被气的差点吐血,画了两周的流程图有用吗?

后来QF发了份设计文档过来,让写完再说说联调吧,“联调了差不多两周吧,主要原因就是因为从来没用过界面调试,也没见过真正逻辑,出现了好多小问题,发现前端还是需要好多中间状态的,偏偏是QF给的不能用的接口偷偷加了两个参数,真的我是偷偷的,连改代码权限都没有,最主要的问题就是QF给的需求跟产品的不一致,导致产品需要的需求没有做完,在群里@QF,确认需不需要做,让QF在群里吼,让你问产品,为什么不问,气的一肚子火。在家里正生气,不想回了,这时产品打来了电话,说当时咱俩沟通没说那个需求,是以为你知道了,你没入职的时候就定下的,这个不怪你,不是你的责任,关键是QF给的需求上都没写啊,还有一次是联调过程发现和前端理解一个参数有问题,联调的前端也是刚做这块,之前做的离职了,导致有问题,只能找QF确认参数具体用途,不问清红皂白上来就被质问,让你自测全点为什么还有问题",还是前端帮解了围,说发现之前的版本也有该问题。


1月15号吧,隔离结束,回公司写这个东西的设计文档,类图接,流程图复用了之前的流程图,稍微改了下,加上其他别的,3天写完了,这时候联调基本也结束了,提测1月18号,实在无事可做,问了下我们领导,没回复,闲了几天看了看代码,顺便帮测试排查脚本问题(两个测试,一个是对应前端的测试,一个是后端的测试,后端的只测接口。

2月1号,QF用蓝信发了新任务,a服务模块代码,让查找问题发过去的数据为何没有在b模块脱敏用MD5进行打印日志,让先看a模块代码,看了两天代码,花两天打日志找切入点(日志模块有问题,一直没打印出来)花了一天改完代码后发现客服端不能登录了,找QF才搞明白需求,原来是要我这边传原文,B模块接收到的还是原文,底层过程打印日志用md5,这我就懵逼了,问QF,一脸不耐烦, “看代码看代码,我告诉你,是我做呢还是你做呢",a服务没找到任何线索,找B模块负责人问也不太清楚,所有的线索就是proto协议和脱敏模块中间件,说这块只有我们领导和QF做过,感觉已经被坑歪了,意识到应该不是改动a模块代码,带着告状的意思,找领导寻求帮助,被领导拉到小黑屋,讲了下流程,原来是需要改b模块的中grpc拦截器,以及脱敏模块,果然跟我预料的一样,和a模块一点关系都没有。说完这个,领导说其实正想要找你,聊一下,一堆没营养话略过不表,核心就是我输出不够,我和QF合作,没达到预期效果,不可能因这些事换QF的,所以这次绩效不会太好,要跟QF搞好关系,表示上次越过QF找领导要任务就是不对的,也不该过来问这些问题,而是应该问QF。所以我说我太天真了,相信了之前的承诺。


我说那我提离职吧,在这里工作也不开心,对QF已经尽最大力度克制了。不可能天天被责难,我还是一脸开心跟他搞好关系吧。

领导也没多说立刻同意离职,说最近收敛点,别把队伍带歪了,背调可以填他,怎么说看他心情,关键是我敢填您吗,我能理解领导,小卒子嘛,弃就弃了,QF的竞争和整个研发老大都称兄道弟的,领导怎么说呢,人挺好的,关键是您稍微给QF点压力,也不至于天天被pua,就像QF哪天不来,您都不知道,说可能请假了,是真的一腕水都端不平,没有领导的魄力。

至于那个任务,现在我就只有A模块代码,我是改不动了,已经都背C了,就让C实至名归点吧。

至于为什么一直坚持,主要是因为离家太近了,离家又太近了,媳妇公司就在隔壁不到500米,可以一起吃饭,18年以前还好,18年流年不利一下子换了两份工作,19 年初才稳定下来,导致简历花了,再跳的话就等于这几年三年四跳了,没想到最终还是没有坚持下去,11月入职,2月份过完年就背C滚蛋了,趁年底写完让自己舒服点,不要在明年继续恶心。

,