晚上十一点多,总算把电脑盖上了。旁边那本《Visual Basic 6.0编程案例精解》还摊在桌上,书脊压出折痕,纸边磨得跟狗啃似的。这书年头可不短。当年它教的第一件事特直接:把控件拖进窗体,双击,敲两行代码。按钮一按,对话框“啪”就弹出来;字符一输,验证逻辑自己就跑通了。那时候觉得特踏实。凡事都有个明确的“抓手”。你按下去,世界准得给你个回音。
那阵子我天天琢磨,日子不也这么回事吗?早上七点闹钟一炸,爬起来算“Load”;中午匆匆扒拉两口饭,算个“Click”;晚上睡前复盘今天干没干正事,叫“Unload”。待办清单列得密密麻麻,参数调得严丝合缝。我当时还挺得意,心想这日子怎么可能跑崩呢?怎么可能。
后来碰了几次壁,才咂摸出味儿来。人这事儿,真不是按事件驱动的。咱们总爱给每个动作绑个确定结果。可现实里压根没那么多“双击”等着。我熬了大半年夜盯的项目,公司架构一调,直接胎死腹中;我雷打不动晨跑打卡,体检单上的箭头照样红得刺眼。这事儿大概就是这么个意思:现实里没那么多按钮让你点,也没预设好的回调函数。你就那么干杵着,等一个永远不弹出的对话框。等不到。
以前我死活想不通。总觉得自己肯定哪行代码敲岔劈了,或者参数填错了。后来慢慢捋明白,咱们死心塌地要把生活“可视化”,说白了就是怕失控。拽个按钮放那儿,总比对着空荡荡的窗体强。好歹按钮背后有逻辑能看。咱们太贪恋那种“输入A必定吐出B”的踏实感了。不过话说回来,把日程排得密不透风,烂事儿真就进不来了吗?我觉得未必。那更像是一层心理安慰剂。毕竟现实里的变量,压根不在你的排期表里。
编程里老话叫“异常处理”。程序撞了南墙不直接罢工,而是跳进个兜底模块接着跑。生活其实一个德行。计划外溜走的周末,说断就断的交情,还有那些闷头努力却连个响儿都听不见的死磕,全是系统抛出来的异常。咱们总想一把拦截下来,重新编译。可有时候,最省事的办法真就是敲一句 On Error Resume Next。拍拍灰,不纠结了,接着往下走。反正报错归报错,日子还得过。接着过。
前阵子我特迷收拾电脑桌面。文件按日期命名,文件夹按项目归类,连快捷键都调得整整齐齐,搞得自己跟个效率大师似的。结果某天半夜赶工,电脑“嗡”地一下蓝屏,没来得及存的东西全没了。坐在黑灯瞎火里盯着那个死机画面,我忽然觉得,那种严丝合缝的秩序感,说白了就是一层薄得可怜的窗体皮肤。真正跑程序的逻辑,从来不在界面上。它躲在后台那些默默转的线程里,藏在那些你压根看不见、却一直在后台偷吃电量的进程里。效率工具这东西,有时候就是个心理按摩仪。别太当真。
现在我不再给自己定那种精确到分钟的课表了。偶尔也会绕晕。下午突然愣在桌前,不知道下一步该往哪儿迈。但挺怪,心里反倒没那么拧巴了。日子本来就不是段按顺序往下跑的死脚本。它更像个异步请求。你只管把活儿派出去,剩下的交给时间慢慢吐数据。你管不了它几点回信,也保不齐返回的是不是你要的货。你能做的,就是开着监听,等它自己蹦出来。或者说,等不到也就算了。真就算了。
书还摊在桌上,封面上的VB6图标都磨淡了。它教人怎么搭界面、怎么绑事件,可压根没提过,当窗体突然关了、控件自己跑了、所有预设的触发器全失灵的时候,人该怎么收拾烂摊子。也许答案早就藏在没写进代码的那些空白里了。你只需要坐在那儿,等风来,或者干脆不等。反正按钮就在那儿。按不按,随你。