有些东西吧,真让你卡脖子了,才晓得它有多磨人。漏个分号,或者指针忘了初始化,就能让你对着屏幕干瞪眼到半夜。你猜怎么着?去年十月搬出租屋,抽屉底翻出这套《C语言程序设计实训与考试指导》。封皮黄得都快掉渣了。掀开第一页,还是那抹扎眼的深蓝。DOS界面。瞅见它那一刻,我脑子里压根没整出什么编程大道理。全是一帧帧对着黑屏抠脑壳的晚上。还有那行改来改去,死活跑不通的代码。这事儿大概就是这么个意思:你越急,它越跟你装死。真没辙。

这书确实挺“干巴”。排版不整活儿,也不扯什么高大上的理论。就直愣愣摆出12个上机实训。目的、要求、参考程序,一项项列得跟清单似的。底下接着是密密麻麻的习题答案。再往下压,是全国计算机等级考试的笔试上机指导。翻到最后一页的附录,连Turbo C 2.0那些让人头皮发麻的错误提示,都一条条钉在那儿。头回看的时候,我嫌它死板。心想现在谁还这么教啊?可翻到“错误与提示信息”那一节。我手指头,真停住了。

它把那些熬大夜都能把人逼疯的报错,跟翻病历似的摊在桌面上。Error: 'i' undefinedWarning: statement has no effectFatal: missing ';' before '}'。搁以前,我急着找现成答案。恨不得一键清空报错。这书倒好。偏不给你走捷径。它摆明了告诉你,报错不是系统给你穿小鞋。是机器在跟你笨拙地搭话。你慢下性子啃。它吐出来的线索就越明白。我突然咂摸过味儿来。大伙儿总躲着错跑。压根没瞅见错误本身就是指路牌。不过话说回来,这话也就在学基础的时候管用。真到了搞大型项目,报错多了照样让人想砸键盘。但初学阶段,这套路子,确实能救命。

书里的路子其实简单。先立架子,再填肉。那12个实训不是瞎凑的。一级一级往上递。硬是把“不知道从哪下手”的人,拽到“知道怎么改”的地界。我早先总以为写代码得靠天降灵感。后来才摸清底细。多半时候,全靠硬扛。死磕到内存不乱窜,死磕到指针不瞎指。那行红字终于绿成运行结果的时候,你才信了。有时候为了调一个嵌套循环,能对着显示器盯出幻觉。但跑通那一瞬间。确实有种“哎哟喂,成了”的爽感。就那一秒。值了。

书里最让我没料到的是那100套上机模拟题。起初我当它们是必须一口吞下的硬骨头。啃了两天。直接放弃。后来换了个招数。不图一遍全对。专挑几道卡脖子的题。把参考程序拆开来。逐行过一遍。看循环怎么抽身。看指针怎么踩准下一个地址。日子久了。那些干巴巴的逻辑。居然踩出了节拍。好比练琴。头两遍手指头打结。弹错一个音能把自己气够呛。练熟了。肌肉自己记住了走位。连换气停顿都成了本能。这书估计也是这理儿。编程未必是天才拍脑袋。更多时候,是把笨动作重复到身体自己会动。当然。这也得看个人悟性。有些人就是能一眼看穿逻辑。咱这种普通选手。就只能靠死磕。认命吧。

说实在的,我偶尔也嫌它太“应试”。附录里的样卷和题库系统。透着股为了通关硬磨出来的刀口。读起来确实没多少营养。可转个弯想想。谁上学那会儿没蹚过几条必须过的河呢?考试也好。实训也罢。它们塞给你的未必是什么创新思维。但绝对是块磨刀石。你在上面反复磕。掉层皮。结个痂。手劲儿大了。自然能攥住更沉的家伙。书里那份实训报告样表现在看确实土了。手写填表。跑去找人盖章签字。折腾得人够呛。但就凭这种“折腾”。硬逼着你停下脚步。把刚才跑通的逻辑捋顺。不记下来。这事儿就算没真发生过。这话可能有点绝对。但复盘的习惯。确实是代码写多了养成的职业病。改不掉了。

书合上的时候。外头天已经黑透了。我想起刚摸键盘那阵子。总觉着代码是冷冰冰的机器话。离着人间烟火十万八千里。现在倒推回去看。那些在报错里打转又爬出来的功夫。跟过日子压根是一套路子。你敲下一行指令。机器回个响。不对。就改。再按回车。人生可没撤销键。只有接着往下跑。当然。生活没报错提示。全靠自己猜。这点确实比写代码难多了。太难了。

屏幕上的光标还在一格一格闪。程序终于顺了。蹦出那行早盼着的字。我咧嘴乐了下。没截图。也没往朋友圈发。顺手把键盘往旁边一推。起身去壶里抓了把茶叶。有些道。非得自己拿脚底板一寸寸碾过去。才知道哪一脚踩空了。哪一脚能站稳。这事儿大概也就只有半夜自己对着屏幕死磕过的人才懂吧。真的。