书架底下常年躺着几本翻完就忘的闲书。但《Delphi程序设计实例教程》?不行。这书你得供着,得拿砂纸一点点打磨。封面灰不拉几的,连个亮色都没有。翻开更绝,没有那些虚头巴脑的宏大叙事。全是对齐的组件属性、拖拽路径,还有那些必须一字不落敲进去的Object Pascal代码。刚抱回家那会儿,我连目录都没翻利索。没办法,手头项目突然卡壳,非用不可,只能硬着头皮上。
头两章?直接给我干懵了。可视化窗体、主菜单、工具栏、状态栏……名词跟不要钱似的砸过来。味儿太熟,跟我大学里死活听不进去的公共课一模一样。但我没扔。耐着性子,把第一个按钮拖进去。双击。敲两行。F9。屏幕“叮”一声,蹦出个对话框。就那一秒。心里头那点虚浮的劲儿,突然就落定了。代码哪是冷冰冰的字符啊。它就是张便条。你写清楚要干嘛,它就老老实实给你办。说啥你干啥,这份死心眼儿的确定性,搁现在,简直是救命稻草。后来翻到多文档界面。我硬是没看后面的答案。自己又瞎捣鼓了好几回。子窗口叠在一起,拖拽,缩放,切来切去。看着它们跟老抽屉似的严丝合缝地开合,我突然愣了神。咱们这帮人,脑子每天被推送和消息塞成垃圾堆了,是不是就缺这么个死规矩的盒子?能装东西,也能把乱麻理顺。
好日子没撑过三天。动态对象和数据库编程那节,我实打实卡死了一个下午。屏幕红成一片。内存访问冲突。书里的示例代码跑起来也跟我死磕,啪,直接闪退。憋屈。真憋屈。盯着屏幕,机箱风扇呼哧呼哧喘着粗气,我突然悟了。写代码跟蒙眼修桥是一码事。逻辑断了?没准是变量没初始化。路径踩空?搞不好是权限没开。书里那句“每章的程序实例既考虑了典型性,又兼顾了趣味性”,我是熬到后半夜才咂摸出味儿。人家压根没想教你一路平推。只教你怎么在报错的烂摊子里扒出口。它逼着你慢下来,去听每一行代码底下的动静。到后面图形图像处理那章,非让用代码画几何图形。我调了三四回。坐标轴死活对不上。最后扒拉半天,发现就少敲了一个负号。就一个负号。图形“嗖”一下飞出屏幕外。现在想起来,后背还冒冷汗。机器不跟你绕弯子。错就是错。找什么借口呢?
这手感,让我想起刚上班那会儿。硬着头皮接了个没人敢碰的旧项目。逻辑乱成一锅粥。注释干净得能照镜子。我只能一个个打断点,一点点往上搭。当时烦啊。脑子里反反复复就一个念头:删库,跑路,重来。现在回头看,那些跟机器死磕的深夜,哪是在修bug。分明是逼着自己把烂摊子拆成零件。过日子,不也这么回事?谁不想一步到位?直接端出个成品。可真正能立得住的东西,哪次不是靠一次次异常处理兜着底?靠耐心,把碎片一块块拼起来。书里教的虽然是Delphi。骨子里透出来的,是一种笨功夫。不整语法糖。就死磕组件怎么咬合,数据怎么过管道。这“老实人”的编程路子,未必适合所有人。但搁我这儿,真比那些飘在天上的新框架踏实多了。
总有人嘀咕:Delphi都进博物馆了,现在谁还学?这话我不反驳。技术迭代快得像坐火箭。今天的神坛顶流,明天可能就直接进冷宫。但我真不吃“过时就没价值”这一套。窗体跟逻辑怎么拆。组件化设计怎么跑。这些底子都没跑。它们只是换了身行头,悄悄藏进现在的框架里了。啃这本书,真不是学一门语言。是看老法师怎么用刨子推平木头,怎么把榫卯严丝合缝地对上。不教你赶时髦。只教你怎么把根扎进土里。步子慢点,结构反而看得更真切。我也不指望靠它跳槽涨薪。纯粹拿它当块磨刀石。
合上书,推开门。外头早就黑透了。屏幕还亮着。光标在空白处,一下,一下,地闪。我突然觉得,敲代码也好,啃书也罢。说白了,就是跟时间较劲。咱们敲下的每一行字,都是在跟这个世界递话:我在这儿。我理顺了。我还能再试一次。程序跑不跑得通。代码过不过时。先放一边。能坐得住,把那个小小的、带着毛边的东西,一点点调顺。就值了。不图什么大动静。图个心里踏实。