未被现在的公司收编之前,我曾是长期落寞的千元级程序员,四处漂泊的私活选手。
所以我接私活有很大原因是通过提升收入弥补作为『程序员』的自我认可缺失。
曾经有一个私活,我穷尽生平所学,强记一堆奇奇怪怪的api,以及莫名的意志,成功挽救几个男人的友谊。
一般私活来说,最让人崩溃的不是最后收不到钱,而是收了第一笔钱之后拖延症开始发作,总感觉大卵把时间。
当回过神来,三个月的开发周期已经剩下一个月。当对接客户的伙伴s在问『现在什么情况』的时候,我实在不忍心回答他,我们刚看完需求文档,那无疑是送他去死。所以只好回答他,一个月内出来没问题,从而回避了最揪心的进度问题。
开发两个人,一个是我,一个是后端技术专家a,如果单论研发能力,我是2,他就是8。但论开发能力,我们五五开,但我打字速度更快。
所以我主张将计划的前后端分工,改成按功能分工:项目有abcdef需求,我负责abcde功能前后端开发,而他集中精力开发对数据逻辑要求最高的需求f的后端,提供接口后我再对接。
当这个计划让s知道后,他明显慌得一批。我一脸凝重地说,有我在,死都死出来。
但s已经焦虑得抽烟都手抖,也没有回头路。而我更焦虑,因为希望大家还能坐下吃饭有说有笑,而不希望区区几万块没了两个朋友。
留给我的时间已经不多了。然而需求文档还是纯文字版。
所以第一步,必须快速定义项目全局的交互,脑补一套原型图。这是个若干crud需求组成的中型系统,交互体验能用即可。然后脑里基本定下前后端交互,需要写哪些前端公共组件。
第二步,甲方需求兼容ie8,我选了最锋利的jQuery1和artTemplate,bootstrap2做布局的,连插件都不用,因为我不知道前端有什么插件可以用,已经没有时间去学。先实现,再让设计伙伴看着来设计。
第三步,开始记住后端框架几个常用api,心中记着mvc、第三范式,一顿猛撸起来。因为必须撸出前置a,后续才好搞。边撸边脑补前端需要怎样对接最方便,所以接口基本严重违反功能单一性原则的。没所谓,我写的接口我说了算。
半个月后,我撸出了abcde的后端接口,开始架构前端,是的,终于开始写第一行前端代码。而a也终于想好了需求f的设计与实现。
s知道这个恶耗之后已经面青口纯白。
我唯一能做到的是加快打字速度,以及冷静,
我给自己的前端要求,第一就是尽量不要有复制粘贴,否则恶心得写不下去。所以我整理下思路,必须要基于订阅发布,定义了带有自定义事件的基类,所有通用或业务组件必须继承这个类。crud项目不在乎表单,分页列表,弹框以及一些选择组件。在view层(只要你想,jQuery 也可以分层)通过监听事件的方式实现组件间的交互或添加临时逻辑。
第二就是尽量少bug ,我通过innerHTML实现暴力mvc,就是数据在组件里维护,更新后再硬插DOM,而不直接操作DOM,一个或多个组件对应一个模板,这样意味着几乎所有动画特效都不能实现。反正又不是不能用。
时间越来越少了,我必须相信自己是全村最强的前端开发者,否则s会焦虑死,大家因为合作失败互相推诿,然后撕逼,以后不能坐下好好吃饭了。
对接接口的时候顺便测试后端接口,有bug两边一起改。这时候我看git 的log,技术专家a终于提交了第一波代码。我知道这一把稳了,他是个大后期,不枉我前期gank得那么辛苦。
在最后两日,a终于提供了接口,s虚弱地询问进度,我甚至听出仿佛有两声娇喘。
我坚定答,两日,够了。
最后s胆战心惊地完成了演示、验收、分钱,而专家A宣布此后不再参与任何私活。而我,当然是沉浸在觉得感觉自己太牛逼之中久久不能自拔。
我们没有撕逼,还是能坐下吃饭的伙伴。我放下了心头大石。收到钱重要吗,也不是最重要。如果重新选择,我估计大家都不想接这个活。
其他私活里,或多或少因为拖延症而出现前期崩,这次崩得最为惊心动魄。
题外话1
一个团队里,总要有人出来做一些大家都能做但没人愿意做的琐碎事,例如画原型图,我真的很讨厌做这个事情,我甚至画得比一些出来没多久的产品经理还多。
可能他们会说,原型图不重要,重要的是产品思维和沟通能力。
你这么牛逼,倒是先告诉我这个表单如果填错了怎么提示啊。
我真的很烦很烦很烦很烦很烦很烦不描述异常情况的需求或者原型图或设计图。
题外话2
发现一个问题。
有些小屌丝接到一个需求时,满脑子关心用什么技术实现,从而让自己获得使用什么技术(React ?vue?还必须全家桶,用少了怕吃亏)的经验。并不关心需求本身逻辑,怎么去抽象成数据结构。最后技术没学到,依稀记得那个api怎么拼写,写满了一堆bug。
用100次框架,也没什么卵用啊。