凌晨两点半。屏幕上的报错红字还在往上蹦,跟抽风似的。内存泄漏跟泥鳅一样,滑不留手。后颈酸得直响。算了,键盘一推。抽屉里乱翻一通,摸出个硬壳子。《C程序设计题解》。纸页脆得掉渣,封皮卷成了波浪。
刚抽出来,心里直犯嘀咕:这玩意儿现在还能顶用?确实是2004年那套教材的配套练习。实打实塞了260多道习题,外加6套附加题。排版是真土。留白?不存在的。密密麻麻的代码,配着解题步骤。戴上眼镜,硬着头皮往下对。嘿。脑子没那么僵了。看那些 for 循环,看指针跳转。绷紧的那根弦,呼啦一下,松了。慢点走。反而能看清东西。
书里有一道拿字符拼图形的题。乍一看挺小儿科。上手就翻车。指针偏移一位,画面直接错位;数组边界没卡死,程序当场原地崩溃。盯着屏幕上那堆乱码。脑子里“嗡”一下。全是大一刚碰C语言那会儿的惨痛记忆。为了调顺一个 printf 的输出格式,我能跟一台老掉牙的台式机耗到闭馆。那时候觉得,代码嘛,逻辑通了随便跑。现在呢?机器可不吃这一套。少个分号、缩进错一格,立马给你甩个脸色。这书里的解法,说白了就是教你怎么跟这种“死脑筋”和解。别总想着走捷径。老老实实在框框里把路蹚出来。
说到底,咱们平时踩的坑,十有八九都栽在“差不多就行”这四个字上。总想抄近道。基础逻辑能省则省。但这书里那些反复推敲的算法、对边界条件死磕到底的劲儿,倒是在敲警钟。很多事儿,未必快就是好。它讲结构体嵌套,非得一步步拆、一步步映射。生活里的那些死结,大概也得这么一层层往外抠。前阵子跟团队推个项目。大家都急着要上线。底层流程其实连个毛都没理顺。结果呢?返工返到想砸电脑。到这时候才咂摸过味儿。书里反复强调的“程序阅读能力”,压根不只是认字符。是一种干活的底层逻辑。脉络没理清,手真别急着往键盘上放。这话放在现在这快节奏的职场里,可能有点理想主义。但道理是死的。慢工出细活这词儿,什么时候听都不嫌老。
不过得说实话,这书确实带着明显的年代烙印。字符屏幕和图形函数的习题,放到现在的IDE里,确实有点水土不服。部分解法也偏传统。不够利索,甚至有点啰嗦。但我偏偏吃这种“笨功夫”。眼下太多教程天天喊着“三天精通”“一键生成”。把最枯燥的底层逻辑全给跳过了。美其名曰“敏捷开发”。你要是不清楚内存到底是怎么分配的、指针是怎么一块一块指向下一块地址的,敲出来的东西能不出bug才怪。话可能说得有点老气横秋。但在这什么都赶快的节骨眼上。肯静下心来啃一道题、琢磨每一行代码为什么长这样。未必是效率低。反而可能是一种稀缺的奢侈。地基打不牢。楼盖得再快,风一吹也得晃。
搁下书。外头天光都泛白了。屏幕那个内存泄漏总算给揪出来了。原因简单得让人想笑——就一个忘记初始化的变量。没急着点运行测试。盯着满屏的代码发了会儿呆。冷冰冰的字符好像没那么扎眼了。倒像极了那些在报错里反复横跳、最后一点点亮起来的念头。过日子其实也差不多。谁还没个跑不通的时候?允许报错。允许推倒重来。在 0 和 1 之间多耗点功夫。这事儿大概还真挺值的。