晚上十一点半。屏幕那点儿冷光直往视网膜上糊,控制台“唰”一下蹦出一串红字。代码逻辑我反反复复核过三遍,绝对没毛病。可卡脖子的,偏偏是生活里那套死板的计划表。前阵子熬了大半年的项目,临门一脚黄了汤;或者干脆是攒了半年的年假旅行,让一场突如其来的暴雨直接浇灭。人撞到这步田地,第一反应十有八九是:完犊子了,重装吧。

手边正好摊着李刚生的《Java SE 6.0基础及应用案例开发》。这书年头有点久,纸页都泛黄了,但里头专门讲调试和运行那一章,倒是实打实的好货。作者没整那些云山雾罩的,就一句大实话:环境搭完,代码敲完,一跑全是异常。别急着砸键盘。死盯着控制台,顺着堆栈信息往下扒。一行行顺。读这书的感觉,就像个在坑里摸爬滚打十几年的老大哥,叼着烟在你耳边碎碎念:报错那是系统在给你打拍子呢,不是让你直接交白卷的。

我对着屏幕愣了好几秒。说实话,打小我就觉得敲代码和过日子压根是两码事。代码是死规矩,少个分号直接原地爆炸,连个喘气的机会都不给。日子呢?那简直是一笔理不清的烂账,没语法也没接口,全凭人瞎蒙硬凑。但琢磨久了,可能我觉着,咱们对付“报错”的那套条件反射,早就长进骨头缝里了。代码里报错了,意思是“这儿逻辑有个窟窿,补上接着跑”;可生活里稍微撞下南墙,咱们偏把一次搞砸、一段处崩、或者一条走岔的路,直接脑补成“主板烧了”。脑子一热就想推倒重来。好像只要心里敲下那个重置键,日子就能真刀真枪地倒带回上一秒的安稳状态。但这事儿未必成立。生活哪有撤销键啊,硬按重置,往往只会把更烂的摊子甩自己脸上。

可生活压根没“上一个版本”这回事。不信你瞅瞅书架。那本编程教材早落了一层灰,书签死死卡在“图形用户界面”那页,怎么都翻不动。去年刚抱回家的时候,我拍着胸脯跟朋友吹,说这个月必须啃透。结果呢?项目进度一催,客户需求一改,学习计划直接断档。卡壳那阵子,我烦得连吃三天泡面,连汤都不剩,觉得自己整个人节奏全崩了。现在再回头看,那次断档,不就是生活抛了个运行时异常嘛。翻回去看书里那个图书管理系统的案例,从搭环境到连数据库,哪一步不是改到想直接拔电源?接口对不上,就重写。流读不出来,就换个路子。它哪是一次敲对的?说白了,全是一遍遍试错、抓虫、再跑,硬生生磨出来的。当然,也可能有人觉得这过程太折磨。但没那几次报错,代码跑起来也就是个空壳子,看着光鲜,一上生产环境就崩。

坦白讲,我以前特别怵“跑不通”。老觉得别人的人生朋友圈里都是绿灯全开,就自己天天在坑里扑腾,溅一身泥。后来盯着周围那些看着挺松快的人,才咂摸出点味儿:人家可能早就看惯了报错日志。碰见岔路口,人家不先低头骂自己废物。喘口气,琢磨琢磨。是路标指错了?鞋底磨平了?火候没到?还是自己压根没收拾妥当?把火气压下去,像扒拉堆栈信息似的,把那一团烂摊子拆成一行行小问题。哪有什么天生从容?我觉得多半是,人家把报错当成了日常打卡,没往绝路上想罢了。当然,这法子也不是万能药。真遇上大坎儿,谁都得慌一阵子。允许自己骂两句、歇半天,天也塌不下来。

屏幕上的红字还在不依不饶地闪。我叹了口气,合上编辑器。既没重装系统,也没把计划表撕了。顺手把报错的那行拎出来,调了个参数,又敲了下运行。程序跨过坎儿,接着往下溜。日子估计也这么回事。不用非得等万事俱备才迈步。允许它卡两下。允许它偶尔弹个框吓唬你。只要还愿意一行行往下扒,路就没走歪。这事儿大概就是这么个意思。跑着跑着,就顺了。