十一点半。屏幕光刺眼,糊了一脸。键盘又敲了三十下。还是那行红字。烦。不是累,是那股劲儿泄了。脑子里明明顺得像开闸放水,一指头落到键盘上,全卡住。现在这世道,恨不得三分钟憋出个成品。等得起谁啊?
这时候,谁脑子里没飘过一句:是不是第一步就迈歪了?
没办法,翻箱倒柜,拽出一本落灰的《Visual Basic编程技术全接触》。书脊一捏就碎,页角卷得跟咸菜丝似的。封底还印着那句老话:“通俗、易懂,符合循序渐进、由浅入深的学习规则。”随手翻到中间,好家伙。控件属性,事件代码,密密麻麻。放现在搞大模型、微服务的,准得直嘬牙花子。老作者不跟你扯什么高大上架构,上来就教你拖个按钮,敲两行点击响应,摁一下“运行”,瞅瞅它弹不弹。道理其实就一句:先让它跑起来,再琢磨怎么跑得好。
以前我老犯嘀咕:图啥呢?不能一竿子捅到底吗?非得拆成八股碎步走,还故意留一堆“跑不通”的坑。现在回过味来,哪是作者故意整人。那时候的IDE调试器哪有现在这么聪明?纯粹是怕一上来就把人吓退。新手直接碰底层逻辑,十有八九当场心态崩盘。
编程这活儿,说白了,全是在“报错”里熬出来的。书里写得直白:从纸上到跑起来,试错躲不掉。敲完代码点运行,界面没动静?回去扒事件绑定。窗口乱蹦?查变量。哪有一上来就顺顺当当交付的?纯拼耐心。先认了它初期的笨拙,补丁摞补丁,能转就行。转起来了,再慢慢磨。我带实习生也看明白了,那些一上来就死磕“零缺陷”的,往往卡在第一个循环里,连编译都过不去。
可惜,这道理早被咱们忘到脑后了。
生活里多少事,都被咱们按了“必须一次过”的开关。选专业,换城市,谈恋爱,甚至周末想学个新玩意儿,都习惯先画张完美施工图,指望现实老老实实照图纸盖。真卡壳了,进度慢半拍,第一反应不是找原因,是扇自己大嘴巴子,或者直接拔网线。怕跑不通,怕露怯。宁愿在脑子里盘一万遍,也不肯真去敲下第一行。现实能按Excel表格走吗?我见过太多人,计划做得比谁都密,最后一步都没迈出去。光在脑子里,就跑出了几十个bug。
现实里哪有天衣无缝的起手式?人往前走,全靠收拾烂摊子。突然冒出岔子,跟撞了未处理异常没两样。跟人闹别扭,像模块接口对不上。计划赶不上变化,好比后台线程抢了资源。别急着推倒重来。学学调试:找到报错的那行,敲个断点,扒开看看,到底哪个变量卡了脖子。话是这么说,真落到自己头上,谁不是一边骂娘一边改?
早年间总以为,长大就是少踩坑。现在咂摸过味儿了。成熟,是学会跟坑和平共处。
书里那些能跑通的例子,作者一开始也没开天眼。人家敢先敲个“能跑就行”的糙版,用的时候发现问题,再打补丁。过日子,一个理儿。出发前不用把每块砖都铺平。刚处关系,也别强求百分百合拍。先让它转起来。哪怕只敲个“Hello World”。哪怕今天比昨天多熬一小时,多改了三行参数。
咱不是不想折腾。就是怕刚上手,就掉链子。
能跑长跑的,无非是多按了几回“调试”,多改了俩参数。人家早摸清门道:报错不是死局。是系统在扯着嗓子喊:这变量该重赋值了,那逻辑得重排。别死磕完美。保持转着就行。这话当然不是让你放任bug不管。是别因为怕错,就干脆不开始。允许自己先写出一坨能跑的烂代码,比憋不出一个完美架构,强得多。
合上书。外头天快擦亮了。屏幕上的红字还亮着。我没急着关。光标挪回报错那行,一行行往下捋。
人这辈子,本来也敲不出零bug的代码。能在这么个静悄悄的夜里,认下自己暂时“跑不通”,沉住气找毛病,就算没白过。最后能不能顺溜跑起来?交给日子。交给下一次点“运行”。这事儿,急不来。