最近这半年,我陆续收到不少同行的私信,开头几乎都是同一句话:“AI写代码越来越厉害了,我们程序员是不是真的没出路了?”说实话,这种焦虑我不光在别人身上看到,我自己也经历过一段非常拧巴的时间。但越是在这种反复震荡的讨论里,我越觉得很多声音把问题问错了方向:大多数人都在纠结“AI能不能替我做编码工作”,却很少有人认真想过,程序员这个职业里真正不可替代的部分是什么。
我的核心观点很直接:AI时代里,最危险的其实不是“写不好代码的人”,而是“只会把需求翻译成代码的人”。翻译工作恰恰是当下大语言模型和各类AI编程助手最擅长的事情——你给我一段自然语言描述,我给你一段能运行的代码,这件事机器已经做得又快又好。真正留下来的位置,属于另一类人,也就是标题里说的“价值定义者”。他们不把工作重点放在“怎么实现”上,而是放在“做什么、为什么做、做到什么程度、怎么判断成功”上。这篇文章我想把这中间的转变拆开讲清楚,讲一讲从编码者到价值定义者,到底意味着什么,以及一个普通程序员如何在日常工作中一步步完成这种进化。
1. AI替代的不是程序员,而是“只会把需求翻译成代码的人”
先说一个可能反直觉的判断:AI最先冲击的不是代码写得差的人,反而是那些代码写得很“规矩”的人。为什么?因为这类人的工作模式通常是这样——产品经理提一个需求,经过一轮沟通,形成文档,然后程序员按照文档把功能实现出来,再修一修bug,保证它按时上线。整个过程里,真正由程序员的“不可替代认知”贡献的部分,其实非常有限。需求是别人定义好的,方案是照着行业惯例抄的,验收标准是测试用例写死的,程序员只是那个把“人类语言”翻成“机器语言”的转换器。
这种转换器式的工作,正是当前AI编程工具最强势的领域。你试过就会发现,只要需求描述得够清楚,让AI生成一个CRUD接口、一段数据处理脚本、一个基础前端页面,它做出来的质量已经超过了不少刚工作一两年的开发者。更麻烦的是,这个能力还在快速提升,而且它会越来越便宜。你花几秒钟让AI写出来的代码,可能比一个中级开发埋头写半天还要规范。这不是夸张,这是很多团队已经在发生的现实。我身边好几个团队,已经把一些“翻译性质”的内网工具项目整个交给AI来完成,人在里面只负责审阅和修改。
那问题来了:如果翻译层的工作被替代,剩下的空间在哪里?答案是把需求“定义”出来的人。有价值的工作链条从来不是“提需求—写代码—上线”这么简单。真实世界里,需求往往是一团模糊的东西。业务方说“我想让用户更活跃”,这不算需求,这只是一个愿望;程序员真正值钱的能力,是把这种愿望变成可执行、可衡量、可取舍的具体方案——这个功能到底做不做?做的话做到什么程度?什么指标算成功?暂时放弃什么才能换来这个结果?
为了把这个区别说透,我拿我见过的一个场景举例。某公司要做“搜索功能的优化”,一个同事接到任务后立刻开始分析代码、列改动点、评估工时,然后埋头做。另一个同事先问了一串问题:现在搜索的转化率数据是多少?用户抱怨最多的是没结果,还是结果不准?我们这次优化的核心目标是提高点击率,还是降低无结果率?如果只能改一处,改哪一处收益最大?他的结论是:当前阶段最该做的不是重构搜索引擎,而是先补一个“无结果时推荐热门内容”的兜底页面,因为数据分析显示大量用户搜不到东西就流失了。
这两个人都在写代码,但本质完全不一样。前一个是在“翻译需求”,后一个是在“定义价值”。AI能替代的是前者的工作,甚至能替代得更好;而后者的工作,恰恰是AI目前无法完成的——它需要你对业务目标有理解,对用户行为有判断,对取舍成本有感知。而这些能力不是一蹴而就的,也不是换个岗位就能获得的,它需要在日常工作中一点点训练出来。这就是我写这篇文章的出发点:与其在“AI会不会取代我”的问题里内耗,不如花时间去想“我到底在哪个层上做事”,然后往上一层走。
2. 编码者与价值定义者的四个关键差异
我试着把两种角色的差异提炼成一个简单框架。不看具体技术栈,不看公司大小,只看一个人在项目里工作的方式,通常可以用四个维度来对照:
| 对比维度 | 编码者 | 价值定义者 |
|---|---|---|
| 工作起点 | 从“已定义好的需求”出发 | 从“未定义清楚的问题”出发 |
| 核心问题 | 怎么做?怎么做得快? | 为什么做?为谁做?做到什么程度? |
| 主要产出 | 代码、接口、功能、交付物 | 判断、方向、标准、取舍,代码只是载体之一 |
| 价值评估 | 代码质量、交付速度、bug数量 | 是否创造了预期结果,是否让团队少走弯路 |
这个表格只是骨架,展开讲才有意思。
先说“工作起点”的差异。编码者的典型状态,是拿到一个“看起来已经很完整”的需求,然后开始排期、拆解、动手。这个过程本身没什么问题,问题在于很多需求看起来完整,只是因为写文档的人把它写得很完整,不代表这个需求在真实世界里是正确的。价值定义者在拿到需求后会有一步很多人嫌烦的动作:往回追问。他会去确认需求的背景、用户、数据、目标。这看起来像是在挑战产品经理,实际上是在帮所有人避免做无用功。我见过太多项目,开发团队花了好几周做出来一个功能,上线后发现使用率低到可以忽略,然后又花了好几周下线。这种浪费,往往不是因为开发者偷懒,而是因为没人认真定义过“什么才算成功”。
第二个差异是“核心问题”。编码者遇到问题,习惯性问“怎么做”,这是技术训练带来的本能。价值定义者会先问“我们为什么要做这件事”。别小看这个区别。在技术选型的时候,编码者容易陷入“哪个方案更高级”的争论,价值定义者会问“哪个方案更适合我们当前的业务阶段和团队能力”。在做功能排期的时候,编码者倾向于先做技术上简单的,价值定义者会先做对业务影响最大的,哪怕它技术上更难一点。这种判断能力,不是靠多读几篇技术博客能获得的,它需要你真正把业务结果当成自己要背的考核指标。
第三个差异是“产出物”。编码者交出来的东西是代码、提测单、上线记录。价值定义者交出来的东西更复杂,包括决策备忘录、方案选择依据、风险预警、上线后的数据复盘。这里面有个很关键的认知:代码只是价值定义之后的执行产物。如果方向错了,代码写得再漂亮也只是一堆精致的错误。你可能觉得这个说法有点极端,但想想你自己维护过的那些“写得很优雅、但是根本没人用”的系统,你就能明白我在说什么。价值定义者的产出,本质上是在帮团队“生成信息”——让所有人知道我们为什么这么做、预期是什么、怎么看结果。
第四个差异是价值评估方式。编码者的成绩往往由代码质量、交付时间、线上故障率这些指标构成,这些当然重要,但它们衡量的是“过程质量”。价值定义者会用结果来校准自己:这个功能上线后数据变化了吗?用户满意度提高了吗?业务成本下降了吗?如果结果没变,哪怕代码写得再干净、架构搭得再合理,他也会难受。这种“以终为始”的视角,会直接影响你的职业走向——因为公司最终买单的是结果,不是过程。
不过有一件事我必须澄清。说价值定义者“更高级”,不代表编码者就应该被淘汰,也不代表价值定义者可以不写代码、不碰技术细节。恰恰相反,一个优秀的价值定义者必须有足够的技术判断力做底子。你没有能力评估一个方案的技术代价,你就不可能做出靠谱的取舍。你不是在脱离技术去定义价值,你是在用技术理解力去支撑价值判断。所以这个进化不是“从技术转向业务、从此不写代码”的二元跳转,而是一个人在原有技术根基之上,增加了“定义问题”和“评估结果”两层能力。很多人把这个转变理解反了,以为“价值定义者”就是往产品经理方向转,实际上你是在做一个更懂技术、更能把技术兑现为业务结果的工程师。这也是我认为大多数有经验的程序员,在AI时代最应该去的方向。
3. 在日常工作中持续训练“定义价值”的四组具体动作
讲概念谁都会,难的是落到每天的工作里。我总结过几组自己验证过的方法,它们不需要你换岗位、换公司,只需要你改变做事的惯性。每一组动作都很小,但长期坚持下来,你的思考方式会慢慢从“how”切换到“why”。
3.1 接到需求之后,先做“五连问”再动手
这是我建议所有开发者先练起来的习惯。不管需求文档写得多详细,你得在正式排期之前,先自己过一遍这五个问题:
- 这个需求为什么是现在做?是谁提出的?背后的业务压力是什么?
- 如果这个需求不做,最坏情况是什么?
- 谁是核心用户?他们当前的真实痛点是哪个?
- 这个需求上线后,用什么指标来证明它成功?
- 如果只允许我们做这个需求的一半,应该砍掉哪一半?
你不用把这五个问题全去跟产品经理对,重要的是你自己心里得有答案。我见过太多开发者连需求的“成功标准”都不清楚就开工了,做到一半才发现方向偏差,又不好意思回头问,只能硬着头皮交付一个自己都不确定有没有用的东西。养成五连问的习惯之后,你会在动手前就把很多隐形风险筛掉。实际沟通的时候可以换个措辞,比如“我想确认一下这个功能的成功指标是什么,这样我好安排优先级”,这话听起来不冒犯,但已经让你从执行者变成了定义者。
3.2 为每个重要决策写一页纸的“决策备忘录”
程序员平时写的最多的是代码注释和接口文档,很少有人会为自己的技术决策写备忘录。但它真的很有用。格式很简单:背景、选项、取舍依据、预期影响、三个月后的回看结论。举个例子。我之前在某项目里选缓存方案,当时可以在“简单可靠”和“性能极致”两个方向里选,团队里有人倾向于后者,理由是未来可能有大流量。我写了一份备忘录,把自己的判断写下来:当前业务日活不高,复杂度带来的维护成本会拖慢迭代速度,所以先选简单方案,同时留好扩展接口。三个月后再看,这个判断验证了——业务并没有迎来预期中的爆发,简单方案让团队省了大量精力。
写这份备忘录的价值不在于“证明你对”,而在于给未来的自己留下一个复盘坐标。你回头看的时候,能清楚看到当时的依据是什么、哪些判断错了、错在哪里。这种刻意练习,比做一百个功能都能更快提升你的决策能力。而且它有一个额外好处:当你手上积累了几十份决策备忘录,你就有了属于自己的“判断模型库”,下次遇到类似场景,你不需要重新纠结,直接调取历史经验就行。这在AI时代尤其珍贵,因为AI可以给你提供选项和参数,但“在不确定性中拍板”这件事,依然只能靠你自己。
3.3 汇报里把“我完成了什么”改成“我带来了什么”
这是一个非常容易开始,但效果立竿见影的习惯。很多开发者在周报和项目同步会上说的都是“我完成了一个接口开发”“我修了三个bug”“我把xx模块重构了”。这些话都是过程描述,听了之后没人知道它们对业务有什么影响。价值定义者的表达方式不是这样。他会说“我把商品搜索的响应时间从1.2秒降到了300毫秒,搜索结果页的跳失率因此下降了8%”,或者“我修复了订单超时误判的bug,上个月因为这个bug大概产生了上千笔错误退款”。
你可能会说,有些工作本身没有直接的业务指标可以挂钩,怎么办?那就先定目标再动手。比如你接到一个重构任务,不要只把目标写成“优化代码结构”,你可以把它定义成“在保持功能不变的前提下,把一个模块的部署时间减少50%”。这样你做的每一件事,都能被翻译成“结果语言”。长期用这种语言说话,你会被动地倒逼自己思考工作的价值链条——因为你没办法汇报一个连自己都说不清意义的事情。这个习惯一旦养成,你在团队里的存在感会和以前完全不一样。
3.4 定期拿AI给自己做“能力压力测试”
关于AI,我反而建议你不要躲着它,大大方方地用,但要用出一种测试效果。方法是这样的:每两周回想一下,你本周的工作内容里,如果全部交给一个足够聪明的AI助手,它能独立完成多少?如果你发现自己绝大部分时间都在写CRUD、配环境、处理重复性bug、清理数据——这些几乎都是AI能胜任的“翻译层”工作,那你需要警惕了。这不是说AI明天就会抢你的饭碗,而是说你的能力结构正在停留在低价值区间。
反过来,如果你的工作内容里有相当比例是AI做不了的,比如跟业务方反复确认一个模糊需求、基于有限信息做技术选型、判断一个风险值不值得现阶段去解决、设计上线后的数据观测方案——你在做的是“定义价值”的活。这不是一个模糊的感觉测试,它是一个很实际的判断工具。我每隔一段时间就会拿这个标准审视自己,如果我发现自己连续一两周都泡在AI能轻松代劳的任务里,我就会主动去找那些更靠前的工作环节,比如参与需求梳理、介入方案设计、跟进上线后的数据复盘。记住,AI是你的能力镜子,不是你的对手。
4. 在团队里从“执行节点”走向“决策参与者”的三个突破口
个人能力的进化是一回事,你在团队里的身份位置是另一回事。很多程序员其实已经在做价值定义了,但他们没有让团队里其他人看见,结果依然是那个“被安排任务的人”。改变这个局面,靠的不是换一个更高的Title,而是换一套工作方式。我有三个比较实际的突破口。
第一个突破口是需求评审会之前的功课。大多数开发者参加需求评审会的时候,是带着“听一下需求、评估一下工时”的心态去的。价值定义者会提前拿到需求文档,先自己读一遍,不看实现细节,只看两件事:这个需求想解决什么问题?它描述的问题是不是真实存在的?然后带着问题进会场。你在会上第一个开口问的如果不是“这个大概什么时候上线”,而是“我们怎么衡量这个功能做成功了”,所有人都会愣一下,然后重新看你一眼。这不是抢产品经理的话,这是你基于对业务和用户的理解,贡献了别人没注意到的关键视角。
第二个突破口是给技术方案加上“业务影响”栏。很多技术评审会开得极其枯燥,因为所有人都在讲架构、讲数据流、讲扩展性。价值定义者做技术方案的时候,会额外写一段业务影响分析:这个方案对上线时间有什么影响?对运维成本有什么影响?对用户体验和后续迭代速度有什么影响?如果推荐方案A而不是方案B,它牺牲了什么、换来了什么?这段描述不是说给开发听的,是说给决策层听的。一旦你开始用这种语言参与技术评审,你就不再是一个“等着分配任务的开发资源”,而是一个“能帮团队做选择的人”。这个身份转变非常关键,它往往比技术能力的提升更能改变你的处境。
第三个突破口是风险暴露和取舍建议。很多程序员在评估风险时的习惯是发现问题、上报问题,然后等着别人做决定。价值定义者会再往前走一步,不仅指出风险,还会给出取舍建议。比如有人提了一个看起来很炫的微服务拆分方案,你可以说:“这个方案技术上确实更合理,但以我们现在的业务体量和团队规模,复杂度带来的成本可能高于收益。我建议先保留单体结构,把接口层面做清晰,等业务量上来我们再拆。”这句话的潜台词是:我不仅看到了技术选项,我还看到了业务阶段和团队成本。你一旦能持续提供这种“带着底层理由的结论”,大家对你的定位就会从“做事情的人”变成“想清楚事情的人”。
我说一个虚拟但非常典型的案例。某公司有个开发者A,进组半年一直在做后端接口开发,从来没参与过产品决策。后来他给自己定了一个规矩:每次需求评审会之前,输出一页“需求价值速写”,内容包括这个需求的目标、现有数据表现、用户场景、可能的风险,全程不写代码方案。刚开始产品经理觉得他多事,两个月之后,产品经理的需求方案里甚至会主动请他审一遍。半年之后,他开始被拉进季度规划会。他不是换了岗位,他只是换了一种在团队里存在的方式。这件事给我最大的启发是:别人把你当执行者还是当决策参与者,不完全取决于你的职级,而是取决于你提供的输入是“实现的成本”还是“方向的判断”。
5. 那些真实的焦虑,以及我对进化的理解
说了这么多方法,回到一个绕不开的话题:焦虑。我前面所有的建议,都是在假设你能比较理性地看待AI这件事。但真实的情绪往往不是理性的。我记得有段时间,我让AI帮我生成一段我之前写了很久才跑通的代码,它几秒钟就给我一个能直接用的版本,我当时坐在屏幕前,脑子里冒出来一句很丧的话:那我这几年究竟在练什么?
这种时刻恐怕很多程序员都经历过。失落、怀疑、甚至一点愤怒,都是很正常的情绪。但后来我慢慢想明白了一件事。AI能替我写代码,是因为我给它一个足够清晰的问题定义。可是客户来找我的时候,他们真的能给出清晰的问题定义吗?恰恰相反。大部分业务方坐在我面前的时候,说的是“我们想让数据更好看一点”“我们想做一个类似某某的东西”“我们觉得流程不太顺,但说不清卡在哪”。把这种模糊的愿望变成一个可以被代码实现的目标,这个环节AI根本替代不了,因为AI不会去质疑你的需求是否合理,不会告诉你“你真正想要的其实是另一个东西”。
这就是我理解的“从编码者到价值定义者的进化之路”。它不是说你的代码水平就白练了,也不是说你以后不用写代码了,而是说你的价值重心往上移了一层:你不再只是解决“怎么做”,而是决定“做什么、为什么做、做到什么程度”。写代码依然是你的工具,但它不再是你的天花板。AI把你从重复性的翻译工作中解放出来,恰恰是逼你去占据那个更稀缺的位置——定义价值的那个位置。所以我现在的态度是,AI带来的不是危机,是一种催促,它催促每一个还想在这个行业里有长期发展的人,向上走一层。
这条路我也还在走,谈不上走得多好,但至少方向是清楚的。最后分享一个我经常用来提醒自己的判断标准:如果有一天,整个行业都不再需要程序员来写业务代码了,那你手里还有什么东西,是AI替代不了的?我的答案是,我会帮别人把问题想清楚。如果你也能找到属于你的那个答案,大概就不太容易被浪潮打翻了。