晚上十一点半。屏幕冷光直往脸上糊。手里那杯速溶咖啡,凉透了,表面结了一层油膜。光标在空白文档里一明一暗,跟心跳似的。白天攒的那堆烂摊子,理不清,扯不断。手机亮了一下,又灭。没人发消息,也没谁急着听你吐槽今天怎么又搞砸了。我顺手从书架上薅下一本落灰的旧书,《面向对象程序设计语言C++习题解答与上机指导》。纸页都卷了边。直接翻到“调试排错”那一章。作者没整虚的,写得特实在:程序跑飞了,别慌。盯着报错信息,掐着行号,一步步断点跟踪。说实话,现在市面上那些技术书,要么满篇数学公式劝退,要么光讲原理不落地。这本倒像极了那种脾气臭但真能办事的老程序员,指哪打哪。

搁以前,我总觉着敲代码和过日子,八竿子打不着。一个在冷冰冰的屏幕里,一个在热热闹闹的人间。可盯着那串红彤彤的报错,还有旁边的修改注释看久了。脑子里突然“叮”了一下。咱们对待烂摊子的脾气,跟对待一段跑不通的代码,压根儿就是一回事。

书里把参考答案、环境配置、工程创建,都列得明明白白。连VS版本不兼容这种坑,都标了红。可真要自己上手,没人能替你敲下那几行要命的代码。日子不也这么回事吗?我们老爱到处找“标准答案”。感情卡壳了?翻两本心理学。工作推不动?去听职场博主的干货。到了岁数,连怎么活都有人给你画好路线图。我觉得吧,这事儿可能未必对。以为只要按着别人的脚印踩,就能“一键编译通过”。可现实哪会给你标好出错行号?它顶多“啪”地崩一次。或者干脆死机。留你一个人对着黑屏发呆。

说真的,前些年我特怕“报错”。连个分号漏了都能急得冒汗。总觉得程序一崩,或者计划一岔,就是自己菜。后来才咂摸出味儿来。报错不过是系统在拍你肩膀:这儿逻辑没对上,那儿资源没释放。人生里的“段错误”,多半是瞎投进去的感情、硬塞进去的工作,或者互相折磨的关系。你没法直接扒别人的修复代码来用。因为各人的“运行环境”压根对不上号。别人的经验跑在MinGW上,你的人生可能还得兼容Windows。连底层库都打架。非要把别人的路子硬套在自己身上,只会把原本能喘气的日常彻底搞死机。这事儿大概就是这么个意思。强行对齐,除了蓝屏没别的下场。

上周末收拾旧电脑,翻出几年前写的脚本。代码写得那叫一个糙。注释少得可怜,连个像样的变量名都凑合用。可每次按下运行键,看着进度条一格一格往前挪,心里就特别安稳。现在反倒不敢乱动了。不是怕改坏。是怕一改,连原来的步调都找不着了。调程序最忌讳啥?不是报错,而是为了死磕“零警告”,硬生生把能跑通的逻辑改得亲妈都不认识。有时候,带点瑕疵能跑起来的代码,反而比那种洁癖式重构的更抗造。

咱们老指望把生活写成一次编译就通的完美代码。可哪有这么便宜的事儿。过日子,大抵就是不断试错、打补丁、重新跑。允许变量写错。允许循环死磕到底。允许大半夜盯着报错日志长吁短叹。调试这档子事,压根不是为了把错误赶尽杀绝。而是学会跟烂摊子和平共处,心里清楚下一步该踩哪儿。可能有人会觉得我这是在给摆烂找借口。但我觉得未必。生活又不是刷题,哪来那么多标准解法。

把书合上的时候,窗外的路灯已经暗了一大半。屏幕上的光标还在不知疲倦地闪。我不再急着非得抠出那个“正确答案”。也许生活本来就没法设断点。也抄不来标准答案。能看着它一点点跑顺溜,哪怕中途蹦出几个警告框,这日子就算没白过。反正明天还得接着调。慢慢来呗。