晚上十一点半,电梯门“叮”地合上。手机屏幕一暗,好家伙,白天那几十条工作群消息总算闭嘴了。其实不是没人找,是脑子突然宕机。手指头悬在键盘上,敲谁呢?回个“嗯”,太敷衍;敲小作文吧,又嫌累。人这玩意儿,有时候真像段写废的代码。按着说明书一行行敲,偏在某个没标明的岔路口,直接蓝屏死机。后来我硬着头皮去翻《Kylix实例入门》,看调代码那章。作者不整虚的,就一句大实话:别急着推翻重写,先掐个断点,一行行单步跑,盯着变量怎么变。程序卡了,重启键一按就完事。人要是卡了?得自己给自己按暂停。喘口气再说。
“调试”俩字,听着挺硬核,可过日子,说白了就是这套路。书里摊开讲,调试不是认怂说程序写烂了,是逼着它自己把毛病亮出来。可咱们对自己,太他妈狠了。活儿砸了,感情淡了,计划卡壳了,脑子里“咔哒”一下,直接弹出“我是不是彻底废了”。恨不得连人带魂格式化重装。但日子哪有重装系统这出戏?顶多硬着头皮,把掉地上的零件一个个捡起来,勉强拼回去。说实话,这比喻搁这儿挺勉强的。代码崩了,回滚一下就能复原。人要是走岔了道,哪有什么完美的存档点?只能边走边缝缝补补,凑合着往前走。
搁以前,我专爱一头扎进死胡同找答案。有阵子手头的项目连轴撞墙,我把自己反锁在十平米的出租屋里,把过去三个月的邮件、微信聊天记录翻来覆去地抠。抠到最后才咂摸出味儿来。毛病根本不在什么宏大战略上。全在一个不起眼的犄角旮旯:某场评审会散场后,客户随口嘟囔的一句顾虑,我给漏了。就少记的一行字,把后面所有的力气全泄了。书里调图形图像应用时提过“属性对齐”——差一像素,整个画面就歪了。人和人打交道,估计也他妈讲究这个。咱总爱往大了想,以为是大方向跑偏了。其实呢?多半是某句话尾音没收好,某个眼神躲闪了,或者某回没接住的沉默。一点点攒着,最后成了沟壑。成年人的关系崩盘,哪有那么多轰轰烈烈?全藏在这些“差点意思”的褶皱里。谁还没个接不住话、干瞪眼的尴尬瞬间?
说句掏心窝子的,允许自己偶尔报个错,比死磕“完美运行”难多了。书里聊数据库编程,拿事务回滚打比方:一步踩空,能撤回到上回的安全区。现实呢?现实里的回滚,刀刀见血,全是真金白银的代价。咱回不到三年前没选那条岔路的日子。也抹不掉某句脱口而出的混账话。但调试这玩意儿,压根就不是为了让你时光倒流。它是让你看清,到底哪一步踩了雷。掐断点,不是为了否定从前。是图个明白。下次路过这坑,脚底下能条件反射地慢半拍。这招对代码管用,对人?未必能全照搬。毕竟人心不是数据库,哪有那么多标准事务可以撤销。
以前我特忌讳“报错”这俩字。总觉得人生该是条笔直的大道,稍微卡壳一下,就是系统彻底崩了。现在倒觉得,卡顿本身,就是个信号。就像书里调键盘事件,得盯着每个键是按下去还是弹起来。过日子也一样。碰到坎儿,咱得敢在原地刹一脚。问问自己:刚才那步,我到底想递个什么话?那晚没回消息,真不是忙得脚不沾地。是压根不知道该怎么接茬。那个推不动的项目,也不是我能力拉胯。是心里早就摸到方向不对了,只是自己骗自己。说白了,咱们这代人,好像天生就被按着头练“一键上线”。赶工期,交活儿,死撑体面。没人教过咱们怎么停下来,老老实实查日志。可你越是闷头往前窜,越容易在同一个死胡同里打转,撞得头破血流。
调试,真不是让你瘫痪在原地喘不上气。它是让你换口气。它摆明了告诉你,那些看着乱成一锅粥的瞬间,全在给你递数据。你没必要非得把每条裂缝都填平。只要认了“这儿确实卡住了”,就算迈过一道坎。这事儿大概就这么个意思。别总想着把日子过得滴水不漏。偶尔漏点水,反倒能照出哪儿该补补。
书搁下的时候,外头天都泛白了。屏幕上的代码跑通没,其实没那么要命。要紧的是,咱总算肯停下来,一行一行地咂摸自己是怎么一步步挪到今天的。有些变量,可能这辈子都调不匀。但只要能盯着它看,心里就有底了。哪怕最后它就是个“待定”,咱也算没白活这一遭,你说是不是?