拓冰建站拓冰建站
首页 / 资讯中心 / 正文

AI时代软件开发的瓶颈转移:从写代码到定义问题

代码写得太快反而让人不知道怎么干活了。这个反差大概是过去一年里我和身边做软件的朋友们最大的共同感受。两三年前大家还在争论AI能不能写出能跑的代码现在这已经不是一个需要讨论的问题了。AI编程助手、AI Agent写代码、AI应用开发框架一层层往外冒原来要一个团队吭哧吭哧干一个月的功能现在一个熟练的工程师在AI帮助下可能一周就搞定了。代码的生成速度上来了新的问题也跟着冒出来——如果写代码本身不再是制约软件开发速度的瓶颈那现在卡住整个行业的东西到底是什么我自己的答案是瓶颈从来没有消失它只是从写代码这个环节转移到了更靠前、更难被AI替代的地方去了。这篇文章我想把这个转移的过程、转移的方向以及我自己踩过的坑、试出来还算靠谱的应对方式详细拆开聊一聊。它适合正在用AI提效的开发者、带团队的Tech Lead以及想搞清楚AI大模型时代软件开发流程会往哪走的从业者看。1. 先理清楚AI到底改变了软件开发里的哪个环节要搞明白瓶颈去哪了得先搞清楚AI编程到底改变了什么。很多人以为AI是代替了程序员这个理解太粗了。更准确的说法是——AI极大压缩了从设计到代码这段路径的交付成本。1.1 传统流程里时间都耗在哪儿了一个典型的软件开发流程大体可以分为这么几个阶段需求获取与分析、方案设计与架构选型、代码编写、测试验证、部署上线、运维迭代。在AI没有大规模介入之前绝大多数团队的实际工时分布是这样的需求沟通与分析大约占15%-20%设计与架构评审大约占10%-15%编码实现大约占30%-40%测试与修复Bug大约占20%-30%部署与联调大约占10%-15%也就是说纯写代码这个动作最多能占到四成的工作量。剩下的时间其实都花在了搞清楚要做什么怎么组织代码验证对不对这些事情上。但在过去很长一段时间里写代码这个动作的绝对值太大了——一个工程师一天能稳定产出几百行高质量代码就算不错了一个中等规模的功能动辄几千上万行代码光是把这些代码打出来就需要耗掉大量人力。AI恰好就是从打代码这个最重的体力活入手的。现在的AI编程工具不管是IDE里的自动补全、基于大模型的对话式编程还是能自主规划任务链的AI Agent对生成一段符合语法、结构合理的代码这件事的完成度已经高到让人惊讶。实测下来一些标准化程度高的业务代码AI生成的可用率能到八成以上。1.2 木桶效应出现了短板从写得出变到了别处管理学里有个木桶理论一个木桶能装多少水取决于最短的那块木板。软件开发也是一样——整个研发链条里耗时的环节决定了最终交付的速度。以前写代码是那块最长的短板不是以前它是整个链条里最大的一块容量。它像木桶最宽的那块板因为那时候最花时间、最耗人力的事就是把代码写出来。AI把这块板一下子加高了——写代码的手速不再是个制约因素。于是木桶里水位一上来原来不算短的其他板子立刻就露怯了需求描述不清楚、架构方案定不下来、代码质量没人把握、测试跟不上、老旧系统改不动……这些环节一下子从不着急变成了最着急从还行变成了瓶颈。这个过程在物理上叫瓶颈转移在工程上其实也一样。理解了这个逻辑后面所有的问题就都有了解释。2. 需求定义成了最大的人肉瓶颈第一个转移到的瓶颈也是最要命的就是需求。代码写得越快需求搞不清楚的代价就越大。以前需求没理清反正写代码要写一个月中间还有时间慢慢掰扯现在AI两天就把代码生成了回头一看需求理解片了那这两天的代码全得推翻重来。浪费的是AI的算力吗不是浪费的是人的决策时间——一进一出成本比原来还高。2.1 为什么AI解决不了需求不明确的问题AI本质上是基于上下文做概率生成的工具。你让它写代码它非常强但你要是让它猜用户想要什么它就露怯了。因为需求往往不在任何文档里它在客户的脑子里在业务方模糊的描述背后在一堆互相矛盾的诉求中间。我说个特别典型的场景业务方提了一个需求给用户加一个会员等级功能。这句话看起来信息量够了但实际上什么都还没定——会员等级怎么分升级条件是消费金额、消费次数还是活跃度不同等级有什么权益降级规则是什么历史数据要不要回算跟现有的优惠体系怎么叠加这些决策业务方自己可能都没想清楚或者他们默认系统应该有标准答案。你把这些扔给AI它会生成一个看起来极其完整的功能数据库表、接口、前端页面全都有而且代码质量大概率不差。但核心的规则都是AI替你想的——它按最常见的情况写了个消费金额满1000升一级的逻辑。业务方看了说不对我们的规则是按积分算的。行重来。AI改代码很快一小时不到新版本又出来了。业务方又说积分也要分基础积分和奖励积分……就这样来来回回改代码永远只要半天但搞清楚规则可能花了三周。这是AI时代最典型的虚假效率——生成代码的效率无限高但确认需求的过程完全没有变快甚至因为改起来太快导致业务方更不愿意认真想需求了。2.2 把隐性需求逼出来这是人的核心工作所以我说在AI开发时代最值钱的能力变成了把隐性需求逼出来的能力。什么是隐性需求就是用户没说出口、甚至自己都没意识到的需求。精通AI编程的人和普通人的分水岭也在这里。普通人的做法是把业务方原话直接转述给AI高手的做法是跟业务方来回追问——你要解决什么问题现在怎么处理的最烦的环节是什么如果只做一件事先做哪个这些问题就是在把隐性的逻辑显性化。隐性需求挖得越深AI写出来的东西就越接近最终想要的样子。我自己的实操习惯是这样的每次接到需求先不打开代码编辑器先花半天到一天的时间写一份需求澄清文档。这个文档不写技术方案只写我从业务方那里听到的内容、我理解的目标、我推演出的可能场景、存在疑问的点然后发给业务方确认。以前这份文档可能要花好几天反复打磨现在有了AI辅助我可以让它基于我的沟通记录快速整理出结构化初稿我只需要做关键追问和最终判断。有了这份文档垫底AI生成的代码命中率会高很多。核心原因就是AI的输入质量决定了它的输出质量你给它的需求上下文越精确、越完整它越不像在自由发挥。2.3 实操建议给AI喂角色目标约束别只喂一句话这里分享一个我在AI编程里用得最多的提示词结构适用于绝大多数代码生成场景角色你是一名熟悉XX业务的后端工程师。 目标实现一个会员等级升级功能。 约束升级条件按累计消费金额计算金额只统计已完成的订单每自然年年初等级重置等级变更需要记录日志并通知用户。 补充背景现有用户表在user主表订单表在order表二者通过user_id关联。这样喂出来的代码比帮我写个会员等级功能要靠谱得多。原因很简单——你给AI设定了边界它就不会天马行空。角色限定了它的知识范围目标限定了它的任务方向约束限定了它的实现路径补充背景直接告诉它数据从哪来。这套东西的本质就是把你对需求的理解、你的设计决策提前注入到AI的工作上下文里。所以AI时代对工程师的要求不是你会不会写提示词而是你能不能把模糊的需求变成清晰、有边界的任务描述。这个能力靠的不是咒语是对业务本身的理解。3. 架构与技术选型AI给不了方向感如果说需求是第一条瓶颈第二条瓶颈就是架构设计和技术选型。代码生成速度一旦上去了决定系统生死的不再是每行代码写得怎么样而是这些代码组合起来的骨架对不对。而骨架这个东西恰恰是AI最不擅长的领域。3.1 AI的惯性与架构的反惯性AI大模型的训练数据来自海量的公开代码仓库这意味着它天然倾向于生成业界最常见的方案。你让它设计一个数据同步方案它大概率会给你一整套基于定时任务的方案你让它做个高并发接口设计它倾向于悲观锁、乐观锁那一套教科书做法。这些方案有问题吗没有它们在最常见的情况下确实是对的。但架构设计恰恰是一个反惯性的事情。一个系统为什么需要架构师因为每个系统的约束条件都不一样——有的对数据一致性要求极高有的对可用性要求极高有的对成本极度敏感有的是从零开始有的是在遗留系统上打补丁。AI基于历史数据平均出来的方案大概率不适合你当下的极端约束。举一个我自己经历过的例子。之前做一个数据同步模块我用AI辅助写版本它给我设计了一个基于数据库定时轮询的同步方案。代码很工整注释也很规范。但我的业务场景是近实时同步数据延迟控制在秒级而且要处理三个数据源的冲突合并。定时轮询完全扛不住这个场景。后来我手工把方案改成了基于Binlog监听加消息队列的架构AI依然发挥了作用——在Binlog解析和消息处理的具体实现上帮我写代码。但应该用Binlog方案而不是轮询方案这个决策AI给不了我。它只能在我告诉它要用什么方案之后帮我把方案落地。架构设计本质上是在约束条件下做权衡而权衡依赖的是对业务未来走向的判断、对团队维护能力的评估、对运维成本的预期。这些判断维度AI接触不到或者说它拿到的训练数据里蕴含的是过去的最优解而架构要面向的是未来的不确定性。3.2 什么样的架构决策不能交给AI我把架构决策分了几类按能不能交给AI做了个优先级决策类型典型例子AI能做什么必须人做什么技术选型选关系型数据库还是NoSQL罗列对比、整理优缺点结合业务特征和团队能力拍板系统拆分微服务还是单体按什么边界切生成服务划分草案判断业务边界与团队协作成本交互协议HTTP还是消息队列同步还是异步生成两种方案的示例代码权衡延迟、一致性、排查复杂度数据模型表结构怎么设计索引怎么建根据需求生成建议表结构验证是否符合业务演进方向部署架构单机、集群、云原生怎么选生成部署配置模板根据成本和规模决定形态注意看这个表AI能做的都是从需求到产出的转化类工作而人必须做的是决策和判断类工作。转化类工作可以无限快决策类工作却天然需要时间来消化和权衡。只要架构决策还卡在人这里软件开发的总时长就不会被AI压缩到极致。3.3 我的实操框任何方案先问三个问题作为有十几年经验的老工程师我自己在过方案的时候有一套固定的三问不管是用不用AI都要走一遍分享出来第一个问题这个方案接得住未来六个月的业务增长吗如果增长翻倍架构需要动大手术还是加机器就行AI生成的方案往往只考虑当下需求不考虑演进路径。第二个问题如果团队里最菜的新人接手这套代码他需要多久才能上手AI生成的代码有时候非常精炼精炼到缺乏上下文注释的铺垫反倒成了维护灾难。架构的简洁性永远要排在看起来聪明前面。第三个问题这个方案上线之后监控运维的复杂度我能接受吗很多方案开发时很爽上线后天天要处理告警。技术选型不只是写代码的事还包括后面几个月甚至几年的运维成本。说实话这三个问题AI也都能回答但它给你的答案是平均意义上的正确答案而你的场景永远有特殊性。架构这种事情参考AI可以拍板还得自己来。4. 代码评审与质量保障人少了责任重了瓶颈转移的第三个方向是质量保障。以前代码写得慢但每个PR都有人review有问题上线前就能拦下来。现在AI一分钟生成几百行代码产出速度是原来的五倍十倍但代码评审的速度还停留在人眼扫描的速度。这中间就出现了巨大的质量审查鸿沟。4.1 AI生成的代码问题往往藏在看起来都对里我自己用AI编程最深的体会是AI生成的代码语法错误几乎为零但逻辑漏洞可以隐蔽得让你头皮发麻。举个真实的例子。有一次我让AI写一个金额计算功能涉及优惠券抵扣。它生成的代码看起来干净利落金额计算、类型转换全都有。但测试的时候发现当优惠券面额大于订单金额时抵扣后的金额变成了负数而且没有做边界校验直接落库了。这个Bug如果顺着AI的思路去看代码很难发现因为它每一步的写法都符合常规只是常规里没包含这个边界场景。这类问题不是个例。AI生成代码的常见毛病包括把边界条件当作无关紧要的分支处理、对空值异常数据缺乏防御、对并发场景考虑不足、把本该幂等的接口写得无状态、对异常情况静默处理然后返回空结果……这些问题的共性是单看每一行都没毛病组合起来的整体行为却可能不符合预期。4.2 有效性测试AI时代最硬核的护城河那怎么办不是说不能用AI而是要在AI生成之后补上更严格的验证环节。我自己现在的工作流变成了AI生成 人审关键逻辑 更全面的测试三段式。其中测试的比重被提到了前所未有的高度。AI时代测试工程师的价值反而更高了因为生产代码的供给极度充裕但验证代码对不对的能力极为稀缺。我在团队里反复强调一个观念以后我们写代码可能不拼手速了拼的是谁能设计出更刁钻的测试用例。AI能帮你把1000行代码写出来但它不知道自己写的代码在什么情况下会出事。而这个什么情况下会出事需要靠人来想。我的实操经验是在把AI生成的代码合入主干之前至少做三件事第一异常路径测试。主动去查AI代码里所有else分支、空值返回、异常捕获把能想到的异常输入都喂一遍。尤其注意金额、时间、状态、用户ID这类关键字段的边界值。第二契约测试。AI生成的代码如果对接了外部接口一定要验证它对接口返回的异常情况处理是否完备——外部接口超时了怎么办返回了意想不到的字段怎么办这些AI经常想不起来。第三同行评审要盯着设计意图看不要盯着代码风格看。AI写出来的代码风格一般很统一没什么好挑的。评审的重点在于这个实现对不对跟产品预期一致吗有没有更简单的实现方式把人手从查格式里解放出来用在查逻辑上。4.3 不能省的人工环节Code Review的新打法最后说一下Code Review在AI时代的重构。以前Code Review是人工看代码找代码里的问题现在AI能承担一部分基础审查——让AI先扫一遍查明显的代码规范问题、安全隐患、重复代码这些它干得又快又准。但真正值钱的人工评审重点应该放在三个AI看不出来的问题上这个代码做了它不该做的事吗比如本该只读数据的服务是不是顺带改了别的状态这个代码能支撑未来的演进吗比如数据库字段写死了长度以后超过这个长度就崩这个代码跟团队既有的实现哲学一致吗比如团队统一用乐观锁处理并发AI可能给你写了个悲观锁。这些问题的共同特点是要结合团队背景和业务上下文才能回答而AI没有这些东西的完整信息。所以我的结论是AI可以帮你做Review但你自己得保留终审权。5. 存量系统和屎山代码AI的盲区前四个瓶颈都偏人和流程第五个瓶颈更偏技术债务——存量系统。如果你在一个新项目上用AI编程那确实爽一天一个样。但现实是绝大多数软件公司最赚钱、最核心的系统都是积累了五年甚至十年的老系统。这些系统里藏着没人能完全说清楚的业务逻辑、绕来绕去的兼容处理、没有文档只有注释的祖传代码。5.1 为什么AI处理不了屎山先说什么是程序员嘴里的屎山代码。它不是一个贬义词而是对历史遗留复杂系统的一种自嘲式概括。这类系统的特点有三个一是文档极少甚至没有只能靠代码反推逻辑二是大量打补丁式的修改同一个功能被不同时期的人按不同标准改过好几轮三是隐式依赖极多改一个看似独立的函数可能牵连出十个地方的调用关系。AI大模型面对这种代码库会遇到一个训练数据里没有的问题——它的预测基于概率但历史系统的逻辑充满了非概率性的偶然决定。当时为了一个特定客户的特殊需求在这个分支里写了个硬编码这种事情AI不可能推理得出来只有经历过那个时代、看过那行代码的老人才知道。所以你会发现AI在处理遗留系统时经常出现一本正经地瞎猜的情况。你让它解释一段祖传代码它会给一个自信但胡扯的解释你让它重构它会把原来的兼容逻辑当成冗余代码删掉。AI缺少对代码为何这样写的历史语境的理解而这恰恰是支撑老系统稳定运行的关键。5.2 深度理解代码语义才是人机协作的王牌那存量系统的改造就没救了吗也不是。关键在于跟AI协作的方式不能是让它独立判断而是帮它补全上下文。我自己处理老系统的时候工作流一般是这样的先用工具把调用链梳理清楚画清楚这个函数被谁调、它调了谁然后把关键业务规则用中文注释的形式补充到代码里再把这些信息喂给AI让它基于我知道了完整情况的前提下去做修改。效果会完全不一样。所以说白了AI在原封不动的屎山代码面前是半盲的但只要你帮它戴上历史知识的眼镜它依然能发挥极强的生产力。而这个帮它理解的过程不是在写代码是在做系统考古。系统考古的能力——也就是从零散的历史代码里还原业务逻辑全貌的能力——我觉得是AI时代最高级也最稀缺的能力之一。6. 团队协作与知识传递AI绕不过去的组织问题前面聊的偏技术但瓶颈还有一个组织层面的可能比纯技术层面的还要命。软件开发从来不是一个人的事。代码写得再快最终上线要的是整个团队的步调一致。引入AI之后团队协作这个环节出现的摩擦可能被很多人低估了。6.1 AI个体户模式 vs 工程化协作怎么平衡现在有一种趋势AI让个人的全栈能力变强了。以前一个完整功能要前端、后端、测试配齐一个小组现在一个工程师用AI可能全干完了。于是很多团队出现了AI个体户——一个人顶一条产品线的情况。短期看效率爆炸长期看风险也爆炸。因为代码是一人写的知识都在脑子里别人看不懂也没法接手。一旦这个人休假或者离职整个系统的维护直接停摆。这在以前反而不是大问题因为代码写得多且杂可能速度慢但没有AI时不会出现一个人三个月写了别人三年代码量的情况。所以现在的矛盾是AI赋能个体但工程化协作要求的是团队知识可共享。个人效率和组织效率在这个维度上是冲突的。我的观点很明确AI时代的代码要有更严格的可读性纪律。AI生成了代码你必须让它加上充分的注释、生成设计文档、把关键决策记录在案。这些额外动作看起来拖慢了个人效率但大幅保住了组织效率。这个账是划算的。6.2 新人培养模式被打破经验传承怎么办另一个被AI悄悄改变的是新人培养机制。以前新人进团队从写简单模块开始练手通过Code Review学习老手的思路慢慢成长为独当一面的工程师。现在新人一上来就背靠AI代码产出速度飞快但那不是他的能力是AI的能力。这带来一个巨大的隐患他可能永远学不会自己判断代码好坏的功夫。我自己带人的时候有个观察用AI很溜的新人遇到AI回答不了的问题时茫然程度比不用AI的新人高得多。因为过去的新人至少经历了自己先尝试-失败-搜索-再尝试的过程这个过程中建立起了对问题的基本感觉而AI直接把结果喂给他跳过了中间的思考过程一旦需要脱离AI独立思考他就不知道怎么下手了。这不是说新人不能用AI而是说新人阶段需要有人带着做拆解式训练——把一个AI生成的功能拆开讲清楚每一段代码为什么这样写、有没有替代方案、边界在哪。这种师傅带徒弟模式在AI时代不但没有过时反而成了稀缺资源。代码生成可以外包给AI但工程判断力很难外包它需要在真实的、有反馈的训练里养出来。7. 总结一点实在话AI时代工程师到底在卖什么很多做软件开发的朋友最近问我AI都这么能写代码了我还学什么编程我的回答是以前我们卖的是能把代码打出来现在要卖的是知道让AI打什么代码、怎么验证打出来的代码是对的、出了问题怎么定位。这四件事单独拎出来哪一件都不比打代码简单组合起来难度更高。但好消息是它们都是可以被训练、被积累的能力。而且这些能力恰恰是AI目前最难替代的部分——它们依赖经验、依赖判断、依赖对业务和人的理解。所以我的总体建议是别慌但也要变。不要拒绝AI把它当成你最趁手的工具同时比任何时候都更重视需求分析能力、架构设计能力、测试设计能力和系统理解能力。软件开发最大的瓶颈永远是定义问题的人想得够不够清楚这个话以前对AI时代更对。AI能把从想清楚到做出来的路径压缩到极短但它永远替代不了那个想清楚的动作——这个动作里有人类独有的判断、权衡和取舍。换个角度说AI时代的软件开发更像是从体力劳动密集型转向脑力判断密集型。以前拼的是手速以后拼的是理解力、决策力和责任承担能力。我还挺期待这个新阶段的——它把程序员从重复的编码劳动里解放出来逼着所有人往真正的思考走。那些能在这个转变里适应下来的人未来的价值反而会被进一步放大。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门