晚上十一点半。出租屋里就剩我头顶那盏旧台灯还亮着。屏幕冷光直往眼皮里扎,IDE底下又刷出一排红字。我盯着那行 cannot find symbol 发了会儿呆。这提示太熟了。熟得让人牙酸。它不光在代码里折磨人,在生活里也一样。每次真得做决定、往前迈步的时候,胃里那种悬空发虚的劲儿……跟它简直一模一样。你说呢?
干啥事儿吧,人本能都爱先找本“说明书”垫垫底。前阵子我随手翻了本《Java项目实战精编》。说实话,这书确实不玩虚的。三百多页,硬是把那些绕人的概念拆成了乐高积木。搭环境,写面向对象,搞网络通信……它明明白白告诉你第一步敲啥、第二步改啥。翻的时候是挺让人踏实的。毕竟谁不想踩着现成的脚印走?不用自己当实验小白鼠,照猫画虎总能跑通。但话说回来,这种“照着做就行”的安全感,多半是骗人的。书里的逻辑再严密,它也没法替你挡掉现实里的坑。真掉进去了,你连个报错信息都看不到。
可日子偏偏不吃这套。毕业那阵子,我捏着改了七八版的简历满大街投。脑子里连剧本都写好了:先熬半年实习,接着跳槽涨薪,三年之内稳坐主管位置。现在想想,那时候是真天真。真以为人生是个带标准流程图的 IDE。现实呢?压根没给咱们发现成的类库。遇到喜欢的人,紧张得连句“你好”都卡壳。想转行干点新鲜的,发现这行的潜规则早换了三轮。就连立过军令状要早起跑步,第二天也被老板临时拉去改PPT给搅了。这事儿大概就是这么个意思。咱们翻烂了无数本“成功学指南”,可真到了自己上手写代码那天,面对的依然是那块空荡荡的白板。指望一步到位的?最后多半得自己填坑。
以前我特怕这种“空”。总死磕着,觉得只要甘特图画得再细点、待办事项列得再满,就能把雷全排掉。后来在项目组里熬了几年,才咂摸出点不对味儿的地方。跟着教程敲的代码,跑起来是挺丝滑。可让你自己从零搭个架构?第一次编译,百分之九十的概率是满屏红。书上管这叫“调试是常态”。其实过日子不也这么回事?我觉得吧,长大真不是按图索骥打通关。而是慢慢学会在报错堆里扒拉线索。跑不通的时候,别硬刚。顺手加个判断条件,或者干脆把那段死逻辑删了重写。人嘛,总得学会跟“跑不通”这事儿和解。
书里往后翻,讲到多线程。说一堆任务得同时跑,还得防着抢资源。咱这现实里的活法,简直像个随时要OOM的进程。白天回邮件、开会扯皮,晚上还得自己消化焦虑。周末挤时间陪家人、盯着体检报告上的箭头。没人给咱们设优先级,更没人保证CPU不撞车。有时候忙得脚不沾地。仔细一想,全卡在“等锁释放”上了。我后来学乖了。真得停下手里的活儿喘口气。把那些占内存的后台进程全关了,或者干脆让不重要的任务先挂起。非要把三四十个标签页全摁开,最后只能是电脑风扇转得跟直升机似的,最要紧的那份方案反而没空弄。这事儿未必是效率问题。纯粹是贪多嚼不烂。
早高峰挤地铁。看着周围那些眼神发直、抱着手机打瞌睡的人,我老忍不住瞎琢磨。大伙是不是都在自己的小窗口里默默排雷呢?有人咬牙换了城市落户。有人三十多岁转行从零学起。还有人干脆把生活节奏调成了静音模式。没谁进场是拎着说明书的。全是在一次次报错里,硬生生拼凑出自己的运行环境。以前我特较真,总指望代码能一次跑通。现在反倒觉得,那一遍遍敲下去的 try-catch,才是真在兜底。生活里的试错,图的真不是证明自个儿多聪明。无非就是拿脚去量量,哪条道能蹚过去,哪条道得乖乖绕开。可能吧。跌跟头多了,路自然就熟了。
屏幕上的红字还在闪。我把那个拼错的变量名删了,重新敲对。按下回车。编译通过。没报错了。其实真没啥高深技巧。纯粹是刚才太急,总想一口气把后面全写完。日子大概也这么回事吧?没哪本教程能替你把手里这半截代码续完。能做的,无非就是在报错堆里坐稳当了。把键盘上的灰拍一拍,接着敲下一行。
折腾了这么多年,身上大概也就落下个毛病:怎么跟自个儿写出来的烂逻辑和解。不指望它永远零报错、永不宕机。就图下次再翻车的时候,能摸黑找到日志,知道该往哪儿查。这事儿,慢慢来吧。