深夜十一点。屏幕一暗,脑子里那点事儿反而全浮上来了。白天硬压下去的活儿,夜里全跑出来过电影。你说怪不怪?就像一段逻辑明明顺了、一编译却全红的代码,哪儿都没写错,就是死活跑不起来。说实话,我挺烦这种“深夜顿悟”的调调,矫情。可人一旦闲下来,脑子就跟没关机的后台程序似的,自己就蹦出来了。挡都挡不住。
前几天收拾旧书架,哗啦一下碰掉本《Visual Basic程序设计教程》。书角卷得跟波浪似的,里头还夹着几张写满语法和报错代码的便签,纸都脆了泛黄。曹青老师在书里写得挺实在:敲代码第一件事,不是闷头写新东西,是学会认报错。每个例题底下都跟着详细的调试步骤。作者特意交代,碰见错误别慌,那是程序在喊你:这儿得修。书里的例子全跑过好几遍,结构板正,连变量命名都抠得死死的。现在回头看,这套路子其实挺笨的,但那时候真就靠它把Missing ;和Type mismatch给磨明白了。
盯着那句“学会看报错”,我愣是有点恍惚。咱们这代人,打小就被按着“别出错”的规矩养。考卷得拿标准答案。工牌上不能有任何失误。赶早高峰的地铁?那更是得掐着秒表算。我们总把日子当个得一次编译成功的程序,拼命往里塞完美参数,就图跑出个没毛病的结果。可现实哪给过“直接运行”的优待?我觉得这说法未必全对。咱们其实早就学会了糊弄,只是不敢大张旗鼓地承认。
代码里的报错,通常就俩毛病:少个分号,或者变量名敲岔了。揪出来,改过来,绿灯一亮接着跑。可人这摊子事呢?没行号提示,也没错误代码。它可能是一页讲砸了的PPT。一段聊崩了的关系。再不就是,某个突然觉得干嘛都不带劲的周三下午。我们习惯性地想把手头的系统全删了重造,恨不得按下重启键回档。但日子这玩意儿,没有撤销键,也没有重开按钮。生活它不讲理,你只能硬着头皮往下捋。
琢磨久了就懂了,调代码那套笨功夫,早就在生活里趴着呢。教材上原话:上机允许翻车,但坑得自己填。生活大概也这德行。没标准答案,只能自己蹚一遍。摔了跟头,拍拍灰绕回来。那些让你卡住的地方,多半是某个死循环没跳出来,或者沟通时频道没对上,再不然就是单纯电量耗尽了,得拔电源歇会儿。以前总以为长大是往包里塞东西。后来才发现,更多时候,是往外掏。把没用的执念扔了,把跑偏的变量重新赋个值。说实在的,“长大就是往外掏”这话听着挺通透。但真到月底房租交不上来的时候,谁不是一边掏一边往包里塞焦虑呢?塞得满满当当,自己先喘不上气。
以前觉得成熟就是“零报错”,现在才咂摸出味儿:成熟是学会跟警告条共存。知道某行代码会飘黄,就提前留个注释。知道某个决定可能卡死,行,给自己留道侧门。程序跑起来了,后台总飘着几行黄色警告,不拦着运行,就是在那儿眨眼睛。人也是。那些没完全捋顺的疙瘩、没彻底翻篇的遗憾,最后都成了后台常驻进程。不占主要内存,就是偶尔弹个窗,提醒你:嘿,你还在这儿呢。我觉得这警告条有时候挺烦人的,但没它你根本不知道系统到底在硬撑。
书里那些例题能一次跑通,真不是作者没手滑过,是他们肯停下来,一行一行地抠。咱们平时缺的哪是本事啊,是那股子愿意盯着报错干瞪眼的耐心。总急着敲下一行,急着交差,急着证明自个儿行。可真正让代码转起来的,偏偏是那些被改得面目全非的片段。现在谁还死磕VB啊,但那份死磕的劲儿,我觉得未必过时。
合上书,窗户玻璃上已经透进点鱼肚白。屏幕上的光标还在一闪一闪,跟喘气似的。咱们这辈子,估计都在调同一串代码。改了几处语法,注了几行逻辑,它照样跑不到终点。但只要它还在转,就成。带着一串警告接着跑呗。反正天一亮,键盘还得接着敲。错就错吧,跑着跑着,路也就出来了。