凌晨两点。IDE里的红字报错,跟催命符似的。又是漏分号。或者括号没配对。这事儿碰上一两次,我还能骂两句编译器;连撞三次呢?我就真开始怀疑自己,是不是连个main函数都写不利索了。干脆不跟屏幕瞪眼了。从抽屉最里头,扒拉出李飞的《C程序设计与实例教程》。这书挺实在。没整那些“七天精通”的噱头。第一章起头就是硬骨头,语法规则掰开揉碎,全往纸上排。刚开始啃的时候,什么感觉?跟新手村硬刚满级怪差不多。磕磕绊绊。但硬着头皮蹬下去,突然某天,脑子里就“咔哒”一下,通了。
翻开来,排版确实干净。字句也收着。全书就九章。不拖泥带水。每块语法讲完,紧跟着就是能直接make跑的完整代码。底下再配两道练习题。答案?全摞在书后头。说实话,刚上手那阵子我直犯嘀咕:没整那些花里胡哨的UI框架。案例也土。满篇就是基础数据类型、指针、for循环。耐着性子往下翻吧。心里倒渐渐定了神。作者可能也没打算哄着你速成。就是让你先摸清这些基础变量的脾气。C语言这玩意儿,说白了就是认死理。你错敲一个标点,编译器立马给你甩脸色。程序直接罢工。可偏偏是这种“不惯着人”,硬逼着你把脑子里的乱麻,一点点理顺。我觉得吧,现在太多人写代码靠猜。缺的就是这种死磕标点的狠劲。
键盘敲得劈啪啪。跟翻书声搅在一块儿,居然挺对味儿。书上的代码是死的。你盯着看的时候,脑子里得替它把每一行指令,过一遍。最让我较劲的,是书后头那堆习题答案。搁以前?我肯定三秒翻到底,能抄则抄。这回我咬着牙。死磕屏幕上的报错。变量到底初始化没?指针是不是手滑越界了?只能顺着执行路径,一行行往下捋。有时候盯着一个segfault能盯出半小时。指尖蹭着鼠标垫,发凉。突然在内存分配那儿摸到门道,“咔哒”一下,跑通了。那一瞬间的爽。真不是直接抄答案能比的。书里那些干巴巴的循环和分支,说白了就是磨性子。咱们现在都太急。恨不得敲完代码,立马看到跑马灯结果。却忘了代码跑不通的这阵子,早就把咱们的逻辑神经给练出来了。这事儿大概就是这么个意思。慢,就是快。
封底印着“C语言是其他高级语言的基础”。我一开始也就扫了一眼。当它是出版社的固定文案。可书合上,脑子里过一遍,还真就那回事。咱们现在天天追新框架、赶技术风口。总觉得换个新玩意儿,就能一键解决所有bug。但这书硬是把指针、内存分配、资源管理这些被高级语言捂得严严实实的细节,全给扒出来了。你一旦自己手动去管这些细节,立马就懂什么叫“用控制换自由”。代码看着随心所欲,其实全在规则里跳舞。就像我以前自己拼宜家柜子。说明书上那些不起眼的六角扳手和偏心轮。装反一个,或者漏拧两圈,整个架子立马歪七扭八。规矩这东西,看着勒人。其实是托着你不往下掉的。不过话说回来。这话可能只对纯技术路线的人管用。你要是做业务开发,天天赶进度。指望靠C语言打底去优化底层?那确实有点杀鸡用牛刀的意思。未必划算。
平心而论。这书也有让人皱眉的地方。案例确实旧了点。现在谁还天天敲控制台啊?习惯了VS Code和智能提示的,刚翻它肯定觉得手冷。中间几章的练习题,难度跳得有点猛。卡得人直挠头。不过转念一想。它不跟你玩那些花活。反倒干净。它不打算哄着你速成。就把最硬的骨架往你面前一摆。剩下的筋肉,得你自己长。学东西本来就是个熬字。不把这些枯燥的段落啃下来,根本碰不到后面那些真正有意思的底层逻辑。
盯着屏幕看了半天。那行hello总算是乖乖跑出来了。光标还在原处闪。跟平时没两样。我顺手把编辑器关了。屋里这才暗下来。这书没灌什么大道理。就是让我看清了一件事:那些安安静静躺在那儿的代码字符,底下全是一套严丝合缝的规矩。跟这套规矩处熟了,心里反而踏实。明天保不齐又得跟新报错死磕。不过没事。再去检查一遍分号就行。