有些书,头回碰着觉得干巴,翻多了反倒咂摸出点踏实的理儿。前阵子我顺手翻了本《编程逻辑与设计》。本来冲着“逻辑”俩字去的。没指望里头堆满代码。倒像周三下午三点,工作群里连蹦出五条未读消息,脑仁嗡嗡响的时候。有人突然塞给我张白纸和支铅笔,说:歇会儿。先把线头捋顺了。别闷头往前冲。这事儿,大概就是这么个意思。
这书规矩得很。十五章。从最基础的玩意儿一路铺到面向对象和UML。说实在的,头两章我差点啃着书睡着。什么底层原理、逻辑门电路,干瘪得跟晒裂的麦秸似的。我硬着头皮往下扒。扒到“断点控制”那节,手指头突然就钉在纸上了。作者说话特直白:程序跑飞了,别瞎折腾。掐个断点。让执行停下来。瞅瞅内存里头的变量,这会儿到底是个啥德行。我估摸着,作者写这儿的时候,估计也被一堆空指针异常折磨得够呛,才憋出这么句大实话。
就这半句话。我盯着看了两回。咱们平时办事,好像压根不敢掐断点。项目卡脖子了?咬碎牙继续赶。跟谁处僵了?还拿老套路去硬撩。日子过到半截觉着哪儿不对付?也舍不得歇脚查查自个儿的“变量”。老觉得只要蹬自行车蹬得够快,就能把那些乱码一样的情绪和烂摊子甩在身后。可书里这套冷冰冰的排查招数,偏偏把这种瞎忙活的泡沫给戳破了。停下来。看看数据。看看环境。看看自己到底把哪根线接错了。原来逻辑不是拿来显摆聪明的。是拿来兜底的。
再往后翻到“用户菜单设计和输入校验”,我差点乐出声。作者把校验写得跟机器人似的。非空判断。类型检查。范围限制。少一道关都不放行。可琢磨琢磨,这哪是教写代码。分明是教人怎么接住别人的茬。咱们老习惯把别人递过来的“输入”当圣旨,照单全收。等结果砸脸上稀碎,才拍大腿后悔当初咋没多长个心眼。校验不是防着谁。是给彼此腾个喘气的缝儿。把边边角角先摸透了,后面的活儿才能顺当往下推。
这让我想起去年硬着头皮接了个跨部门协作的破事儿。当时仗着有点经验,连个流程图都没画,直接拉了个12人的大群就开始甩任务。结果中间全是盲区,各干各的。上线前夜全员熬夜救火,咖啡当水喝。那会儿要是能翻到书里“程序模块和层次图”那几页,大概就懂了。把大疙瘩拆成小零件,把零件间的连线理成树状。真不是磨洋工。是提前把雷给排了。结构感这玩意儿,平时看着挺虚,真到一地鸡毛的时候,它就是那根能把你往回拽的绳子。
当然,这书的毛病也挑得出来。它太迷信“正确”的结构了,字缝里都透着计算机式的死板理性。可日子哪有那么严丝合缝的层次图?有时候咱要的压根不是完美的UML类图,而是随时敢掀桌子重来的胆气。书里搭的是骨架,血肉还得自个儿长。我认它教的那股子克制和审慎,但也没指望拿它当人生说明书照本宣科。我觉得它这套逻辑未必适合所有场景,尤其是那种需求三天一变、全靠拍脑袋的项目。死磕结构反而容易把自己捆死。未必见得,凡事都得按部就班,有时候乱拳打死老师傅,反而能蹚出一条路。
合上书,外头天早就黑透了。电脑屏幕上的光标还在那儿一明一灭,跟个不知疲倦的催命符似的。我突然琢磨过味儿来,编程逻辑和设计,扒到最后,不过是教人怎么跟乱成一锅粥的日子和解。没必要非逼着每一行代码都敲对,也别强求所有输入都乖乖听话。碰到跑不通的死胡同,就设个断点,起身喝口热水,看看现在的自己到底搁在什么状态上。变量还在变,程序还得接着跑。不过下次,我估计会记得先踩一脚刹车。