说一句可能会得罪很多人的话:今天大多数开发者其实并不知道计算机是怎么工作的。
他们能做应用,能交付功能,能拿到不错的薪水。但问他们底层到底发生了什么?一脸茫然。
这不完全是他们的错。现代开发的设计初衷就是隐藏复杂性。框架包办一切,云平台处理基础设施,AI写一半代码。你可以做出一个完整的SaaS产品,却从未思考过内存、指针,或者CPU到底在干什么。
但问题来了:这正在制造两类开发者。一类人通过组装预制件来构建产品,另一类人真正理解这些组件如何运作。这两个群体之间的鸿沟每天都在加深。而唯一还牢牢站在第二阵营的,是C程序员。
问一个典型的Web开发者他的应用怎么运行。他会告诉你:React前端、Node后端、MongoDB数据库、部署在Vercel。很好。现在问他用户点击登录按钮时到底发生了什么。
HTTP请求如何变成网络上的数据包?Node的事件循环在操作系统层面如何工作?MongoDB如何在数百万文档中找到正确的那一条?JSON解析时内存里发生了什么?
大多数开发者不知道,也不需要知道。技术栈把一切都藏起来了。对90%的工作来说这没问题。直到某个诡异的bug出现,直到应用莫名其妙变慢,直到生产环境崩溃而没人知道原因。
然后他们就卡住了。因为他们从未学过底层是什么。
C程序员没有这个问题。写C的时候,你无法回避细节。你自己分配内存,管理指针,直接调用系统函数。没有框架替你隐藏复杂性。你能看到计算机正在做的每一件事。
AI现在能写出相当不错的代码。ChatGPT、Copilot、Claude确实有用。它们能搭建应用骨架,写API端点,甚至解决算法问题。
但AI绝对做不到的是:它无法感知一个程序在运行数小时后正在缓慢泄漏内存;它无法预感一个指针即将导致崩溃;它无法本能地知道某个算法会破坏CPU缓存从而拖垮性能。
这些不是从语法或文档中学来的。这些来自经验。来自因为释放内存顺序错误而调试六小时。来自看着程序因为数据结构不适合缓存而爬行。来自被坑过足够多次后形成的直觉。
AI没有直觉。它在数百万代码样本上做模式匹配,但它不理解为什么在特定硬件环境下某种方法比另一种更好。
一个优秀的C程序员会思考:栈分配还是堆分配?内存对齐和填充?缓存局部性?系统调用开销?什么时候复制比间接引用更划算?
这才是工程,不只是编码。
让我们直面现实:那些真正支撑互联网运转的东西是什么?
你漂亮的React仪表盘?是的,那是JavaScript。你流畅的移动应用?Swift或Kotlin。你的AI聊天机器人?Python。
但那些必须在大规模下可靠运行的东西呢?每秒处理数百万查询的数据库?C或C++。Netflix和YouTube的视频编码?C。搜索引擎?C++。运行大部分云服务的Linux内核?C。Redis、Nginx、Postgres、MySQL?全是C。运行你AI模型的Python解释器?用C写的。
看到规律了吗?用户界面用高级语言构建,因为开发速度重要。但核心基础设施,那些需要快速、高效、坚如磐石的部分,都是C。
在大规模场景下,毫秒和兆字节都很重要。每一点浪费的CPU都是钱,每一个多余的内存字节都是钱。当你每天处理数十亿请求时,不能简单地“加服务器解决”。你需要紧凑、可预测、高效的代码。
华丽的框架在社交媒体上获得所有关注,但底下那些无聊的C代码才是让一切运转的东西。
有一种观点认为“所有语言都平等”,“先学什么不重要”。这是错的。语言不只是同一概念的不同语法,不同语言教你不同的思维方式。
Python教你如何写脚本和使用库,但不教你内存如何工作。JavaScript教你异步模式和DOM操作,但不教你操作系统层面发生了什么。React教你组件架构,但不教你为什么应用占用了2GB内存。
C不一样。C强迫你理解:变量到底是什么(内存中的一个地址);函数调用做了什么(栈操作);字符串真正是什么(指向字节的指针);为什么有些操作快而有些慢。
一旦你掌握了这些,其他所有语言都会豁然开朗。你不再盲目使用抽象,而是理解它们抽象掉了什么。
高级语言让你快速变得高产,C让你理解自己在做什么。理解,才是区分能跟着教程走的人和能真正构建系统的人的关键。
坦白说,今天写代码的大多数人并没有真正在做工程。他们在组装预制组件。他们不从第一性原理设计,而是选一个流行框架然后遵循模式。他们不深入解决问题,而是搜索、找到接近的东西、改改用。他们不做有依据的权衡,而是照着教程做。
对很多软件来说,这种方法没问题。你可以这样构建成功的产品,拥有稳固的职业生涯。
但当事情真正变难的时候,当性能至关重要,当你在构建基础设施,当你在调试一个StackOverflow上没人见过的问题,你需要一个理解基础原理的人。
C程序员每天都必须理解基础原理。他们不能怪框架,不能挥挥手说“运行时会处理”。他们必须确切知道正在发生什么。这使他们成为最后一批真正理解自己所编程机器的开发者。
AI正在让构建软件变得极其容易,即使你不理解自己在构建什么。这正在制造一道巨大的分界线。
一边是能够提示AI、组装组件做出可用产品的人。这个群体正在快速增长。
另一边是真正理解底层发生了什么的人。能调试不可能的问题,能优化关键系统,能在没有框架可依赖时从零设计。
第二个群体正在变小,也正在变得更有价值。
你不需要在工作中写C。但如果你从未学过内存、指针和操作系统真正如何工作,你将永远受限。你能通过遵循模式和使用工具来构建东西,但你不会真正理解自己在做什么。
在一个AI也能遵循模式的世界里,理解是唯一让你不可替代的东西。
| 通信人家园 (https://www.txrjy.com/) | Powered by C114 |