一个熟悉的工作场景
Table of Contents
老吴是产品经理,他来给你讲解需求了,需求是一个电子发票平台的开发,给你发了封邮件,确定好了会议时间,然后花了2个小时把需求讲清楚了,你和前端孟大人,测试小汪汪,UI贝贝姐一起听的需求。
需求讲完之后,你的Leader 博哥要求你做一个方案,考虑到你是一个新人,原本两天能够做完的方案,特地放宽到了四天的时间。方案要求有DB设计,架构设计,接口文档,关键业务逻辑,部署设计,数据预估等。
你和前端先沟通了接口的数量,然后孟大人提议你来写接口文档,互相讨论了页面倒底应该是一个接口还是两个接口,返回的Json应该是一个List还是数组,半天的时间已经过去了。
然后你看了某电子发票平台提供的接口文档,照着SDK写了一个简单的Demo,大致跑通了流程,弄明白了电子发票是什么东西,又是小半天过去了。跟着就开始做DB的设计,做设计之前当然要先看一下命名规范,简单规划了一下应该有几个库,几张表,几个字段,多少索引。
中间也会参考一下公司之前的设计,尽量保持一致。跟着开始考虑要不要做分布式,前后台要不要拆离,一些不同项目组公用的部分如何设计,同时仔细梳理了一遍项目流程,找产品经理又补充了一份流程图,找出相对复杂的逻辑,用伪代码写了一下思路。
眼看着方案评审的时间到了,你拿着PPT,先从需求讲起,再讲自己的设计方案,时不时的回答leader提问的问题,很多问题可能都是你没有考虑周全的,会觉得漏洞百出,Leader考虑和纠结的点,你可能也无法完全Get到,大概会觉得自己的方案没什么问题(没关系,都会有不知道自己不懂的阶段)。
方案整体通过,但是需要再细化一点,约了下次评审的时间,前端的孟大人已经把页面都做完了,开始用假数据Mock,你这边什么都没做,会有点着急,开始主动加班加点,方案正式通过之后,第一步就是提供了假数据,毕竟要遵守持续集成的理念。
哦,忘记了拆解Task,Leader批评你之后,你在禅道上把Task拆解完成,然后得出来了总时间。Task的粒度不够细致,又被Leader批评了,可能这个时候有点心慌,但好坏可以正式写代码了。
写的时候发现会遇到一些莫名其妙的问题,什么都没改动,编译就突然过不去了,JDK的版本没有注意也出了一点状况,开发环境给你了,但是你对Linux命令没那么熟悉,执行部署命令的时候不小心把其他小伙伴的代码覆盖了,整个项目群里鸡飞狗跳的找了半个小时,最后才是经验丰富的博哥抓住了犯错的你。
你买了一堆雪糕来安抚兄弟们的怒火,从此对服务器开始有了一点畏惧感,你问能不能只在自己本地开发暂时不要部署服务器,Leader奇怪的看了你一眼说,你们之前公司从来都没有持续集成吗?你弱弱的说有。。。好吧,谁让你是培训机构出来的呢。连上传到Git都有问题,你不好意思去再麻烦leader,只好自己去QQ和微信上请教自己的同学。他跟你远程沟通了半天才发现就是你没有项目权限而已,没办法还得找Leader,Leader看你的眼神可能都是想要杀了你。
不过总算是开始了,可惜你们项目的燃尽图上标记着很可能会延期,开始一周多了,你们现在连一个页面都没有完整的调试过,前端还时不时的说:你这个接口不通啊。然后问:你有没有自己测试过?没有。你确实没有自测过,就没有这个习惯,你拿着postman开始做测试,接口是通了但是数据不对,你仔细检查才发现是返回接口的一个参数取错了。
Leader知道之后又批评了你,要求你在本地搭起来前端环境,做端到端的自测,没办法你又折腾了N久的前端NODEJS。这还算好,要命的是你在写代码的过程中,发现有一个需求无法实现,想了半天没想明白,找leader沟通,你们才确定 应该是产品经理漏了一个状态,跟产品经理讨论了很久,产品经理始终不理解你们在表达什么,只是不断的重复一句话:我就需要这三种状态就够了。
最后的妥协方案就是产品经理说你们能满足我的需求就好,我不懂技术,不知道你为什么要加这第四个状态。你第一次有了一种产品经理都是狗屎的感觉,突然间觉得自己好像也有点了自信,但是很快你发现,产品经理看你的眼神,和你看产品经理的眼神竟然有了一点相似,甚至你看出来了那是同样自信的眼神。
然后以为这样就能顺利的完成了,却发现开发环境中了毒,你没办法,重新搭了一套开发环境,虽然有过一次经验,可是这次依然遇到了不同的问题。环境变量,启动脚本,域名的配置你其实并没有完全熟悉,数据库的权限也没有配置好。总算快要收尾的时候,产品部的老大说这个产品做的不行,要改。
你的leader博哥气的拍桌子,但是没办法,结果重要,产品部又格外强调了一下,技术团队要参与产品设计的重要性,虽然是在做重复工作量,但是如果上线了让用户使用之后骂我们,重复劳动不是更多吗?你很想说,那我能扣你们产品部的工资吗,但是想想自己工资也没少拿,改就改吧。
改的时候才发现因为之前代码写的很死,这次改还不如重写,然而你的熟练度还是增加了,刚把代码重写,产品经理老吴说别改了,改回去吧。数据总是不对,接口就是少了校验,样式还老出问题,用户体验的东西根本顾不上,就这样时间过去了终于要Demo了,发现了几个很明显的问题,leader们都很生气,这才发现之前一直没有做Codereview和性能测试。做为新人可能并不太理解这是什么,但是既然是公司要求,就还是要去做了。
性能这儿过不了关,发现是你写的Sql太长了,要优化,你大概懂一点点之前leader考虑的问题了,CodeReview的时候也是几乎要重写。是写还是不写?这是leader纠结的事儿。终于到了测试环境,你也开始了V2版的开发,可是测试的眼睛比雪光亮,总能找出一些你压根没想到的问题,你身上的Bug堆成了山。
在Bug修复流程上,你又一次蒙蔽了,测试小汪汪 指责你修复 Bug太慢,Leader开始跟你说,Bug的修复 不会记录到V2的开发时间,你要自己加班补。有时候还要拉着产品经理和测试和前端一起来撕逼,你在角落里不说话,静静的听他们热情的讨论,好不容易他们吵完了,结论就是:你来改。
上线了,你还没感觉,突然大老板在群里骂人了。原来上线就爆错,Leader也疯了问你什么情况,你发现自己连线上服务器的账密权限都没有,你说开发环境和测试环境是好的啊,Leader已经不想跟你多说了。拉着可怜的运维一起来排查问题,发现。。。少发了一个服务。
这又是该死的流程上出的问题,可是并没有人教你,大家都以为你知道。
大老板知道是你犯的错,但是却不肯跟你说话,就是把CTO拉过去痛骂了一顿,你一个人孤伶伶坐在工位上,感觉对不起所有项目组的人。你为自己的技术感到羞耻,你想写代码,本来就是不想跟人打这么多交道,没想到还是摆脱不了和人相处,你怕承担责任,怕别人问你怎么办,怕太多人一起看着你。
终于你决定了,要认真再学习一次Java,这个决定很困难,可是对你而言很重要,什么线程什么锁都不重要,你会的IO流也不能帮助你快速而正确的解析一个Excel文档,所以你想通了,大场站起来环顾四周大声说:我要辞职,我要辞职,我要辞职!
所有人都楞住了,看着你,终于有一个和蔼可亲的中年秃顶男温和的对你说:小伙子,别激动,我们还在面试,你还没有被录取呢。