很久没有按时更新博客了,近来确实忙出天际,最近两月也是工作这些年以来最为忙碌的日子。一个比较复杂的核心平台,由于第一次接触,又只是几瞥,只懂得大致流程,里面很多的业务包括细节都不太清楚(UI设计人员(呵呵,所谓的原型就是几张img图片)也不是很明白,时间太紧,整个开发组也是边开发边熟悉流程,加上公司部门之间的一些内部矛盾,算是白手起家),一起过需求的时候,独我还在帮忙着给其他部门做项目(demo改着改着就变成了客户端)以至于耽误了一个多星期,后来匆匆上手,要一边负责写整个与linux数据交互的kafka服务。就是把待处理的数据发送到linux上,然后将linux上程序处理的数据全部接收,解析冗长的json字符串,最后存入到windows数据库中来供web网站展示。大致有6个服务的样子。多线程的方式去交互这些数据。对于一些服务,本来一切顺利,默默熬了几个十一点把这些服务写完测完。毕竟前期耽误了很多时间,这下可以着手项目核心模块的开发。结果这个时候麻烦就来了,组长(呵呵)每每要数据的时候,都要让我去写测试数据,这些服务的测试数据关联两表,字段又多,测试数据中的某些栏位(文件路径)还要在Linux上真实有效(测试数据无效的话,服务会解析失败),这就不是一两分钟就能解决的事情了,毕竟是手动添加测试数据,而且每次都是急等着要数据,当时对kafka tool监听工具的使用也比较生疏,连续往盒子里面放数据,都是按照顺序在另外一盒子中取数据,只有等前面数据消费完才能去消费后来的测试数据,所以不管添加几遍新的数据,服务处理的始终是以前未处理的数据,当我强制清空盒子数据的时候,必须要在linux上重启kafka服务才可以,不然就会报错(第一次花了二十分钟才找到这个原因),打这开始就挨骂,之后每天挨着骂频繁给他们写测试数据就耽误了很久的时间了,按道理说当服务写完,当有需要解析后的数据时,应该是各自负责写自己模块的测试数据,我频繁帮别人加测试数据耽误自己进度不说反而被怼(只怪自己太好说话了,太唯唯诺诺),晚上只能独自加班到十一点搞自己核心模块的事情。
模块的业务也并不是想当然的简单,涉及到非常多的状态要判断,web前台状态要实时用setinterval去跑,一个状态完成之后要去调用一个c++封装的exe程序,然后去监听返回值(每个exe都会持续返回多笔数据,数据中包含进度值,正常情况进度值到100为完成),需要单写新的服务去解析并写入数据库,前台又不断的去数据库刷进度值。一个完整的单个流程就需要六个exe要去调,界面中有些是自动setinterval跑,有些状态是手动点击按钮去setinterval跑。当时自己的思路就是web负责写数据,读数据(进度),然后再单独写服务来负责调用exe,然后监听接收的数据,更新数据库。逻辑可以走通。对于web来说难点就是 实时setinterval-状态判断,要记住当前界面的动作,还要监听之前的动作,以及中途随时出现的新动作,当前动作完成之后的下一个动作,会有很多的控制。对于服务来说要根据不同的状态调用不同的exe,然后监听对应的数据,有些exe可以同是执行一定的个数,有些exe必须单独执行,而且exe的顺序不能乱,一个人根本忙不过来,一边画界面,写模块代码,一边写服务,还要一边帮他们写测试数据,有时候表结构说变就变,还要去改kafka对应的服务代码。真是顾此失彼,捉襟见肘。即使天天搞到十一点,十二点,周末也用上,进度仍然跟不上,web前端,web后台,windows服务 必须同时都通才能保证某一步骤的完成。而且调用完一个exe的过程又相当长,有时候十分钟,有时候半个小时,有时候一个小时,中间又涉及到(原图与画布图)坐标的换算,exp特征文件的写入,提取,再换算,解析。。。等等,简直是海量工程啊,一个人兼顾这么多实在忙不过来,期间对于界面中的一个公用小功能,仅显示下视频文件状态(上传成功、失败),就是查下数据库,挺简单的,就直接把这个大约50行左右的js拷贝过来。却被怼成,全是抄袭别人的代码啊(我一个视图界面大概3000行的jq,公共功能直接粘贴的大概有50行吧),这么简单的一个模块怎么每天进度这么慢啊,被怼的身心俱疲,经常一个人晚上搞到十一点,周末加班搞,白天还时常被这样怼,A股又是如此的跌跌不休,感觉真的要猝死,中途进来一个前端大概是偷懒把我某个界面中的js 替换了模板,是真模板因为DOM元素的id啥的一点没变和别的界面一样,这样肯定会导致我界面本来写好的功能就没有了,这也要算在我头上,说过去这么多天这么简单的查询和删除怎么还没写完,解释也没用,总之就是你的错,你的锅,有一次白天被怼的准备反驳的时候,发现自己完全说不出来话,失声了,胸中一直一团气压着喘不过来,整整好几天吃什么吐什么,何必如此作践自己!之前本打算把这个项目搞完再走(差不多就月底),自己晚上独自熬夜到十二点加班到没啥,但是白天天天被怼,实在是坚持不了,直接提了离职,自认能力不足,无法胜任。组长各种劝之后,提出了一些方案,把当前模块中可以细化的功能都分出去(新增的一个服务功能),这里也着重感谢一下新来的同事,帮了很多的忙,让我可以把重心放在web主流程上,最后加班加点好歹赶上了最后约定的期限。
项目是其他部门两年做完的,我们被要求两个月完成,而我负责的核心模块之前就被单独拿出来作为一个系统开发过。又在没有原型只有冷冰冰的img设计下,搞清楚业务细节着实不容易(设计、测试都不懂业务,经理只知道最后效果,之前做过的Java拒绝提供任何帮助)。 经过这次事情以后,发现自身确实存在很多问题需要反省,不能太老实,不要埋头一个人搞,不管时间再急,一定要搞清楚业务后再写代码。自己的工作量一定要有评估,包括难度,业务量等一定要让项目组长知道,不然你这边累死累活搞事,别人反而认为你做事拖沓,水平差。简单的东西迟迟做不出来。
作为本身就是高危行业的程序员,虽然奔三还有好几年,我却发现自己真的是老了,免疫力直线下降,再也不复当年壮小伙的巅峰状态,大家都是面向工资编程,虽然钱很重要,但我向来认为如果做的开心,薪资相对少一点也没关系,毕竟在俗人的世界里也需要一点点卑微的尊严吧!相反,工资再高,却天天被骂,这样的工作也没什么搞头,并且这是薪资腰斩的武汉。还好日常学习没有落下,熬过这个坎必须要另谋他处,经历过后,真的发现猝死不是传说,其实离我们很近,近在咫尺。
后记:
咬咬牙坚持到了第一阶段的交付(网站功能堆积,完成主流程)。年后就是各种测试,将系统做的稳定(肯定不稳定,当时时间仓促,很多情况都没考虑到位),修补各种异常情况,又是铺天盖地的任务量,web核心模块、底层交互服务、数据库表结构、Linux服务是否稳定等等都是又多又急,全部压在我一个人身上,其实整个网站就是这点东西,只是恰巧被组长安排到我负责(刚开始分工时说只让我负责与底层交互的服务,后来又让帮忙看下核心模块,然后莫名其妙的就变成了由我负责)。于是又到了年前的那种状态,一边忙死,一边被怼。
现在终于告一段落,第一批已上线并做完汇报,整个核心线上的复杂业务,包括底层与C++每一阶段的繁复交互 ,也都理清楚了,果断提出离职。其实这个项目一开始就是无数无数的坑,在不计其数的跌倒之后,一个一个的把坑填平,供后人通畅前行,带走所有的批评与指责。当然经历过这些,自己的业务能力增强了不少,自身技术也着实提高了很多,自学能力还行,新知识点都能啃下来,关键也增长了不少自信心。