晚上十一点半。末班地铁车厢里就剩我几个。后背死死贴着冰凉的车门玻璃,窗外的隧道灯光“唰”一下全被拉成光带。脑子里突然就蹦出抽屉最里头那本五年前的计划本。翻开扉页,字写得那叫一个板正:“三年适应岗位,五年独立带项目,三十岁前把生活理顺。”看着就憋气。真喘不过气。这哪是计划?这分明是甲方拍着桌子定死的系统需求文档,谁也不准改。那时候我多天真啊。真以为把每一步都抠得死死的,日子就能像编译通过的代码,哐哐哐,稳稳当当地跑下去。现在想想,这事儿大概就是这么个意思——年轻人总爱画大饼,可惜生活它不吃这套,它只认实打实的账。
后来翻出一本讲信息系统开发的教材。里头死磕一个词:可修改性。作者写得很直白。初期分析再严密,有个屁用?抵不过真实环境里那些不按套路出牌的变量。系统一上线。用户张嘴就是新需求。老模块底下,全是暗坑。真正老道的架构师,压根不指望“一次做对”。他们故意在接口处留白。给以后的改动,留条活路。看到这儿,我手指头停住了。咱们平时算账、规划,怎么就死活不肯把这“可修改性”往自己身上套呢?可能咱们都太迷信“一步到位”了。总觉得留余地就是没底气。但我觉得未必。扯。真把路堵死了,那才叫没退路。
合上书,我拿眼瞟着计划本上那些被划烂又补上的字条,突然觉着,咱们过日子简直像极了那种急着赶工期的程序员。总以为挑了个专业、定了个城市、找着了对象,就算把“需求分析”给结了,可以一键部署上线。结果呢?现实反手就是一顿报错。有人因为计划全乱套,整宿整宿睡不着;有人更绝,直接重装系统,从头再来。可谁愿意蹲下来?看看旧代码里打个补丁就能跑通?咱们怕改,多半是心里那点虚荣作祟。总觉得初稿一改,就等于承认当初脑子进水选了条死胡同。说真的,我见过太多人。宁可硬扛着不调整,也不肯承认“这儿可能得重写”。结果拖成个四不像的烂摊子,反倒更累。
前年做项目,我带过一个新人。他交上来的方案完美无缺,流程图画得像艺术品,风险评估列了十几条,连服务器宕机三秒的预案都备好了。我问他,要是客户明天拍脑袋要换核心逻辑呢?他当场卡壳,支支吾吾说那得重新走流程。我乐了,没点破。其实过日子跟写代码一个理儿。书里另外一句大实话我也得拎出来说:需求从来不是死水一潭。今天非它不可的,明天保准变成绊脚石。咱们老把人生当成一次性交差的硬货,生怕上线后蹦出个Bug,却压根忘了,生活这玩意儿,本来就是持续集成的过程。当然,持续集成也得有个度。天天重构代码,项目早晚得黄,日子也一样,折腾过头了反而心力交瘁,未必是好事。
搁以前,我眼里的“稳定”就是按图索骥,半步都不能岔。现在算是咂摸出味儿来了,稳定其实是允许自己随时调参数。教材里专门提过,“运行维护”这阶段往往比写代码还熬人,因为系统是边用边长的。人哪,不就这么回事。那些看着一路开挂的,不是没碰过岔路口,而是早就习惯了一边走一边修路。人家不抱着最初的蓝图当宝贝,反倒把每一次走偏,都当成一次必要的迭代。推倒重来敢动手,老轨道上微调也舍得下本。不过话说回来,这种“边走边修”的能力,真不是谁天生就有的,多半是被生活逼出来的。没挨过几次毒打,谁愿意承认自己画的图是废纸?
我把计划本重新塞回抽屉。没撕,也没合严。就在第三页的空白处,我随手薅过笔写了一句:允许延期。说到底,人生压根就没有那种严丝合缝符合需求说明书的版本。咱们总想一锤子买卖定终身,却忘了日子得靠反复调试才能跑顺。能在某个累得散架的晚上,看着自己那张面目全非的计划表,还能拍拍灰接着往前走,这大概就是生活教给我们的“可修改性”吧。路还长着呢,图纸上的墨迹,本来就是为了被橡皮擦蹭掉才画上去的。反正明天还得挤早高峰,今儿,就先让脑子歇会儿。