屏幕冷不丁蹦出一串红字。我盯着它,愣了半晌。凌晨两点,咖啡都凉透了,就为了揪出这一个漏网之鱼。不是逻辑多烧脑,就缺了个分号。就这一个标点,整个程序直接拍桌子罢工。压垮人的,往往不是多难的题。就是那个该死的小分号。盯着屏幕琢磨半天,有些事儿吧,真就差那么一丁点。后来翻出王桂芝老师这本《程序设计基础--C语言篇》,大概也是被那股子“非把它捋顺不可”的劲儿,硬拽着翻的。

刚摸到这本书,心里直打鼓。C语言这名字,听着就硬。满纸语法、结构、指针,我猜指不定翻到第几页,就能把人劝退。结果顺着目录往下扒,嘿,这书挺“轴”。不整虚的。也不扯什么高深算法哲学。老老实实从“变量是啥”起头,挨个带你看顺序、选择、循环,再摸到数组和指针。节奏踩得踏实。没那些飘在天上的口号,全是一行行能跑通的代码。翻到“模块化程序设计”那章,我手指头在书页上停住。书里教把大摊子拆成小函数,各管各的。我合上书咂摸,这不就是咱们对付烂摊子的笨招儿吗?事儿全堆一块儿,谁不慌?可只要你肯拿刀把它们切块,先啃能下嘴的,剩下的自然就顺了。这书“轴”就轴在这儿,不跟你扯底层架构的宏大叙事,就教你怎么把一锅乱炖,拆成能下筷子的肉片。

指针那节,作者单独拎出来讲。头回看,脑子确实卡壳。指针不装数据,只记地址。它跟个带路的一样,自己两手空空,却能把零零碎碎的东西全串起来。看到这儿,我干脆把书搁下了。咱们过日子,是不是也这样?手里死死攥着别人的期待,社会的尺子,或者某个虚头巴脑的“应该”,拼命去护着一个指向,反倒忘了自己脚底下该踩哪儿。指针自个儿没分量,指哪儿,才显出它的用处。书里解释得干脆,可这干脆底下,我总觉得还嚼出点别的味儿。说实话,这概念未必是编程的专属。有时候你越不想死死指向什么,生活反而越给你让路。

循环结构那块,我反反复复读了两遍。forwhile,看着就俩词儿,可作者拿它们去扒拉那一串乱码似的例子,直接把我拽回以前熬项目的夜。那时候我天真,以为代码头一回编译就能乖乖听话,一劳永逸。后来碰了一鼻子灰才懂,程序哪有那么顺?跑一遍,看报错,找窟窿,改代码,再跑。我当年有个项目,为了调一个内存泄漏,前后改了十七八遍,整整耗了三个通宵。书上管这叫“调试”,我觉着这词儿太客气,分明就是咱老百姓的日常。谁盼着成长是直线往上窜的?多半都是在同一个坎儿上反复摔打,直到某个半夜,突然“咔哒”一下,通了。这事儿可能未必适合所有人,毕竟不是谁都有精力去死磕一个报错,但那种死磕出来的通透,确实实在。

书里也有让我皱眉头的时候。为了图实用,个别例子确实写得太平整。比如第三章讲数组越界,书里给的测试数据就三五个,跑起来顺风顺水。可现实里的数据,哪会乖乖按格式排队?报错提示也从来不会每次都写得明明白白。我上次接了个外包,对方给的Excel表头能错一半,我对着屏幕愣是花了俩小时,才把脏数据清洗干净。代码能严丝合缝,生活却是一团乱麻。不过转念一想,作者估计也没打算教人怎么应付所有幺蛾子,就是先给你搭个最基础的架子。架子立稳了,真遇上乱七八糟的状况,你才知道手往哪儿伸。毕竟,没学过怎么握刀的人,面对一堆生肉,连下刀的角度都找不着。

搁下书,外头天已经黑透了。我没去敲一行代码,顺手把书往桌角一推。它替不了我过日子,但起码让我看清,对着那些看不见的逻辑和摸不着头脑的报错,耗着比天赋管用。下次再撞进死循环,我估计会先歇会儿,查查是不是刚一开始就踏错了门。毕竟,代码能重编译,日子还得接着跑。虽然我知道,这世上的‘bug’大概永远修不完,但至少今晚,我能睡个踏实觉。