当人人都在追 AI,为什么还有人认真写一本 C 语言小书?

开发工具 2026年3月27日
《The Little Book of C》上线,看上去像是一份朴素的入门教程,实际上却踩中了今天技术教育最稀缺的部分:让人重新理解计算机究竟是怎么工作的。在 AI 编程助手越来越强、软件开发越来越“自动挡”的当下,C 语言这门“手动挡”老语言,反而显得格外重要。

一本看起来很“小”的书,碰到了一个很大的时代问题

最近,一本名为《The Little Book of C》的在线小书悄悄上线。它的野心并不夸张:从安装 gcc、clang、tinycc 开始,教读者写下第一个 Hello, world!,然后一步步讲清楚 C 程序的结构、头文件与预处理、编译与链接这些基础概念。目录也很老派,甚至可以说“朴素”——没有炫目的框架,没有“七天速成高性能系统编程”的口号,就是一章章把最底层的东西掰开来讲。

但也正因为这种朴素,它反而显得有些稀缺。

今天的技术世界很热闹。AI 会补全代码,低代码平台在兜售“不会编程也能做产品”,云服务把底层细节包装得越来越平滑。很多新开发者写出第一个能跑的程序,比十年前容易得多;可与此同时,真正理解“程序为什么能跑”的人,未必变多了。你知道怎么调用 API,不等于你知道编译器做了什么;你会写 Python 或 JavaScript,也不一定真的明白内存、链接、目标文件这些词背后的重量。某种意义上,这本小书重新提醒了我们:计算机教育不能只教人踩油门,也得告诉你发动机长什么样。

C 语言从没离开,只是退到了聚光灯外

很多人第一次学编程时,都会听到一句近乎陈词滥调的话:C 是“古老但重要”的语言。问题是,这句话说久了,反而容易被听成“重要归重要,但平时用不上”。《The Little Book of C》做的一件对的事,是没有把 C 神化成某种程序员的朝圣仪式,而是非常直接地告诉读者:Linux、Git、数据库、编译器、Python 解释器,乃至浏览器的一部分核心,今天仍然建立在 C 之上。

这不是情怀,而是现实。你刷短视频、下单外卖、跑大模型训练任务,背后绕不开操作系统、运行时、驱动、网络协议栈和各种基础库。它们未必全部用 C 写成,但 C 仍然是这套技术地基里的关键材料。就像城市里大家都盯着新开的玻璃幕墙写字楼,没人会天天夸地下的钢筋混凝土,可真要没有它,地面上的繁华也站不住。

更有意思的是,在 Rust 崛起、Go 普及、Zig 被热议的当下,C 的位置并没有消失,反而变得更像一把“参照尺”。Rust 为什么强调内存安全?因为大家太清楚 C 世界里悬空指针、缓冲区溢出、未定义行为这些问题有多真实。Go 为什么把构建流程尽量简化?因为 C 时代的编译、链接、依赖管理曾经让无数人痛并成长。新语言在定义自己时,常常都得先回答一个问题:我们比 C 好在哪里?这恰恰说明,C 仍然是那个绕不过去的原点。

它教的不只是语法,而是一种“看见机器”的能力

这本书最有价值的部分,不是教你打印一句 “Hello, world!”,而是借这句老掉牙的话,把“编译—链接—执行”整个链条重新拉回眼前。对于已经习惯 IDE 一键运行、云端自动部署的开发者来说,这种透明感其实挺奢侈的。

在书里,作者会明确告诉你:#include <stdio.h> 不是魔法,而是预处理器在工作;printf 能正常调用,不是理所当然,而是因为头文件提供了声明,链接器又把你的代码和标准库接到了一起;你敲下 gcc -c hello.c -o hello.o 生成目标文件,再执行链接命令得到可执行文件,这中间每一步都不是黑箱。这些内容放在 2025 年看,甚至有点“逆潮流”——因为主流工具链越来越努力地把复杂性藏起来,而这本书却在认真把它们重新亮出来。

这也是 C 语言最残酷、也最迷人的地方。它不像很多现代语言那样给你厚厚的缓冲垫。内存要自己管,边界要自己守,错误可能不会立刻爆炸,而是会在某个夜深人静的时刻给你一记回马枪。它很不体贴,但它逼着你养成精确思考的习惯。你会开始尊重类型、尊重警告、尊重每一次分配与释放。说得夸张一点,学 C 像在学驾驶手动挡:上手难,熄火多,坡起时很容易怀疑人生,但一旦真摸懂了离合、挡位和机械反馈,再去开自动挡,你对车的理解会完全不同。

从教育角度看,这种能力尤其珍贵。AI 代码助手可以替你生成函数,却替代不了你判断一个 bug 究竟出在编译阶段、链接阶段还是运行时;它可以帮你写头文件模板,却不能代替你真正理解 ABI、库依赖和二进制兼容性。未来的软件工程师当然未必人人都要长期写 C,但如果一个人从来没见过程序最朴素的样子,他对“软件”这件事的理解,大概率会停留在表层。

在 AI 编程时代,基础教育反而更需要“慢一点”

《The Little Book of C》出现的时间点很微妙。过去两年,关于“AI 是否会让编程门槛消失”的讨论几乎铺天盖地。现实情况是,门槛确实在下降,但能力结构也在悄悄变化。越来越多人能快速产出代码片段,却未必知道这些代码为什么工作、什么时候会失效。软件开发正在被重新分层:会“拼装”应用的人变多了,但能理解系统边界、性能瓶颈和底层机制的人,仍然稀缺。

这就让 C 这样的基础教材重新有了意义。它不是为了和 AI 抢速度,而是为了补回速度带来的认知空洞。你可以把它理解成技术教育里的“抗漂浮训练”。当一切都越来越高层、越来越封装,学习一门贴近机器的语言,某种程度上是在给自己的知识体系加配重。

当然,争议也很真实。今天还要不要让初学者先学 C?这是个很容易吵起来的问题。支持者会说,C 能建立扎实的计算机观;反对者会说,它对新手太不友好,内存管理、编译环境和语法细节会迅速劝退一大批人。我的看法更接近中间地带:不是所有人都必须“从 C 开始”,但任何想认真理解计算机的人,都应该在某个阶段“回到 C 一次”。它未必是最好的第一门语言,却很可能是最重要的那门补课语言。

而从这本书的写法看,它显然也意识到了这一点。它没有把 C 写成一门高高在上的“硬核信仰”,而是尽量用可操作、可实验的方式引导读者,比如故意删掉分号看看编译器如何报错,或者拆分源文件来理解声明、定义和链接的区别。这种写法很像一个经验老到的老师在旁边说:别怕,先把它弄坏,你就知道它是怎么工作的了。对技术学习来说,这种鼓励试错的态度,比灌输概念更有效。

一本小书的真正价值,也许在书外

如果只看内容,《The Little Book of C》讲的并不新鲜。K&R 时代留下来的经典教材,大学里的计算机基础课程,网上海量的 C 教程,早就把这些知识讲过无数遍了。可它依然有意义,因为今天缺的未必是知识点本身,而是把知识点重新放回技术现实中的能力。

过去很长一段时间,技术教育有两个极端:一边是追求快速就业的“工具课”,教你怎么上手某个框架;另一边是过于学院化的教材,内容正确但距离真实开发场景太远。像这本小书这样,从编译器安装、命令行、头文件、预处理、目标文件一路讲到构建流程,再延伸到调试、性能分析、可移植性和真实项目,反而像是在两者之间搭了座桥。它不是让你背语法,而是让你建立“程序是如何从文本变成软件”的完整心智模型。

这件事的外溢价值可能比一本教程本身更大。今天无论是做 AI 系统、云计算平台、数据库内核,还是写浏览器引擎、嵌入式固件,行业都在重新呼唤“懂底层的人”。不是因为大家突然怀旧,而是因为当系统变得越来越复杂,任何性能问题、稳定性问题和安全问题,最后都得有人能一路钻到地基里去查。C 不一定是最终答案,但它依然是通往答案的重要入口。

如果你已经是老程序员,这本书大概会让你想起第一次被 linker error 支配的恐惧;如果你是新手,它也许会让你第一次真切看到,原来屏幕上的一行代码,背后站着的是整个计算机系统。说到底,这不是一本只教“怎么写 C”的书,它更像是在提醒一个被 AI 和框架层层包裹的行业:别忘了,软件最终还是要落到机器上运行的。谁更理解这件事,谁就更有机会在下一轮技术浪潮里站稳脚跟。

延伸来看,这类“回到底层”的学习路径,未来很可能会和 Rust、WebAssembly、LLVM 这些话题重新交汇。因为理解 C,不只是理解一门语言,也是理解现代软件世界为什么会长成今天这个样子。
Summary: 我对《The Little Book of C》的判断是:它不是一款会刷屏的“明星产品”,却很可能是一份被低估的技术教育样本。未来几年,AI 会继续降低写代码的门槛,但真正稀缺的,将是理解代码、系统和机器关系的人。C 语言不会重新成为大众开发主角,却会继续作为工程师认知升级的关键入口。这样的基础教材,恐怕只会越来越重要。
C语言编译与链接The Little Book of C技术教育编译器计算机基础gccclangtinyccAI编程助手