晚上十一点半。屏幕冷光糊脸上,终端里那段代码,又他妈跑不起来。报错信息哗啦啦往下掉,跟催命符似的。我手往桌角一摸,蹭到那本配套的习题集。纸边卷得跟毛边纸似的,参考答案那几页,薄得都快透光了,印字淡得发灰。这破书,真跟我家那台老打印机一个德行,越用越掉色。答案就摆在那儿,步骤抠得死死的,结果也唯一。好像只要照着改,程序就能乖乖听话,严丝合缝地跑完。
以前我特吃这一套。说真的,咱们这代人,大概是被“标准件”给惯坏了。总觉得日子也该有个标准输出。读书,上班,谈恋爱,安家。每一步都像在敲结构体,变量得声明清楚,绝对不能留空指针。稍微偏轨,或者卡壳,脑子里第一反应就是自我审判:是不是我又哪儿没对齐?逻辑是不是又漏了?找对象都恨不得拿着Excel表比对户籍薪资,连处对象都跟跑个隐形的进度条似的。只要照着前辈的经验把代码跑一遍,人生总该能顺利编译通过吧?可拉倒吧。前辈的经验代码,跑在现在的系统上,多半直接报segfault。
后来碰了几次壁,才咂摸过味儿来。人毕竟不是机器。日子,也根本不是能反复重写的代码。习题册里的上机卷,错个分号,系统立马甩你个红底白字的Error。可现实里的栽跟头,从来不给明确提示。你连熬三个大夜赶的方案,甲方一句“感觉不对”,直接给否了。你按部就班地推进,突然就原地打转。可能吧。生活这玩意儿,压根就没装编译器。它不因为你写错一行就拒载,它只是默默把烂摊子堆起来。直到某个平平无奇的周三下午,你累得连泡面都懒得拆,只想瘫在椅子上发呆。到这时候才懂,咱们把太多精力耗在“修正自己”上,压根忘了这事儿大概就是这么个意思。
敲代码敲久了,学会盯着内存分配找病灶。说实话,盯着内存看久了,真容易把自个儿也当进程管。起初总想一键清空重来。后来才看明白,有些崩溃根本不是bug。是系统在喊累,提醒你资源见底了。人大概也这德行。未必是好事,但确实普遍。总以为只要够严谨,就能躲过所有运行时错误。可真正让你停下来的,往往不是逻辑写岔了,而是心里那根弦,不知什么时候松了扣。严谨过头了,反倒容易把自己框死。习题集能给你最优解,人不行。人麻烦就麻烦在,同样的输入,换点经历,跑出来的结果全不一样。你二十岁觉得非去一线城市卷不可,三十岁可能觉得在老家养狗种菜才叫活人。你拿别人的参考答案,根本对不准自己的指针。
前阵子收拾旧书桌,翻出大学时的草稿纸。上面密密麻麻画着链表和栈,旁边还批着“此处必考”“解题套路”。厚厚一沓,至少占了三个笔记本。盯着那些乱窜的箭头,我自己都乐了。那时候的我们,多想把整个世界塞进一个固定的数据结构里。好像模型搭得够精巧,就能算准所有走向。真走过来这些年才发觉,生活倒像个动态分配的内存池。这话听着有点玄,但你可能也试过,越急着攥紧什么,它漏得越快。你松手让它随机分,反而能兜住不少意外。那些当初非要死磕修正的“错误”,回头一看,早长进肉里,成了自己的一部分。
现在再翻那本习题集,我不再火急火燎地往最后翻答案页了。有时候,跑不通就让它卡着吧。坐在屏幕前干等一会儿,灌口温水,瞅瞅窗外的路灯。等水凉了再喝,或者干脆去阳台伸个懒腰。等脑子清醒了,再回去对那段代码。说不定毛病根本不在语法,而是你一开始就没琢磨透,这程序到底想给谁用。过日子也一个道理。与其死命套标准答案,不如先摸摸胸口,问一句:今天这么过,心里踏实不?
窗外风一过,树叶沙沙响。终端里的光标还在一格一格闪,我顺手把报错窗口一关,新建了个空白文档。不写函数,不定义变量,就随手敲了几行备注。保存,合上电脑。反正报错又不收费,明天太阳照样升起,代码大概还能跑,生活也是。明天再说。