晚上十一点半。窗外的车声早散了,屋里就剩冰箱压缩机在那儿嗡嗡喘气。我盯着屏幕发愣,代码一行没进。脑子里全是被砸烂的项目,还有那些石沉大海的指望。日子撞上死循环了呗。怎么调参,怎么死磕,愣是蹦不出个像样的结果。没办法,随手从书架底下薅出本落灰的旧书——《Visual Basic完全自学手册》。翻到调试和错误处理那章,纸边卷得跟毛边一样,指尖一蹭,全是黑灰。书里写得挺直白:程序崩了别硬扛。记日志,跳过卡壳的块,接着往下跑。

我愣了下。学编程头两年,教的不是语法就是逻辑。真没人手把手教咱们怎么“体面地栽跟头”。学校只教怎么让代码跑通,没教过跑崩了怎么收拾烂摊子。可人活着的日常,哪是顺风顺水?IDE 不会因为哪行写岔了,就把整个工程删库跑路。它顶多在控制台甩出一行红字,指着你说:越界了,变量空了。你补个异常捕获,留条退路,代码照样能往下溜达。咱们呢?倒像是手里攥着个必须一次编译通过的正式版本。简历上把空窗期抠得干干净净,朋友圈只发精修图,连跟哥们儿吹水都得提前列提纲。生怕哪句嘴瓢,就暴露出“系统不稳定”。全把小失误当致命 bug,恨不得按个撤销键重来。跑得够快,底层逻辑漏洞就追不上屁股了?扯淡。

说实话,我也干过这种掩耳盗铃的蠢事。关系处僵了,工作偏轨了,第一反应就是装死。当那段日子没存在过。直到有回搞的活动彻底延期,我蹲在空荡荡的会议室里,盯着满屏跳了十几次的报错提示发呆。那会儿突然觉得挺滑稽。哪是代码在报错,分明是我自己在死机。以前总以为,长大就是不出错。把自己盘成一套严丝合缝的算法。兜兜转转才咂摸过味儿来:成年人的成熟,是学会给自己写 try-catch 块。不是把麻烦挡在门外。是认了它准会来,然后提前盘算好:真撞上了,该揽下什么,该撒手什么。这事儿未必是妥协。倒像是给情绪装了个减震器。硬撑着不报错,最后崩得往往更彻底。

代码里的容错机制,图的根本不是完美运行。是在烂摊子里保住个能用的底线。生活这玩意儿,估计也差不多是个理儿。总以为计划排得密不透风,就能踩空所有坑。可时间、人心、碰巧赶上的际遇,哪样在你的变量表里?你压根写不出能跑通一辈子的逻辑。能做的,无非是给情绪腾个缓冲带,给失误留两次重试的机会。别一弹个窗就急着关机。有时候,允许自己卡个壳。行,某些事儿就是没个即时响动。反倒能熬过那些最难捱的关。毕竟,谁还没个内存泄漏的时候?

书的后半截,作者拿学来的控件和文件读写,一点点拼出个学生信息管理系统。界面土得掉渣,按钮排得跟军训方阵似的。新手那股笨拙劲儿,藏都藏不住。可一旦数据录岔了,系统准弹窗提示,绝不直接闪退。我盯着屏幕,忽然品出点踏实感。它不吹嘘永远不翻车。它只认死理:就算翻车了,也得留个痕迹,记个档,然后接着往前蹭。

如今这环境,天天拿鞭子抽着人快速迭代。今天刚摸个新技能,明天就得看数据涨红;刚理顺点人情世故,后天就逼着对方给个准话。效率成了唯一硬指标,倒把规矩忘了:没经过充分调试的系统,谁敢轻易上线?人更是这样。那些看着永远游刃有余的,未必没经历过崩溃边缘。只不过人家习惯了在后台默默打补丁,没在台上硬演完美人设。不过话说回来,真逼到那份上,我也未必能扛住。可能早就躺平了,谁也不是铁打的。

屏幕上的光标还在一格一格闪。我把书合上,没打算去重构什么人生底层架构。明天睁眼,估计照样得跟新乱码、新断点死磕。但至少心里有底了。不用急着把自己格式化。能跑起来,哪怕满屏都是警告和滴滴响的提示音,也算一种活法。