如果AI已经能写CRUD、补测试、改Bug、做性能分析,那 .NET 程序员还剩什么价值?
这段时间,我越来越强烈地感觉到:真正容易被替代的,不是不会用AI的人,而是只停留在框架表层、只能描述需求、不能解释原理的人。因此,AI越强,程序员越要把价值建立在“理解原理、做出判断”上。
所以在AI狂飙的时代,我反而更想劝你向下扎根。
这里说的“向下扎根”,不是回到石器时代自己造轮子,不是手写ORM、自己实现GC、自己造Web框架。恰恰相反,今天的 .NET 生态已经足够强大:高性能运行时、成熟标准库、完善诊断工具、强大的云原生支持,很多基础设施根本不需要重复发明。
但你至少要知道,这些轮子是怎么工作的。因为只有理解原理,你才知道什么时候该用,什么时候不能乱用,什么时候值得优化,什么时候应该接受现状。说到底,AI能帮你生成答案,但很难替你承担判断。
一、AI最擅长的,是“从已知到已知”
今天的AI它能生成高质量的C#代码,能补全接口实现,能写单元测试,能指出常见性能问题,也能给出像模像样的架构建议。对于大量标准化开发工作,它的效率已经超过很多普通程序员。
但真实世界并不总是标准题。
业务系统里最难的部分,往往不是“怎么写一段能运行的代码”,而是:
- 为什么这个接口的延迟必须控制在10ms,而不是100ms
- 为什么这个地方宁可多写几十行代码,也要少一次分配
- 为什么同样一段代码,在Windows上没问题,到了Linux容器里就开始抖
- 为什么同样是异步代码,有的项目会死锁,有的项目却不会
- 为什么AI给出的方案看起来都对,但真正上线会出事
这些问题,靠的不是“会不会调API”,而是你能不能从现象回到原理,再从原理推回方案。这才是我理解的程序员壁垒。
二、真正的差距,不是会不会用框架,而是能不能解释框架
AI可以帮你写Controller、写EF Core查询、搭接口,甚至顺手把DTO、异常处理中间件、Swagger一并补齐。
但只会“把框架用起来”,正在快速失去稀缺性。真正能拉开差距的,是你能不能解释这些东西背后的运行机制。
以性能优化为例。AI完全可以给你一套“看起来很合理”的建议,但在 .NET 里,很多性能问题并不发生在表层代码,而是发生在运行时行为上:
- 这些对象为什么会频繁进入Gen2
- 这里为什么会有额外装箱
- 这个struct为什么一改反而更慢
- 这段代码为什么明明没什么逻辑,GC却很重
- 为什么Span<T>在这里有意义,在另一个地方却只是让代码更难读
AI往往能给你一个“通用最优解”,但业务真正需要的,常常是“特定约束下的最优解”,中间差的就是判断力。而判断力,不来自背API,来自你对底层模型的理解。
三、底层原理最大的价值,是让你拥有判断力
很多人一听“学底层”,就以为是在鼓吹“造轮子”。其实完全不是。
学底层,真正的意义是:你开始知道问题到底发生在哪一层。
比如同样是接口慢,可能是:
- 数据库查询慢
- 线程池饥饿
- GC暂停
- 频繁分配导致延迟抖动
- 锁竞争
- 跨平台环境下系统调用行为不同
如果你对运行时、线程模型、内存分配、异步机制完全没感觉,那你看到的永远只是“接口慢了”。
但如果你理解底层,你会继续往下问:
- 慢在哪个阶段
- 是CPU忙,还是线程在等I/O
- 是堆分配太多,还是对象生命周期设计不合理
- 是代码逻辑问题,还是运行时行为问题
- 是框架bug,还是自己误用了框架
底层原理的价值,不是让你会更多知识点,而是让你具备拆解问题的能力。
四、AI可以给建议,但生产问题最后还是你来扛
平时开发时,AI很好用。它能告诉你某段代码可能有死锁风险,某个LINQ查询可能有性能问题,某个循环里可能有多余分配。
但到了真实生产环境,问题往往没那么“教科书”。
你可能遇到的是:
- 某个服务CPU持续飙高,但代码层面看不出热点
- 某次发布后内存持续上涨,几个小时后才出现OOM
- 某个接口偶发超时,只在高并发和特定数据量下复现
- 同样的服务在本地没问题,上了Linux容器却出现诡异异常
- 某段异步代码在测试环境稳定,到了生产偶尔卡死
这时候,真正决定你上限的,已经不是“会不会写代码”,而是:
- 你会不会看dump
- 你知不知道线程池、GC、异步状态机是怎么运作的
- 你能不能从症状一路定位到根因
- 你能不能判断AI给出的解释到底靠不靠谱
AI可以辅助分析,但最终承担结果的还是人。尤其在断网、内网、涉密、受限环境里,很多时候你甚至没有AI可用。那一刻,能救你的只有你脑子里真正理解过的东西。
五、AI时代,第一性原理比“知道答案”更重要
我越来越觉得,AI会让“知道答案”这件事越来越不值钱。因为只要是公开知识、标准套路、常见解法,AI迟早都会越来越擅长。
真正拉开差距的,是你能不能从第一性原理思考。
不是记住“异步死锁了就加ConfigureAwait(false)”,而是知道:
- await默认会不会捕获上下文
- SynchronizationContext本质上是什么
- 为什么.Result和.Wait()容易把调用线程卡死
- 为什么ASP.NET Core里和桌面UI程序里的语义又不完全一样
也不是记住“循环里拼字符串用StringBuilder”,而是知道:
- 字符串为什么不可变
- +为什么会产生额外分配
- 为什么拼接次数很少时,StringBuilder反而不一定划算
- 什么时候该优化,什么时候根本不值得动
第一性原理的价值在于:它让你不是在“套答案”,而是在“推答案”。AI擅长从已有模式里生成候选解,而你真正不可替代的地方,是在陌生场景里重新建模、重新判断、重新取舍。
六、.NET是最值得“向下扎根”的生态之一
为什么我会特别拿.NET来说这件事?因为.NET很特殊。它既有很高的开发效率,又没有把你彻底锁死在“只能写业务”的层面。
你往下走,可以一路碰到这些真实且有价值的能力边界:
- 内存分配、GC、对象生命周期
- Span<T>、Memory<T>、ArrayPool<T>
- struct和class的成本差异
- JIT、AOT、Source Generator
- 异步状态机、线程池、调度模型
- epoll、IOCP、P/Invoke、原生互操作
- dump、trace、性能分析、线上诊断
这些东西,平时你不用天天碰;但一旦碰到,它们往往直接决定你能不能从“会写代码的人”跨到“能解决复杂问题的人”。说白了,CRUD交给AI,大家都能做。真正稀缺的,是把系统推到边界时还能稳住的人。
七、向下扎根,不是为了显得硬核,而是为了把选择权握在自己手里
我并不反对AI。相反,我自己也越来越依赖AI。它是极强的副驾驶,是高质量的执行器,是效率放大器。
但越是这样,我越觉得程序员最应该补的,不是“怎么让AI多写一点代码”,而是“怎么让自己变成那个能提出正确问题、验证正确答案、做出正确取舍的人”。
因为真正重要的,从来不是“会不会写”,而是:
- 为什么这样写
- 什么时候该这样写
- 什么时候不该这样写
- 出问题时该从哪一层开始查
- 有多个正确答案时,为什么选这一种
这些能力,才决定了你在AI时代是“被放大”,还是“被替代”。
写在最后
如果你问我,在AI时代最值得补的东西是什么,我的答案不是某个新框架,不是某个MCP,不是某个自动化工作流。而是向下扎根。
去理解运行时,理解内存,理解线程,理解异步,理解系统调用,理解那些平时藏在框架背后的原理。不是为了自己造轮子,而是为了在需要的时候,知道轮子为什么会转,什么时候会打滑,什么时候应该换一套传动系统。
AI会越来越强,这几乎是确定的。但也正因为如此,程序员真正的价值会越来越集中到一件事上:你是否拥有穿透表象、回到原理、再做出判断的能力。
这,才是属于自己的护城河。
共勉。
如果你想深入探讨这些话题,或寻找更多技术资料,可以到云栈社区交流。