跳转至

被重新定价的工程师:软件工程这门职业的下半场

软件工程这门职业过去握着一份稳了几十年的能力清单:会哪种语言、做过多大规模、熟哪种场景,每一栏都对应着市场愿意付的一段价格。这两年这份清单开始松动了,哪一栏要付溢价、哪一栏不再付,正在重排。

这次重排不是行业冷暖那种周期波动,而是结构性的。根源不在哪个具体的公司或产品,而在前面那篇附录讲过的那条新的轨迹上,从规则化到 token 化,一旦展开,最先被传导的既不是产品形态,也不是基础设施,而是两端真正的供给方,写软件的人。

基础设施(AI 网关那一篇讲过)要沿着系统架构慢慢发展,可能需要几年时间;供给方这一层传得快得多,它直接发生在每一份 JD、每一次面试、每一次涨薪评审里。

一、职业从来不是抽象的尊严,是被市场定价的一组能力

要把这个问题讲清楚,得先把讨论的方式转换过来。

这两年关于 AI 会不会取代程序员的讨论,绕来绕去多半在讨论情绪,讨论尊严、讨论地位、讨论一个写了十几年代码的人会不会突然变得没用。这种讨论很难有结论,因为它的支点是模糊的。一个职业有没有被取代,不是一种感受,是一件可以被市场结算证明的事。

职业真正成立的方式,是市场对一组能力的稳定定价。

一个职业能长期存在,靠的不是什么本质上的尊严,而是这个职业掌握握的那组能力,在市场上同时满足三件事:稀缺、可识别、可被购买。稀缺它才有价格,可识别它才进得了招聘,可被购买它才形成得起稳定的供需。三点缺一不可。打字员这个职业在某个时代是真实存在的,能养活很多人,因为打字在那个时代同时具备这三件事;今天它没了,不是打字这件事没了,是这三点它都不沾边儿了。

软件工程师这个职业过去几十年之所以稳定上升,本质上是这三个性质都在持续强化,能写软件的人持续稀缺、写软件的能力在面试里高度可识别、整个数字化进程让购买写软件这件事的需求无穷无尽。

但能力清单本身不是天然的,它是被时代塑造出来的。

会写汇编今天反而比当年更稀缺,但它已经撑不起当年那个价位了,不是没人需要,是需要的场景大大收窄了,从主流退到了内核、嵌入式、极致性能这些少数细分领域,绝大多数业务的代码里不再需要。市场价格不是被稀缺性决定的,是被需求侧决定的。会做大型机运维在某个时代值大钱,今天不值,也是同一个道理。会做高并发系统设计前十年值大钱,今天还在值钱,但溢价在缩水,因为云厂商把这这个解决方案产品化成了一组可调用的服务,多数公司不再需要每个团队都自己维护一套,需求总量在收缩。会写前端布局在某个时代是稀缺能力,今天它对绝大多数业务来说已经是基本会用就行,这一项不是需求消失了,是供给侧门槛降下来了。每一项能力的市场价格走低,都可以分清楚是哪一种原因导致的。是需求那一边收缩了,还是供给那一边过剩了。两种机制对工程师的含义不一样,但结果一样:某项能力不再能撑起溢价。

工程师其实很清楚,每个工作了十年以上的人,都能说出一两项当年自己引以为豪、现在已经不值钱了的能力。这不是个人能力的下降,是这项能力在整体供给里的稀缺度变了。

JD 的描述,就是这种定价机制的延迟显影。

市场不会平白无故把一项能力写进 JD,写进去意味着需求在公司里已经空缺了一段时间,意味着 HR 反复跟招聘的负责人对齐过、意味着这一项已经从偶尔有用沉淀成了不可缺少。同样,市场也不会突然把一项能力从 JD 里抽掉,抽掉意味着公司已经发现这项能力不再是关键约束、意味着同等价格下这项能力的供给已经过剩。JD 的这种滞后性,反过来让它成为最诚实的观察工具。它不能预测未来,但它能告诉你一件事,什么样的能力组合,已经在过去这段时间里被市场结算过了。

结构性变化总要走过一段隐性期,才会显化在外部可见的形式上。所以 AI 会不会取代程序员这个问题问得太大,问不出有用的答案。

更精确的问法是,软件工程这门职业的能力清单,在 token 化时代会被怎么重排?什么在被市场加价、什么在被市场减价?哪些过去散落在工程师脑子里的隐性能力,会被单独抽出来、显化成一项可被支付溢价的能力?

二、规则化时代,市场为会做付了七十年溢价

要看清楚下一步要往哪去,得先看清楚过去七十年市场到底在为什么付钱。

软件工程这门职业从汇编时代算起,已经走过了七十年。这七十年里它的形态变过很多次,从穿孔卡片到分时系统到 PC 到互联网到移动到云原生到 K8s,每一次浪潮都会让一批工程师的市场价格跳一格。但如果把这些浪潮放在一起看,会发现它们底下有一条始终没变的主线:

市场一直在为会做付溢价。

这里的会做不是抽象意义上的能力,是非常具体的内容:会写某种语言,是入门门槛;在语言之上,又分两条纵深,一条叫规模,一条叫场景。

会写某种语言,是最基础的那一层。在 C 语言刚开始流行的年代,能熟练写 C 的人是稀缺品;在 Java 接管企业开发的年代,能熟练写 Java 的人能拿到溢价;在 Go 进入云原生主战场的年代,能熟练写 Go 又成了一种新的稀缺。每一门语言的兴起,都会带出一批早早搞清楚的人,这批人在那门语言成为主流之前先掌握了它,等语言铺开的时候,他们就站在了供给最稀缺的位置。

会做某种规模,是工程纵深上的稀缺。能写 Java 的人不少,但能用 Java 写出支撑千万级并发的系统的人不多;能写 Go 的人不少,但能用 Go 写出经得起线上反复迭代的服务的人不多。规模不是文档能教的,得靠真实的项目反复打磨。一个工程师在多大规模的系统里待过、处理过多严重的线上问题、扛过多复杂的演进,这些经验本身就是稀缺的供给,不可能通过短时间学习获得。

会做某种场景,是领域纵深上的稀缺。同样是写后端,做过支付的人和做过推荐的人是两种供给,前者熟悉对账、幂等、风控、合规,后者熟悉特征、召回、排序、AB 实验。这两种知识没法相互替代,市场也愿意为它们各自支付不同的溢价。每个垂直场景背后都有一整套只在这个场景里才会反复遇到的问题,能把这些问题处理利索的人,在这个场景里就有价格。

这三层稀缺加在一起,撑起了过去七十年工程师市场的整个定价机制。

这套机制有一个更深的底层假设,技术栈本身是稀缺资源,掌握技术栈的人是稀缺供给。技术栈的复杂度足够高、稳定性足够好,所以把一门技术学会、学透是值得长期投入的事情,回报也足够稳定。一个工程师把三五年时间投在某门技术栈上,市场愿意在接下来的十年里持续为这种投入付钱。

这套机制稳定运转了七十年,它塑造了整套工程师的成长路径。年轻工程师入行后被告知要把技术栈学深,过几年要把规模做大,要把场景做熟,一条清晰的、可被规划的、可被复制的成长曲线。它也塑造了整个行业的人才识别方式。简历上写哪些技术栈、做过多大规模的项目、处理过哪些场景,是面试官第一眼就要看的东西。它甚至塑造了我们对资深这个词的理解,一个资深工程师,差不多就等于做过的事情比别人多的人。资深 = 做过很多,这两个概念在过去七十年里几乎可以划等号。

这跟前面那篇附录讲的软件吃掉世界的一半是同一个轴上的道理,软件吃下的那一半世界,需要的全是会做。能拆成步骤、能定义状态、能写成规则的世界,需要的就是会把这些步骤、状态、规则真的写出来的人。市场为这种会做付溢价,付得心甘情愿,因为没有别的供给方式。

这套机制运转得太稳定,以至于我们这些在里面跑的人,已经很难想象它有一天会失效。

三、token 化时代,会做的稀缺性正在结构性下降

说程序员要被取代是不准确的,也不真诚,它把一件复杂的结构变化,简化成了一句容易吸引眼球的话。但也不能回避它,会做的稀缺性确实在结构性地下降,这发生在每个工程师的日常。

会做第一次不再是稀缺品。

过去技术栈是稀缺资源,学一门要花时间、要踩坑、要有项目支撑、要在真实工程里反复磨。这种稀缺性是物理意义上的稀缺,它依赖人的学习时间,而人的学习时间是有限的、不可压缩的。一年只能学会一门主流技术栈、十年才能熟练驾驭多门主流技术栈,这件事是供给侧的硬约束。市场之所以愿意为掌握技术栈的人付溢价,正是因为这个约束。

今天 LLM 让会做的供给方式变了。它能在多数主流技术栈上写出能用的代码,写法干净、风格规整、覆盖常见模式。一个从来没写过 Go 的工程师,借助 LLM 能在很短的时间里写出过得去的 Go 代码。一个从来没用过某个框架的人,借助 LLM 能在不长的时间里把这个框架的常见用法跑起来。这些事情过去都得靠投入时间学会,今天可以靠调用 token绕过去。

这不是说人不需要学习了,也不是说 LLM 写出的代码就一定够用,很多时候它写出的东西只能算能跑,离能在线上长期运行还差很远。但它确实让会做这件事的供给曲线变平了。过去的供给依赖人的学习时间,现在变成只要愿意花钱,几乎任意主流技术栈的会做都能被买到。供给曲线一变平,稀缺性就开始往下走,市场愿意为它支付的溢价就开始缩水。

它的影响不是均匀的。

技术栈本身越通用、越主流、越文档完备,受影响越深,因为 LLM 在这些技术栈上的训练语料最丰富,写出的代码也最像样。技术栈本身越冷门、越闭源、越依赖经验沉淀,受影响越浅,因为 LLM 在这些技术栈上能学到的东西不多。所以这场变化不会一夜发生,它会沿着这条梯度,一层一层慢慢往里传。从外圈进入到深圈,可能要好几年,但方向是稳定的。

更微妙的是,写代码的能力可以被外包给 token,但判断产出的能力不能。

这意味着,会做这件事的贬值,并不等于程序员价值的贬值。它只意味着程序员价值清单里会做的能力开始缩水,而其他能力同时在升值。但市场需要时间反馈这个事实,从能力实际变化,到 JD 上写出新的字眼,到面试官真的按新字眼评估候选人,再到薪酬体系真的把溢价挪到新栏目上,这条传导链有它自己的节奏。

这条曲线不会以突然的方式发生。它会沿着不同技术栈、不同规模、不同行业的不同节奏,一年一年慢慢传过来。十年之后回头看,会发现今天 JD 里的某些字眼几乎已经不见了,某些今天还很陌生的字眼站到了顶上。

四、新的稀缺,是几种过去散落在工程师脑子里的能力

会做的价格缩水,但市场的总盘子没变小,它只是在重新分配。被重新分配过去的那一边,是几种过去存在但没被显式标出来的能力。

这几种能力过去都是有的,任何一个真正资深的工程师都掌握其中的一部分。但它们过去散落在日常工作里,跟会做的能力粘在一起,没有被单独命名、没有被单独招聘。今天它们正在被一项一项抽出来。

能定义清楚一项工作

第一项能力,是把一项工作定义清楚。

这在过去是隐性补全的。一个含糊的任务下发到团队里,有经验的人会自己补完,他知道这个需求背后真正想解决的是什么、知道哪些边界没有写出来、知道哪些情况要专门问清楚、知道哪些情况可以按惯例处理。这种补全完全不被记录,也不被结算,它发生在每个资深工程师的脑子里,发生在他们走到产品那边问几句话的过程里,发生在他们写代码时的若干个判断里。

LLM 进来之后,这种隐性补全开始失效。

含糊任务直接交给 LLM,它不会主动反问、不会自己去补缺、不会因为这看起来不对而停下来。它会顺着模糊往下生成,产出出一份看起来挺合理但其实偏了的产物。这在过去也偶尔发生在初级工程师身上,但他们偏离的程度有限,资深的人审一眼就能拉回来。LLM 偏离的方式不一样,它写出的代码看起来很专业,每一行单独看都没问题,但整体上跟需求差了那么一截,不仔细看根本看不出来。

所以定义工作的能力必须从隐性挪到显性。

这在书里规范驱动编程专门展开过,为什么写规范在 LLM 时代第一次变成核心工程实践,不是因为某种工程美学的偏好,而是因为执行端从人变成了一种不会主动反问的存在。规范这件事过去是非必须的,可以靠默契补;现在变成必须,必须落到文档里、落到 spec 里、落到一份可被另一种 Agent 读懂的形式里。

能稳定做这件事的人,能把一个含糊的业务需求拆成清晰的执行规范、能预见各种边界情况、能写下什么算做对,是稀缺供给。这种能力过去散落在团队里若干个有经验的人手里,每人补一点;现在它必须从分布式的隐性补全,集中成一项可被识别、可被招聘、可被支付溢价的能力。

能审 AI 产出

第二项能力,是判断 AI 产出。

这跟审代码不一样。审代码是审一段已经被人想清楚了的实现,你审的是它有没有更好的写法、有没有遗漏的边界、有没有可以重构的地方,你预设作者懂业务、懂代码、懂他自己写的东西。审 AI 产出不能这么预设。LLM 不知道你这家公司的业务约束、不知道你这条链路上下游的真实情况、不知道你过去为什么选了这个方案而不是另一个,它能写出一段看起来合理的代码,但合不合理只有审的人知道。

这种审的能力包括几件具体的内容:

能在测试都通过的情况下,判断方案站不站得住。测试只能证伪不能证真,一段 AI 写的代码所有测试都过,并不意味着它真的做对了,它可能在测试覆盖不到的地方偷偷偏了。

能在不可复现的偏差里找到根因,LLM 写的代码出问题的方式跟人写的不一样,它的偏差经常不是某一行错了,而是整体理解歪了,这种歪要靠对业务的真实理解才能识别。

能识别看起来对其实偏了的产出,这件事尤其难,要求审的人对业务有真实的判断,能看出 AI 写的某段逻辑虽然干净漂亮,但它解决的根本不是这个具体场景下的真问题。

这种能力的特殊在于,它无法被外包给同一个 LLM,你不能让一个 LLM 审自己写的东西,因为它没有这个具体业务的真实约束,它的审和它的写用的是同一个判断系统,审不出真问题。所以这件事必须由人来做。市场对这件事的发现还很早期,但方向是清楚的,它会从一项隐藏在 code review 里的副产品,慢慢变成一项可单独招聘的能力。

能为不确定性兜底

第三项能力,是为不确定性兜底。

这正在让资深这个词被重新定义。

书里讲过 Agent 失败的形态,Agent 跑起来一定会偏,问题不是怎么不偏,而是偏的时候系统能不能稳得住。也讲过 AI 工程组织学,当系统的一部分行为变成不确定的之后,组织怎么调整自己来扛住这种不确定。这两件事的共同点是,它们都需要一种在不确定性面前保持工程纪律的能力,而这种能力,过去藏在资深工程师的经验里。

资深工程师过去之所以贵,很大一部分原因是他们知道事情什么时候会出问题、为什么会出问题、出问题之后该怎么解决。这种判断过去没有被单独标出来,因为规则化系统的偏差是可定位的,出了问题查日志、看堆栈、回放一下,根因一般能找到。资深工程师的兜底能力被分散在排错、调优、重构这些日常工作里,跟做粘在一起。

token 化系统不一样,它的偏差更隐晦、更难定位。这种偏差让排错这件事的工作方式整个变了,你不再是去找哪一行错了,而是在一团迷雾里建立一种它大概是哪里偏了的判断。

这件事让兜底从一种隐性能力,变成一种被市场显性识别的能力,能给 Agent 划出失败边界、能在系统跑偏时还原那段非确定性思考的现场、能判断什么时候让人接管。这种能力过去是经验,现在被单独抽出来,成了新资深的核心。

能设计 Agent 工作链路

第四项能力,是设计 Agent 工作链路。

书里讲过单 Agent 到多 Agent 的演进。从市场视角看,这件事的对应表现是,会用某个 AI 工具不会成为 JD 里的加分项,因为它会很快变成所有人的下限;真正会被加价的,是能设计一个 Agent 工作链路、知道在哪个节点把权交还给人。前者是消费侧能力,后者是供给侧能力。

设计 Agent 链路,需要的能力清单跟会做完全是两回事。它要求的是:能拆任务、能选模型、能在关键节点设置人工审核、能预见 Agent 偏离的方式、能为偏离设计兜底。这里的每一件都不在传统工程师技能库里,传统工程师训练的是把规则写对,Agent 设计训练的是让一个会自己想一下的系统在合理边界内跑。

把这四点放在一起看,会发现一个共同方向,市场正在为那些 AI 没法替工程师完成的判断重新加价。不是判断本身突然值钱了,是判断第一次从会做里面被抽出来,单独站到了 JD 的位置上。

五、资深这个词正在被重新分类

过去资深的概念,正在被分成两层。

第一层资深是做过很多。做过的技术栈、做过的规模、做过的场景,这些东西本身的稀缺性在降。做过的技术栈,LLM 多多少少都会做,而且记忆力比人好;大的规模,云厂商把产品化之后,多数公司已经不需要每个团队都自己扛过亿级流量;独特的场景,垂直行业的知识也在被一层层卷进模型。这一层的资深性还在,但溢价在缩水。

第二层资深是判断过很多次。判断过很多次什么时候该停手、什么时候该重写、什么时候该相信测试、什么时候不能相信测试,这种判断没法被复现,也没法被外包。它需要在真实的失败和复盘里锻炼出来,需要在真实的代价和收益里反复琢磨出来,需要在真实的责任和后果里慢慢成长出来。这不能被 LLM 替代,因为它本身就不是知识,是判断。

AI 让做过很多这部分可以被替代,年轻工程师借助 LLM,能在短时间内接触到过去要积累很多年才能见到的场景。一个工作三年的人,借助 LLM 处理过的技术栈、跑过的代码量、见过的代码风格,可能比十年前一个工作十年的人还要多。做过很多的门槛被压低了。

但判断过很多次目前还无法被替代。一个年轻工程师即使借助 LLM 见过很多场景,他也没有真的承担过这些场景里的责任,没扛过线上事故、没在半夜被叫起来回滚过、没因为一个判断失误让公司付出过真实的代价。这种磨砺只能靠时间,靠在真实业务里反复经历。这点不会被 AI 压平,反而会因为系统不确定性的增加变得更稀缺。

这件事意味着,资深不会被淘汰,但会被重新分类

一个工程师意识到自己的资深性来自哪一层,会变得越来越重要,意识到的人,能在这场重新定价里站到上面那一层;没意识到的人,会站在原地觉得自己被时代亏待了。

AI 时代的工程能力不是从规则化时代的工程能力上跳过去的,而是从它上面演化发展出来的。没有规则化时代扎实的工程经验,token 化时代的判断就没有支撑。这也是这本书一直强调的,过去十几年扎实的软件工程经验,反而是进入这个新阶段最重要的资本。

问题不在资深工程师的经验过时,而在能否把自己经验里关于判断的部分单独认出来、单独加重、单独拿到市场上重新定价。这不是市场的责任,是每个资深工程师自己要做的功课。

六、回到工程师本身

作为一线工程师,看清现实的方式不是焦虑、不是抢工具、不是赶节奏,是把自己手上的能力清单拿出来,对着新的定价机制重新校准一遍。

哪些能力是我会做某某事,下一个 LLM 版本就能做?这一栏的溢价在缩水,不是要立刻放弃,而是要意识到它不能再是自己价值里最大的那一块。

哪些能力是我能讲清楚、我能审、我能兜底、我能设计链路?这一栏的溢价在浮起,过去藏在日常工作里,从没被单独拿出来过,今天它需要被认出来、被命名、被刻意培养。后一栏的比重,决定了一个工程师两年后在市场上能站住的位置。

这不是鼓励要立刻换岗,也不需要把过去十几年的积累推翻。它需要的是把每天的工作重新看一遍。同样写一段代码,是停在做完,还是停在为这段工作写下一份能被审、能被兜底、能被复用的判断,这两种停留方式,会在五年的尺度上把两种工程师的差距拉开。