深夜十一点半。屏幕冷光直往脸上扑。文档里的字打了又删,删了又打。光标在“发送”俩字上蹦跶半天,我手指头就是悬着按不下去。不是词儿没凑齐。是怕真敲下去,泼出去的水,连个响声都听不见。你说怪不怪?咱们对“不可逆”的恐惧,有时候真比怕鬼还重。
前阵子大扫除,从书架最底下刨出本落灰的旧书,《程序员修炼三部曲:版本控制之道:使用CVS》。封面卷得跟薯片似的。夹层里还卡着几张五年前的会议便签,字迹都洇糊了。书里写得挺实在:版本控制这玩意儿压根不玄乎。大伙儿望而却步,全是因为贪心。总想一口气把高级功能全啃下来。其实呢?死磕几个最基础的命令,就能攥住系统给的九成安全感。剩下那一成?留着真碰到硬茬儿再慢慢抠。我觉得吧,这“九成”说得太满。但够普通人不翻车了。真出大事,谁还没个急救包呢?
看到这儿,我手指头在屏幕上停了两秒。咱们过日子,好像比敲代码还怂。连个“Ctrl+Z”都不敢想。代码写岔劈了?回滚到上一版就完事儿。分支跑偏了?切回主干接着走。可生活呢?上周群发错的那条吐槽,上个月脑子一热接下的烂项目,还有那句脱口而出的伤人的话。好家伙,连个回收站都进不去。咱们总把人生当单线程任务跑,觉得必须一次走对,不然全盘皆输。结果呢?步步踩棉花。不敢推门。怕搞砸,怕翻不了篇,怕一旦Commit,就真成了死胡同。未必是生活没给备份。是咱们自己,手一抖把备份盘给砸了。
但书里那本子,早就把底牌亮出来了。版本控制图的根本就不是完美。是让人敢动手。你只管去开新分支。把那些毛都没长齐的想法扔进去试,去撞那些大概率会碰壁的死胡同。主干那边稳如老狗,你在分支里折腾,头破血流了,随时能切回去。咱们缺的哪是本事啊。分明是给自己留“分支”的胆子。说实话,我挺佩服那种能同时开三个生活副本的人。大多数人呢?连一个都不敢开。怕把主线剧情搞崩了,对吧?
拿换工作打比方。多少人不是不想跳槽。是怕跳进火坑,连原来的退路都给烧没了。想换个城市生活,却死活不敢退现在的租约。怕新地方水土不服,旧日子也回不去。总想着一步登天,把往后十年的日子排得密不透风。好像只要准备得够足,就能刀枪不入。可现实偏不配合。事情哪能按着剧本走?我见过太多把计划表做得比Excel还细的人,最后全败给了一场突如其来的感冒,或者老板一句轻飘飘的“再想想”。
其实,生活里的“版本控制”没那么高深。不用你精通什么底层逻辑。摸清基本套路,就能拿到九成踏实。卡里留一笔只进不出的应急存款,那是备份。养个压根不指望变现的爱好,周末瞎捣鼓点木工,或者养几盆半死不活的绿萝,那是分支。在一段关系里守住底线,不让步也不崩溃,那是主干。你没必要跟任何人掰扯为什么这么干。你就是在给自己搭个随时能退回的本地仓库。当然,这玩意儿不能包治百病。顶多让你摔的时候,知道底下垫块软砖头。
说句掏心窝子的。我以前特反感这种“留后路”的做派。总觉得得破釜沉舟,得背水一战。留了退路就是怂包,就是给自己找借口。后来自己摔过跟头,才咂摸过味儿来。真勇敢的人,是清楚什么时候该往前冲,也明白什么时候该坐下喘口气。版本控制教咱们的,不是怎么躲开坑。而是怎么体面地摔个狗吃屎,拍拍土,带着之前的划痕,重新上路。这事儿未必适合所有人。但对咱们这种容易想太多的普通人,算是个保命符。
有时候加完班往家走。路灯把影子拉得老长。脑子里会突然蹦出个念头:人这一辈子,大概注定要经历无数次“冲突”和“合并”。跟过去的自己较劲,跟眼前的现实和解。没哪次选择是绝对正确的。也没哪次回头是白费的。咱们就是在瞎摸乱撞里,慢慢给自己攒一个够结实的本地副本。可能到最后,这副本早就跟初始版本面目全非了。但至少,它还在。
也许明天,我照样会打错字。照样会选错道。照样在某个十字路口干站半天。但至少心里有个底。知道给自己留了个只属于自己的仓库。随时能切回上一版,把乱掉的线头理顺,把疲惫的情绪清空,接着往下过。不用急着跟谁证明什么,也不怕走弯路。能随时按下撤销键的日子,本身就挺让人踏实的。至少,今晚这文档,我大概能发出去了。