资讯动态

AI时代软件工程转型:从写代码到驾驭AI的实践指南

发布时间:2026/10/17 2:10:20 来源:尧图企业网站定制
1. 这门课到底在讲什么从“会写代码”到“会驾驭AI写代码”软件工程这门课过去十几年教的东西其实变化不大需求分析、架构设计、模块划分、测试策略、版本管理、代码评审、持续集成。这套东西支撑了互联网行业二十年的高速运转也让无数开发者形成了固定的工作习惯——先想清楚再动手写写完再测测完再合。但最近两三年情况变了。你打开任何一个代码编辑器AI补全已经成了默认配置你提一个需求AI能直接给你生成一个可运行的原型你写一个函数AI能帮你补全测试用例你提交一个PRAI能帮你做第一轮代码评审。写代码这件事本身正在从“人逐行敲”变成“人描述意图AI生成实现人再校验和调整”。CS146S这门课就是在这个背景下重新梳理软件工程的知识体系。它不教你怎么用某个具体的AI工具而是教你在AI深度介入开发流程之后软件工程的哪些原则依然成立、哪些实践需要调整、哪些新的能力必须补上。课程的核心问题只有一个当AI能写代码的时候软件工程师的价值到底在哪里这个问题听起来有点焦虑但其实它指向的是一个非常实际的能力转型。过去我们评价一个工程师很大程度看他“写得多快、写得多好”。现在这个标准正在失效因为AI写得比你快而且语法错误比你少。新的评价标准变成了你能不能把模糊的需求拆成AI能理解的精确描述你能不能判断AI生成的代码在架构上是否合理你能不能设计一套流程让AI的产出稳定可控、可测试、可维护这门课适合三类人第一类是有一定开发经验、但还没系统接触过AI辅助开发流程的工程师第二类是在团队里负责技术方案设计、需要把AI工具引入现有工程体系的技术负责人第三类是刚入行不久、想从一开始就建立正确工作习惯的新人。不管你属于哪一类这门课的核心价值都不在于教你某个工具的具体用法而在于帮你建立一套“AI时代做软件工程”的思维框架。我自己的感受是学完这门课之后最大的变化不是写代码更快了而是对“什么该让AI做、什么必须自己做”这件事有了更清晰的判断。这个判断力才是接下来几年里真正拉开差距的东西。2. 核心思路拆解AI时代软件工程的三个底层转变2.1 从“实现者”到“意图描述者”的角色转变传统软件工程里工程师的核心动作是“实现”。你拿到一个需求文档理解之后开始设计数据结构、写接口、实现逻辑、处理边界情况。这个过程里你的价值体现在“能把想法变成代码”。AI介入之后这个动作被拆成了两半AI负责“把描述变成代码”你负责“把需求变成精确描述”。听起来好像你轻松了但实际上“精确描述”这件事比“写代码”更难。因为写代码的时候你可以在写的过程中不断调整思路边写边想但描述意图的时候你必须提前想清楚所有关键细节否则AI给你的东西就是一堆看起来能跑、实际上到处是坑的代码。我举个实际例子。假设你要做一个“用户登录”功能。传统做法是你自己设计表结构、写接口、处理密码加密、加验证码、做限流。AI辅助的做法是你写一段描述“实现一个用户登录接口接收手机号和密码密码用bcrypt加密存储登录成功后返回JWT token失败三次锁定五分钟需要图形验证码。”这段描述看起来已经很详细了但AI生成出来的代码大概率还是会有问题。比如它可能没处理手机号格式校验可能没考虑并发登录的token刷新问题可能把验证码校验放在密码校验之后导致安全漏洞。这些细节你不提前说AI就不会做。而你要提前说清楚就必须对“登录”这个功能的所有边界情况有完整的认知。这就是角色转变的实质你不再是一个“写代码的人”而是一个“定义问题的人”。定义问题的能力比解决问题的能力更稀缺。2.2 从“代码评审”到“意图评审”的重心转移传统代码评审看什么看命名是否规范、逻辑是否有漏洞、边界是否处理、性能是否达标、是否有重复代码。评审的对象是“代码本身”。AI生成代码之后代码评审的重心发生了转移。因为AI生成的代码通常“看起来”很规范——命名工整、注释齐全、结构清晰。但你仔细看就会发现它可能在一个循环里做了不必要的数据库查询可能把一个本该异步的操作写成了同步可能在一个事务里调用了外部接口导致锁等待。这些问题不是“代码风格”问题而是“意图理解”问题。AI没有理解你的真实意图它只是根据你的描述生成了一个“看起来合理”的实现。所以评审的重点变成了AI生成的代码是否真正实现了你想要的意图它在架构层面是否合理它的隐含假设是否成立我自己的做法是在评审AI生成的代码时先不看具体实现而是先问三个问题第一这段代码的输入输出是什么第二它依赖了哪些外部条件第三如果外部条件变化它会怎么表现这三个问题回答清楚了再去看具体实现效率会高很多。2.3 从“测试覆盖”到“行为验证”的策略升级传统测试的核心指标是“覆盖率”——你的测试用例覆盖了多少行代码、多少个分支。覆盖率越高说明测试越充分。但AI生成的代码有一个特点它可能写出覆盖率很高但实际没用的测试。比如它会给一个简单的getter方法写五个测试用例覆盖各种输入但这些测试根本不能发现真正的业务逻辑错误。因为AI不理解“这个功能对业务意味着什么”它只是机械地追求覆盖率数字。所以AI时代的测试策略必须从“覆盖率导向”转向“行为验证导向”。你不再关心“有多少行代码被测试覆盖了”而是关心“关键业务行为是否被验证了”。具体来说你需要定义清楚这个功能在什么输入下应该产生什么输出在什么异常情况下应该怎么处理这些行为是否都有对应的测试用例这个转变的难点在于行为验证需要你对业务有深入理解而AI恰恰缺乏这种理解。所以测试这件事反而变得比过去更重要了——因为AI能帮你写测试代码但“该测什么”这件事必须你自己想清楚。3. 核心细节解析AI辅助开发的关键实操要点3.1 如何写出AI能理解的“精确描述”写精确描述这件事说起来简单做起来难。我总结了一个“四层描述法”在实际操作中比较有效。第一层是“功能描述”这个功能是做什么的输入是什么输出是什么比如“实现一个订单查询接口输入用户ID和分页参数返回该用户的订单列表”。第二层是“约束描述”有哪些硬性约束比如“每页最多返回50条记录”、“订单按创建时间倒序排列”、“只返回最近半年的订单”。第三层是“异常描述”异常情况下怎么处理比如“用户ID不存在时返回空列表”、“分页参数超出范围时返回第一页”、“数据库查询超时返回错误码500”。第四层是“架构描述”这个功能在整体架构中的位置是什么比如“这个接口是只读的不需要事务”、“查询走从库不查主库”、“结果需要缓存五分钟”。这四层描述写清楚之后AI生成的代码质量会明显提升。但这里有一个坑很多人写描述的时候会把“实现细节”和“业务意图”混在一起。比如“用Redis缓存结果”是业务意图“用Redis的String类型存储JSON序列化后的结果”是实现细节。你只需要说清楚业务意图实现细节让AI自己决定。如果你把实现细节也写死了AI反而可能因为你的细节描述有误而生成错误的代码。注意描述里不要写“用某某设计模式”这种话。AI对设计模式的理解往往停留在表面你让它用“策略模式”它可能给你生成一个过度设计的类结构。你只需要描述清楚行为让AI自己选择实现方式。3.2 AI生成代码的校验清单AI生成的代码不能直接合并。我整理了一个校验清单每次评审AI代码的时候按这个清单过一遍能发现大部分问题。校验项检查内容常见问题输入校验是否对所有输入做了合法性检查缺少空值判断、格式校验、范围校验边界处理是否处理了空集合、零值、最大值空列表遍历、除零、整数溢出异常处理是否捕获了可能的异常并合理处理吞异常、异常信息不明确、未回滚事务资源管理是否及时释放了连接、文件、锁连接未关闭、文件句柄泄漏、死锁风险并发安全共享资源是否有并发保护竞态条件、可见性问题、死锁性能隐患是否有N1查询、全表扫描、大内存分配循环内查库、未加索引、大对象序列化安全漏洞是否有注入、越权、敏感信息泄漏SQL拼接、未鉴权、日志打印密码这个清单看起来很长但实际操作中你只需要重点关注前四项。因为前四项是AI最容易出问题的地方后三项需要更深入的架构分析通常在代码评审阶段由更有经验的工程师把关。我自己的习惯是AI生成代码之后先跑一遍单元测试然后按这个清单快速过一遍。如果发现输入校验或边界处理有问题直接打回去让AI重新生成而不是自己手动改。因为手动改AI代码这件事很容易改出新的问题而且改完之后AI下次生成还是会有同样的问题。正确的做法是把发现的问题补充到描述里让AI重新生成一版。3.3 测试用例的AI生成与人工校验AI生成测试用例这件事效率提升非常明显。过去写一个功能的测试可能要花半小时到一小时现在AI几秒钟就能生成一套。但AI生成的测试用例有一个通病它倾向于测试“正常路径”对“异常路径”和“边界条件”的覆盖往往不够。我的做法是让AI先生成一轮测试然后我人工补充三类用例第一类是“业务异常”比如订单金额为负数、用户状态为冻结第二类是“系统异常”比如数据库连接失败、外部接口超时第三类是“并发场景”比如两个请求同时修改同一条记录。这三类用例AI通常不会主动生成因为它不理解这些场景在业务上意味着什么。但恰恰是这三类用例最能发现真正的bug。还有一个细节AI生成的测试用例断言往往写得比较“松”。比如它可能只断言“返回结果不为空”而不去校验具体字段的值。这种测试用例跑起来永远是绿的但没有任何实际价值。所以人工校验的时候要重点看断言是否足够“紧”——是否校验了关键字段的具体值、是否校验了异常的类型和消息、是否校验了副作用的实际效果。提示让AI生成测试用例的时候可以在描述里加一句“请覆盖正常路径、异常路径和边界条件每个用例的断言要具体到字段级别”。这样生成的测试质量会好很多。4. 实操过程一个完整功能的AI辅助开发流程4.1 需求拆解与描述编写假设我们要实现一个“优惠券领取”功能。这个功能的需求是用户可以在活动页面领取优惠券每人限领一张优惠券有总量限制领完即止。按照“四层描述法”我先写一段描述功能描述实现一个优惠券领取接口输入用户ID和优惠券ID返回领取结果。领取成功返回优惠券码领取失败返回失败原因。约束描述每个用户对同一张优惠券只能领取一次优惠券有总量限制领完即止领取成功后优惠券码需要持久化存储接口需要保证幂等性同一用户重复请求不能重复领取。异常描述用户ID不存在时返回“用户不存在”优惠券ID不存在时返回“优惠券不存在”用户已领取时返回“已领取过”优惠券已领完时返回“已领完”数据库异常时返回“系统繁忙请稍后重试”。架构描述这个接口是写操作需要事务保证优惠券库存扣减和领取记录插入必须在同一个事务中接口需要加分布式锁防止并发超领返回的优惠券码需要全局唯一。这段描述写完之后我把它交给AI让它生成代码。AI生成的代码结构大概是一个Controller层接收请求一个Service层处理业务逻辑一个DAO层操作数据库。Service层里有一个方法先查用户是否已领取再查库存是否充足然后扣减库存、插入领取记录、生成优惠券码。看起来没问题但仔细看就会发现几个坑第一它把“查用户是否已领取”和“扣减库存”放在了两个独立的事务里并发情况下可能超领第二它生成的优惠券码是UUID但UUID作为优惠券码太长用户体验不好第三它没有处理“库存扣减成功但插入领取记录失败”的回滚问题。这些问题就是我在描述里没有说清楚的地方。比如“接口需要加分布式锁防止并发超领”这句话AI理解成了“在方法上加一个synchronized”但synchronized只能保证单机并发安全分布式环境下没用。正确的做法是用Redis的setnx或者数据库的行锁来实现分布式锁。4.2 代码生成与第一轮校验AI生成代码之后我按校验清单过了一遍。输入校验方面AI做了用户ID和优惠券ID的非空判断但没做格式校验比如用户ID是否是合法的数字。边界处理方面AI处理了库存为0的情况但没处理库存为负数的情况虽然理论上不会出现但防御性编程应该考虑。异常处理方面AI捕获了数据库异常但异常信息直接返回给了前端可能泄漏内部信息。资源管理方面AI用了数据库连接池但没有显式关闭连接依赖框架自动关闭这个没问题。并发安全方面AI用了synchronized但前面说了这个在分布式环境下无效。性能隐患方面AI在循环里查了用户已领取的优惠券列表虽然这个循环只执行一次但写法上不够优雅。安全漏洞方面AI没有对用户ID做越权校验理论上用户A可以传用户B的ID来领取优惠券。这些问题里最严重的是并发安全和越权校验。并发安全的问题需要重新设计锁方案越权校验的问题需要在Controller层加一层用户身份验证。我把这些问题整理成一段补充描述重新交给AI生成。补充描述里我写清楚了用Redis的setnx实现分布式锁锁的key是“coupon:lock:”加优惠券ID过期时间10秒在Controller层从token里解析用户ID不信任前端传来的用户ID优惠券码用“CPN”加时间戳加随机数生成长度控制在12位以内。第二轮生成的代码质量明显提升。分布式锁的逻辑正确了越权校验加上了优惠券码的格式也符合要求。但还是有一个小问题AI在获取锁之后没有在finally块里释放锁如果业务逻辑抛异常锁会一直持有直到过期。这个问题我在第三轮描述里补充了“锁必须在finally块中释放”AI才改对。4.3 测试用例生成与行为验证代码定稿之后我让AI生成测试用例。AI生成了大概15个用例覆盖了正常领取、重复领取、库存不足、用户不存在、优惠券不存在等场景。我人工补充了三个用例并发领取用两个线程同时请求、数据库异常mock DAO层抛异常、锁获取失败mock Redis返回false。并发领取的测试用例特别重要。我写了一个简单的多线程测试启动10个线程同时请求同一个优惠券每个线程用不同的用户ID。预期结果是只有前N个请求成功N等于库存数量后面的请求返回“已领完”。这个测试跑下来发现了一个问题在库存只剩1张的时候两个线程同时判断库存充足然后都去扣减库存导致库存变成-1。这个问题在单机环境下用synchronized可以解决但分布式环境下必须用分布式锁。我检查了代码发现分布式锁的逻辑是对的但锁的粒度太粗——锁的是整个优惠券而不是具体的库存扣减操作。这意味着同一时间只能有一个用户领取并发性能很差。正确的做法是用数据库的行锁来扣减库存或者用Redis的原子操作来扣减库存。这个问题的发现靠的就是行为验证。如果只看代码你可能会觉得“有锁就行了”但实际跑并发测试才能发现锁的粒度和性能问题。4.4 代码评审与合并最后一轮是代码评审。我把AI生成的代码和测试用例一起提交给团队评审。评审的重点不是代码风格而是三个问题第一这个实现是否真正满足了业务需求第二它的隐含假设是否成立第三如果流量增长十倍它还能正常工作吗评审过程中有同事提出优惠券码的生成方式用了时间戳加随机数理论上存在碰撞可能。虽然概率很低但优惠券码是唯一标识碰撞会导致严重问题。解决方案是在数据库层给优惠券码加唯一索引插入失败时重试。这个建议被采纳了AI重新生成了带重试逻辑的代码。还有一个同事提出分布式锁的过期时间设了10秒但如果业务逻辑执行超过10秒锁会自动释放导致并发问题。解决方案是在锁的value里存一个唯一标识释放锁的时候校验这个标识确保释放的是自己的锁。这个逻辑AI一开始没写对补充描述之后才改对。评审通过之后代码合并到主分支。整个流程从需求拆解到合并大概花了半天时间。如果不用AI这个功能从设计到编码到测试至少需要两天。效率提升是明显的但前提是你得知道怎么描述、怎么校验、怎么补充。5. 常见问题与排查技巧实录5.1 AI生成代码的典型问题速查表问题类型具体表现排查方法解决思路意图偏差代码能跑但逻辑和预期不符对照描述逐条检查补充描述重新生成边界遗漏空值、零值、最大值未处理构造边界输入测试在描述中明确边界条件异常吞没捕获异常后不处理或只打日志检查catch块要求异常必须处理或向上抛并发缺陷共享资源未加锁或锁粒度不当并发测试明确并发场景和锁策略性能隐患循环查库、全表扫描代码审查压测补充性能约束描述安全漏洞注入、越权、信息泄漏安全扫描人工审查补充安全约束描述测试虚假断言太松永远通过检查断言具体性要求断言到字段级别过度设计引入不必要的抽象和模式代码审查描述中不指定设计模式这个表格里的每一类问题我都实际遇到过。其中最常见的是“意图偏差”和“边界遗漏”大概占了所有问题的70%。这两个问题的根源是一样的描述不够精确。所以与其在代码生成之后反复修改不如在描述阶段多花点时间。5.2 描述编写的三个常见误区第一个误区是“描述太抽象”。比如“实现一个高性能的查询接口”这句话AI没法理解。“高性能”是什么标准响应时间100ms还是1s查询条件是什么返回多少条记录这些不说清楚AI只能猜猜出来的结果大概率不符合预期。第二个误区是“描述太具体”。比如“用HashMap存储结果key是用户IDvalue是订单列表用stream的filter方法过滤状态为1的订单”。这种描述把实现细节写死了AI反而没有发挥空间。而且如果你的实现细节有误AI会跟着错。正确的做法是描述“要什么”而不是“怎么做”。第三个误区是“描述有歧义”。比如“查询最近一周的订单”这个“最近一周”是从今天往前推7天还是从本周一到现在不同的人理解不一样AI的理解也可能和你不一致。遇到这种有歧义的词要么换成精确的表述“从当前时间往前推168小时”要么在描述里加一个例子说明。提示写完描述之后自己先读一遍问自己“如果我是AI我会怎么理解这句话”。如果发现可能有多种理解方式就补充说明。这个习惯能省掉很多返工。5.3 测试用例的人工补充策略AI生成的测试用例我一般会补充三类。第一类是“业务规则测试”比如“用户等级为VIP时折扣叠加”、“优惠券过期后不可用”。这类测试需要理解业务规则AI通常生成不出来。第二类是“状态转换测试”比如“订单从待支付变成已支付”、“用户从正常变成冻结”。这类测试需要理解状态机AI可能生成一些状态转换的用例但往往不完整。第三类是“并发和时序测试”比如“两个请求同时修改同一条记录”、“先删后查的时序问题”。这类测试AI基本不会生成因为它不理解并发场景。补充这三类用例之后测试的覆盖率和有效性都会明显提升。我自己的经验是AI生成的测试用例大概能覆盖60%的场景剩下40%需要人工补充。但这40%恰恰是最容易出bug的地方。5.4 团队协作中的AI工具引入策略如果你在团队里负责引入AI辅助开发工具有几个坑要注意。第一个坑是“一刀切”。不要强制所有人都用AI有些工程师习惯了自己写代码强行推广反而影响效率。正确的做法是先在小范围试点让愿意用的人先用起来积累经验之后再推广。第二个坑是“只关注效率”。AI辅助开发确实能提升效率但如果只盯着效率很容易忽略代码质量。我见过一些团队用了AI之后代码量上去了但bug率也上去了。原因是大家觉得“AI生成的代码应该没问题”放松了评审。正确的做法是AI生成的代码评审标准要更严而不是更松。第三个坑是“不积累描述模板”。每个团队的业务场景都有共性比如“查询接口”、“写入接口”、“定时任务”这些场景描述的结构是类似的。如果每次写描述都从头开始效率提升有限。正确的做法是把常用的描述模板沉淀下来新人直接套用老手在此基础上调整。我自己的团队里维护了一份“描述模板库”包含十几种常见场景的模板。新人来了之后先学怎么用模板写描述然后再学怎么根据具体情况调整。这个做法让新人的上手时间从两周缩短到了三天。6. 工具链与工作流把AI嵌入现有工程体系6.1 编辑器层面的AI集成编辑器是AI辅助开发的第一入口。目前主流的做法是在编辑器里装一个AI插件提供代码补全、函数生成、注释生成、代码解释等功能。选择插件的时候重点看三个指标补全的准确率、对项目上下文的理解能力、对私有代码库的支持程度。补全准确率这个指标不同插件差异很大。有些插件只能根据当前文件的内容补全有些插件能根据整个项目的代码风格和依赖关系补全。后者明显更好用因为它生成的代码更符合项目规范。对项目上下文的理解能力体现在它能不能理解你的项目结构、依赖关系、命名习惯。比如你的项目里有一个工具类叫DateUtils你输入DateUtils.的时候好的插件能列出这个类的所有方法差的插件只能给你一些通用的日期方法。对私有代码库的支持程度这个要看插件是否支持本地索引。有些插件需要把代码上传到云端才能提供补全这在一些对代码安全要求高的团队里是不可接受的。选择的时候要确认清楚。6.2 代码评审环节的AI辅助代码评审是AI辅助开发的第二个关键环节。传统的代码评审靠人工看效率低而且容易漏。引入AI之后可以让AI先做一轮自动评审人工再评审AI的评审结果。AI自动评审能发现的问题包括代码风格不一致、明显的逻辑错误、潜在的异常未处理、重复代码、复杂度超标。这些问题人工评审也能发现但AI更快、更稳定。AI自动评审发现不了的问题包括业务逻辑是否正确、架构设计是否合理、性能瓶颈在哪里、安全边界是否清晰。这些问题需要人工判断。所以正确的做法是把AI评审作为第一道过滤人工评审作为第二道把关。AI评审通过的代码人工评审的时候可以重点关注业务逻辑和架构设计不用再纠结代码风格和低级错误。6.3 持续集成中的AI质量门禁持续集成流水线里可以加一道AI质量门禁。具体做法是在代码合并之前让AI对变更的代码做一次分析输出一个质量报告。报告内容包括变更代码的复杂度、潜在的bug风险、测试覆盖情况、与项目规范的偏差。这道门禁的作用不是“阻止合并”而是“提醒风险”。如果AI报告里指出某个变更的风险较高评审人就需要更仔细地看。如果风险较低评审人可以快速通过。设置门禁阈值的时候不要设得太严。如果每次合并都被拦住大家会想办法绕过门禁反而失去了意义。我的经验是只对“高风险”的变更做拦截比如涉及资金、权限、核心数据的变更。其他变更只做提醒不做拦截。6.4 知识沉淀与描述模板库建设前面提到了描述模板库这里展开说一下怎么建。模板库的内容包括场景名称、描述模板、示例、常见坑。场景名称要具体比如“分页查询接口”、“批量导入接口”、“定时对账任务”不要用“查询”、“写入”这种太宽泛的词。描述模板要包含四层结构功能、约束、异常、架构。每一层用固定的句式方便填写。比如功能层用“实现一个XX接口输入XX输出XX”约束层用“必须满足XX条件”异常层用“当XX时返回XX”架构层用“这个接口是XX操作需要XX保证”。示例部分放一个完整的描述和对应的AI生成代码让新人能直观看到“好的描述长什么样”。常见坑部分记录这个场景下AI容易犯的错误比如“分页查询容易忘记处理总数”、“批量导入容易忘记事务回滚”。模板库建好之后要定期更新。每次发现新的坑就补充进去。每次优化了描述方式也更新进去。这样模板库会越来越完善团队的AI辅助开发效率也会越来越高。注意模板库不要追求大而全先覆盖最常用的五六个场景用起来之后再逐步扩展。一开始就搞几十个模板没人看得过来反而成了摆设。7. 能力转型AI时代软件工程师的必修课7.1 从“写代码”到“读代码”的能力升级AI时代写代码的门槛降低了但读代码的门槛提高了。因为AI生成的代码量远大于人工编写的代码量你需要快速判断一段代码的质量、意图、风险。这个能力比写代码更难培养。读代码的能力包括三个层次。第一层是“语法层”能看懂代码在做什么。这个层次大部分工程师都没问题。第二层是“逻辑层”能判断代码的逻辑是否正确、边界是否处理。这个层次需要一定的经验积累。第三层是“架构层”能判断代码在整体架构中的位置是否合理、依赖关系是否清晰、扩展性是否足够。这个层次需要深入的架构理解。AI生成的代码往往在语法层没问题在逻辑层有一些小问题在架构层可能有大问题。所以读代码的重点应该放在逻辑层和架构层。我自己的习惯是拿到AI生成的代码先不看具体实现先看它的类结构、方法签名、依赖关系判断架构是否合理。架构没问题再看具体逻辑。7.2 从“实现能力”到“判断能力”的价值迁移过去评价一个工程师很大程度看他“能不能实现”。现在这个标准正在失效因为AI能实现大部分功能。新的标准变成了“能不能判断”——判断AI的实现是否合理、判断风险在哪里、判断什么时候该用AI、什么时候不该用AI。判断能力的核心是“知道什么是对的”。这句话听起来像废话但实际操作中很多工程师说不清楚“为什么这段代码好”或者“为什么那段代码不好”。他们凭直觉判断但直觉往往不可靠。培养判断能力的方法是不断对比。拿AI生成的代码和人工编写的代码对比拿不同AI生成的代码对比拿AI生成的代码和最佳实践对比。对比的过程中你会逐渐形成自己的判断标准。这个标准就是你在AI时代的核心竞争力。7.3 从“个人效率”到“团队效能”的视角扩展AI辅助开发个人效率的提升是显而易见的。但团队效能的提升需要更多的思考和设计。因为AI生成的代码如果风格不统一、质量参差不齐反而会增加团队的协作成本。团队效能的关键在于“标准化”。描述模板要标准化代码风格要标准化评审流程要标准化测试策略要标准化。标准化之后AI生成的代码才能无缝融入现有工程体系团队的整体效率才能提升。我自己的团队里推行了一套“AI辅助开发规范”内容包括描述模板的使用方法、AI生成代码的评审标准、测试用例的补充要求、质量门禁的阈值设置。这套规范推行了三个月团队的代码交付效率提升了大概40%bug率没有明显上升。7.4 持续学习AI工具迭代下的知识更新AI工具迭代很快今天好用的插件明天可能就被替代了。所以持续学习的能力比掌握某个具体工具更重要。持续学习的重点不是学某个工具的具体操作而是学“AI辅助开发的底层逻辑”。比如怎么写出好的描述、怎么校验AI生成的代码、怎么设计测试用例、怎么把AI嵌入工作流。这些底层逻辑不会因为工具的变化而失效。我自己的学习方法是每季度花一天时间把主流的AI辅助开发工具试一遍看看有没有新的功能、新的用法。然后花半天时间把新学到的东西整理成文档更新到团队的规范里。这个习惯坚持了一年多团队的AI辅助开发能力一直保持在比较高的水平。提示不要盲目追新工具。新工具出来之后先在小范围试用确认能解决实际问题再推广。很多工具看起来功能很炫但实际用起来还不如老工具稳定。8. 踩过的坑与实战心得8.1 过度依赖AI导致的架构失控我遇到过最严重的问题是过度依赖AI导致架构失控。当时做一个新模块为了赶进度几乎所有代码都让AI生成。每个功能单独看都没问题但合在一起就发现模块之间的依赖关系混乱有的地方循环依赖有的地方职责不清有的地方重复实现。问题的根源在于AI只关注“当前这个功能怎么实现”不关注“这个功能在整体架构中的位置”。如果你不提前设计好架构AI就会按照自己的理解去组织代码最后出来的东西就是一堆能跑但没法维护的代码。后来我调整了做法架构设计必须人工完成AI只负责在既定架构下实现具体功能。架构设计包括模块划分、接口定义、依赖关系、数据流向。这些定清楚之后再让AI去实现每个模块的内部逻辑。这样出来的代码结构清晰维护成本低。8.2 描述不清导致的反复返工描述不清是AI辅助开发中最常见的问题。我统计过自己的返工记录大概60%的返工是因为描述不清导致的。描述不清的表现包括需求边界模糊、异常处理没说明、性能要求没提、安全约束没写。返工的代价很大。每次返工你都要重新写描述、重新生成代码、重新测试。如果返工三次以上总耗时可能比人工写代码还长。所以与其在返工上浪费时间不如在描述上多花时间。我的做法是写描述的时候用“检查清单”过一遍功能说清楚了吗约束说清楚了吗异常说清楚了吗架构说清楚了吗性能要求提了吗安全约束提了吗这个清单过一遍描述的质量会好很多。8.3 测试不足导致的线上问题AI生成的代码测试不足是一个普遍问题。因为AI倾向于生成“正常路径”的测试对异常路径和边界条件的覆盖不够。如果直接上线很容易出问题。我遇到过一次线上问题一个查询接口AI生成的代码在正常输入下没问题但当查询条件为空时它返回了全表数据。这个bug在测试环境没发现因为测试数据量小全表返回也就几百条。但线上数据量是百万级全表返回直接导致接口超时。这个问题的根源是AI没有处理“查询条件为空”这个边界情况。而我的测试用例也没有覆盖这个场景。后来我补充了边界测试用例并把这个场景加到了描述模板里。8.4 团队推广中的阻力与应对在团队里推广AI辅助开发遇到的阻力主要来自两方面。一方面是“不信任”有些工程师觉得AI生成的代码不可靠宁愿自己写。另一方面是“不会用”有些工程师不知道怎么写出好的描述用了几次觉得不好用就放弃了。应对“不信任”的方法是用数据说话。我收集了AI辅助开发和人工开发的对比数据代码交付时间、bug率、代码评审通过率。数据显示AI辅助开发的交付时间缩短了40%bug率没有明显上升。这些数据比任何说服都有效。应对“不会用”的方法是做培训和示范。我组织了几次内部培训演示怎么写出好的描述、怎么校验AI生成的代码、怎么补充测试用例。培训之后还安排了一对一的辅导帮大家解决实际使用中的问题。大概一个月之后团队里大部分人都能熟练使用AI辅助开发了。8.5 个人效率提升的实测数据最后分享一下我自己的效率数据。我记录了过去半年里使用AI辅助开发和纯人工开发的对比。数据如下任务类型纯人工耗时AI辅助耗时效率提升简单CRUD接口2小时40分钟67%复杂业务逻辑1天4小时50%测试用例编写3小时1小时67%代码评审1小时30分钟50%文档编写2小时40分钟67%这些数据是平均值具体任务会有差异。但整体来看AI辅助开发的效率提升在50%到70%之间。这个提升幅度在软件工程的历史上算是比较大的了。但要注意的是效率提升的前提是“会用”。如果描述写不好、校验不仔细、测试不补充效率可能不升反降。所以花时间学习怎么用好AI是值得的。这个内容后续还可以这样扩展如果你对AI辅助开发的质量保障感兴趣可以进一步研究“AI生成代码的静态分析”和“AI辅助的自动化测试生成”。这两个方向目前还有很多值得探索的空间。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑