晚上十一点半。屏幕还亮着。文档里就杵着一行标题,光标在那儿一闪一闪,跟催命似的。盯着它,脑子里已经开始硬排未来三年的日程表。该啃什么技能?往哪条道走?第一步,到底迈哪只脚?想得越细,人越跟被点了穴。干脆合上电脑,摸黑去厨房接了杯凉水。咽下去,那股凉意混着熟悉的憋屈,直往嗓子眼儿里钻。这场景,熟透了。谁没在深夜里给自己画过张“完美人生蓝图”呢?可现实是,蓝图画得越密,手越不敢动。
后来瞎翻《统一软件工程》,里头一段话,硬把我给拽住了。作者说,搞软件本来就是件麻烦事。但现代软件工程的路子,其实就一句话:把“从冒出个念头到敲出代码”这长串流程,掰成一个个死磕的迭代循环。管需求,画模型,写代码,往上部署。跑完一轮收反馈,再滚回起点。书里反反复复就认一个死理:写软件不靠老天爷赏饭的灵感,靠的就是打样、测bug、改错,一遍遍磨出来的工程活。这书看着挺硬核,剥开外壳,其实就一句糙话:别整那些虚的,先跑个能用的版本再说。
我这才咂摸过来。自己这些年之所以原地打转,全是因为把人生当成了“一锤子买卖”。恨不得交出去的就是成品。大伙儿都以为,前期蓝图铺得越密,路上就能少踩坑。于是天天在脑子里搞“概念设计”。二胎生在哪年?房贷还得剩多少?退休去三亚还是大理?全列进了Excel。可现实哪是按着甘特图走的?计划总变。真不是咱们脑子不够用,是咱们死活不肯干“迭代”这最笨、也最管用的活儿。书里教人用UML和简单设计模式去捋系统,说白了,就是给脑子里那些雾里看花的东西找个落脚点。咱们生活里的UML是什么?可能就是微信文件传输助手里那句“明天先找XX对个初稿”。是跟朋友撸串时吐的长槽。是硬着头皮报个课。干脆把那个拖了半年的大计划,拆成今天下班就能干完的一件小事。
讲真,我以前特反感“先出个粗糙版”这说法。总觉得没琢磨透彻就上手,是糊弄事,是对自己不上心。可瞅着书架上那本落灰的笔记本,还有手机里建了又删的几条备忘录……我算是想通了。这种死磕“完美开局”的轴劲儿,才是真把我耗干的元凶。软件得先出个1.0版本。哪怕里头bug满天飞,也得先推上线。不然谁知道用户到底在哪一步骂娘?人也是这理儿。你不把想法扔到现实里磕一磕,脑子里再完美,也永远是张PPT。不过话说回来,软件能回滚,生活可没撤销键。所以这草图画得再糙,也得给自己留点容错的空间。别把自己逼到死角。
现在再碰上卡壳的事,我不再逼着自己画全套架构图了。先拿笔画个草图就行。知道大致方向,脚先迈出去。走到死胡同,就回去改需求。发现路走岔了,就顺手调调设计模式。允许前期写得乱糟糟的。允许自己起步磨蹭点。搞工程的本事,本来就不是保证零失误,而是得搭个能自己打补丁、自己往前滚的系统。把日子当成这么个不断打版的活来过,肩上的担子总算轻快了些。这事儿大概就是这么个意思。未必适用于所有人生难题,但对付那些卡脖子的项目,绝对管用。
屏幕上的光标还在闪。我不再往下硬排三年后的戏码了。新建了个文件夹。把眼下能立刻动手的三件事往里一扔。文档还是空荡荡的。但看着,不再让人发怵。反正能跑通的东西,最初不都是张没画完的草图。