晚上十一点半,地铁就剩我这一节。后背贴着玻璃,凉飕飕的。窗户上倒映着个半死不活的自己,领带松垮,衬衫袖口还糊着半干的黑咖啡渍。白天开会卡壳没答上来的那道题,跟个死循环似的,在脑壳里一遍遍撞墙。人一到深夜,就爱跟自己过不去。白天装得再像个人样,关上门,底裤都露出来了。

有阵子我特迷信“不出错”。就像从《青少年计算机程序设计竞赛指导》里扒拉出来的死规矩:变量得先声明,逻辑分支得把能想到的坑全填上。代码跑起来,要么蹦出正确答案,要么直接砸在红彤彤的报错框上。那时候我总琢磨,只要把日子拆成碎块,规矩立得够死,人生照样能像段严丝合缝的算法,咔哒咔哒编译完,稳稳当当吐个理想结果。扯淡。现在回头看,这念头天真得可笑。把生活当代码写,前提是你得是台服务器。可咱们明明是人,哪有那么多预设好的输入输出?硬套这套逻辑,最后全把自己逼进死胡同。

碰了壁才咂摸过味儿来。日子压根不是个静态数组。不给你预分配内存,更没画好边界线。你刚把下个月行程敲进日历,生活反手就是一个变数,把你所有索引全掀了。拿逻辑推感情?人家情绪根本不认什么 if-else。咱们老琢磨着给生活敲段零报错的代码,纯粹是忘了人又不是出厂设置的机器。谁规定每次运行都得弹回同一个值?未必吧。生活这东西,乱一点才有生气。太严丝合缝了,指不定哪天就卡死在哪个犄角旮旯里,连个喘气的缝都没有。

讲真,我以前特躲“调试”这俩字。书里教人怎么揪bug、怎么单步跟、怎么查变量赋值,听着挺唬人。可摊到自己头上,调试就等于认怂。等于承认路走劈了,话说过头了,某段关系已经烂透了。所以我们本能地绕着走,假装那段代码压根没写过,或者干脆格式化重装。重装完呢?下一行照样冒出新岔子。其实吧,调试这事儿未必是认怂,有时候是止损。只是咱们太爱面子,总觉得承认“这儿不对”就是全盘否定自己,结果反而把小毛病拖成了系统崩溃。

前阵子收拾柜子,翻出大学那几份实验报告。纸都脆了,上面密密麻麻全是红笔改的错字和公式。为了一个对不上的数据,我能在实验室死磕到凌晨,草稿纸堆了半人高。现在拿起来瞅,那些“错误”反倒最扎眼。就是靠着一遍遍推翻重来,后来的结果才立得住。人成长这事儿也差不多。以前总以为得把自己打磨成块严丝合缝的拼图,现在才懂,那些磕出来的豁口、对不齐的边角,才是真长肉长骨头地儿。当然,也不是说所有的错都值当死磕。有些坑踩一次就够,没必要非得拿头去撞南墙。量力而行,比盲目坚持实在多了。

书里接着讲动态数据结构。指针指哪儿算哪儿,链表能一直往后接。过日子其实也这德行。不用非得把整条路规划得明明白白,知道脚下一步往哪儿迈就行。走岔了?换个指针接着指。卡壳了?把占着的旧空间腾出来。允许自己偶尔吐出几串乱码,允许程序在某个节点干脆停机歇会儿。这不是认怂,是承认这世道本来就乱,你得顺着它的脾气来。可能有人觉得这太佛系了。但硬要按着图纸走,往往连图纸本身都是错的。

我现在也不敢拍胸脯说彻底通透了。就是年纪往上走,突然懒得跟那些“未处理的异常”死磕了。跟深夜下班挤电梯似的,门一合上,手机屏幕一黑。白天攒的那点焦躁和累,这时候也没地儿倒。拉倒吧,就让它搁那儿待着。明天太阳照样冒头,代码照样得敲,日子照样得过。报错框“叮”一声弹出来,手一抖点确定,接着往下走就完了。

反正人这一辈子,哪能把所有分支都跑通。能在某个普普通通的晚上,突然看清自己那么一小会儿,就算没白活。