1. 开局思路:AI写代码,不是玄学,是工程
先不整那些虚的,直接说结果:我用AI写代码写了快两年,从最早只会让它生成个冒泡排序,到现在整个模块的骨架、单元测试、文档注释、甚至SQL调优建议全交给它处理,每天省下来的时间至少一个半小时。以前每周总有两天加班到九点十点,现在基本能准点下班,代码质量反而更稳了。
但你如果以为AI写代码就是“把需求甩给它,它咣当给你一段能跑的代码”,那大概率会碰一鼻子灰。我见过太多同事兴冲冲装上工具,用了两天就卸载,理由是“它写的代码有bug”“它不理解我的项目结构”“还不如自己手敲快”。说实话,这些我都遇到过,问题根本不在AI,而在用法没到位。
这篇文章就是冲着“职场程序员”这个身份去的——不是教你怎么用一个玩具,而是教你怎么把AI编程工具真正嵌进日常开发流程里,让它变成一个随叫随到的结对编程搭档。内容会覆盖5个核心技巧:提示词怎么写才不模糊、上下文怎么喂才不跑偏、多AI怎么协作才不互相打架、AI Review怎么用才不流于形式、测试和文档怎么自动生成才省心。
适合谁看?工作两三年的后端或前端,以及团队里负责提效的Tech Lead,还有那些刚接触AI编程工具、正处在“用了但觉得没用”阶段的同学。不管你是用Copilot、Codex、通义灵码还是国内各种智能体,思路都是通用的。
先说一个最容易被忽略、但决定成败的前提:AI写代码的产出质量,上限取决于你的输入质量。它不是你肚子里的蛔虫,不会自动知道你的项目结构、编码规范、历史包袱。你给它多少有效信息,它就还给你多少有效代码。这不叫“玄学”,这叫工程。
好,接下来我把这5个技巧一个一个拆开讲,每一步都给出可以直接抄作业的模板和踩坑提醒。
2. 技巧一:把提示词当成给实习生写任务说明书
2.1 为什么你写的提示词让AI产生幻觉
很多人觉得提示词就是“把需求说得详细一点”。这话对,但不够。我见过最典型的失败案例是这句话:“帮我写一个用户登录接口。”AI收到这句话,会怎么做?它大概率给你返回一套标准的Spring Boot+JWT+MySQL代码,逻辑看着很完整,能跑,但和你的项目实际用的框架版本、包名、返回结构、异常处理方式,全都不搭。你把这段代码拷进项目,编译报错一片红。然后你得出结论:“AI编程不过如此。”
问题出在哪?出在你给的需求不是一个“任务说明书”,而是一句“口头禅”。想想你带实习生的时候,是不是也不敢只丢一句“把用户登录做一下”?你肯定得交代:用什么框架、要不要验证码、token有效期多久、密码加密算法是什么、数据库表叫什么、返回格式是什么、异常怎么处理。AI也一样,它接收的信息越模糊,就越会动用自己训练数据里的“平均经验”来补齐细节——而那个平均水平,往往和你的项目完全不匹配。
我自己的经验是:写提示词之前,先默念三遍“我是在给一个聪明但完全不了解这个项目的实习生派活”。用这个心态去写,提示词的啰嗦程度就对了。
2.2 三段式模板:角色+背景+输出格式
我所有写代码相关提示词,基本都套这个模板:
- 第一段,给AI一个角色定位。不需要什么“你是世界级架构师”这种虚的,但一定要说明“你是一名熟悉Java Spring Boot的工程师”或者“你是一名熟悉Vue3+TypeScript的前端开发”,这能帮它调整知识库的调用方向。
- 第二段,背景上下文。包括项目用的什么框架、什么版本、数据库表结构、已有的相似代码长什么样、有没有什么历史包袱。这里关键是给“约束条件”,比如“项目里禁止使用fastjson,统一用Jackson”“返回值统一用Result.wrap()包装”。
- 第三段,明确输出的形式。是要完整代码文件,还是只给核心逻辑片段?是要求附上测试用例,还是要按照指定目录结构给多个文件?输出之后要不要补充解释?
举个例子,我在实际项目里常用的模板长这样:
你是一名熟悉Java后端开发的工程师,精通Spring Boot 2.7和MyBatis-Plus。 我有一个订单模块,数据库表order_info包含字段id、order_no、user_id、amount、status、created_at、updated_at。项目统一使用Result对象包装返回值,错误码参考ErrorCodeEnum枚举。所有时间字段使用LocalDateTime。 现在请你帮我完成以下功能:根据user_id分页查询订单列表,支持按状态筛选,并按照created_at倒序排序。注意amount字段单位为分,需要转换输出为元。命名规范:Service方法以query开头,Mapper方法直接写SQL。 输出要求:给出OrderQueryDTO、OrderService、OrderMapper的完整Java代码,并在每个类上方用中文注释说明关键设计点。最后给出一个单测示例。这个提示词看起来很啰嗦,但实测效果非常好。AI给出的代码基本可以直接放到项目里跑,最多改掉一些边角细节。这比你来回纠错、自己改半天快太多了。
2.3 参数与细节的“锚定效应”
补充一个心理学上的原理,其实和写提示词完全相通:“锚定效应”——你先給出来的具体数值、具体规范,AI会倾向于围绕这些值展开,而不是自由发挥。比如你提到“amount字段单位为分”,它就会在生成的代码里主动帮你做单位转换;你提到“错误码参考ErrorCodeEnum”,它就有意识地用你的枚举而不是自己瞎编一个。
这个技巧尤其适合处理那些“行业常识”和“项目实际”不一致的地方。新手最容易翻车的就是让AI生成一套“标准的”代码,结果里全是通用做法,不贴合你的业务。所以,在提示词里把所有可能的“锚点”都摆出来——数据库字段名、类名、接口路径、返回码、异常类,能列多少列多少。
操作上还有个细节:如果你用的是国内那些网页版智能体,比如通义灵码网页版或Codex的对话界面,建议先花一次对话把项目信息“喂”进去(后面技巧二会细说),再开新对话让它干活。每次开新任务之前,把上一轮的关键结论重新粘贴一遍,别偷懒。AI的上下文窗口是有限的,你省那几行字,它就会给你“自由发挥”。
3. 技巧二:上下文喂得饱,AI才能答得对
3.1 把项目“家底”交给AI:文件结构+依赖+代码风格
技巧一解决的是“单个任务怎么描述”,技巧二解决的是“AI怎么了解你的项目背景”。很多人在对话式AI工具(比如Codex、ChatGPT的代码模式)里使用AI时,从来没想过要把项目信息告诉AI,开箱就问“帮我写个登录”,这是大忌。
一个可行且常见的做法是,在和AI协作的前5分钟,先把项目的“家底”目录给它:
这是一个Spring Boot项目,包名是com.example.order,Java 8,依赖了下面这些核心库: - spring-boot-starter-web 2.7.0 - mybatis-plus 3.5.0 - lombok 1.18.24 - xxl-job 2.3.0(用于定时任务) 包结构如下: com.example.order ├── controller ├── service ├── mapper ├── entity ├── dto └── common controller层的统一父类是BaseController;异常由GlobalExceptionHandler统一处理;返回结果统一使用Result.wrap(data)。 代码风格要求:Controller只做参数校验和路由转发,不写业务逻辑;Service接口命名是XxxService,实现类命名是XxxServiceImpl。这串东西不是让你一个字一个字敲,而是让你复制项目里的pom.xml(或package.json)的依赖列表、目录结构树、以及一个典型Controller的代码片段,一起粘贴进去。信息密度大、真实有效。
这个动作做了之后,你后面让AI生成的代码就能自动匹配上你们项目的包名、依赖、分层习惯。实测下来,配合度能提升一大截。没有这一步,AI就等于一个刚从学校毕业的实习生,虽然聪明,但对你们的代码库一无所知。
3.2 Token预算:给关键信息排优先级
这里要说到一个硬核概念——Token。Token是大模型处理和生成文本的基本单位,简单理解就是“字的碎片”。你的输入、AI的输出都会消耗token,而且每次对话总的处理量有一个上限(语义上可以理解成AI的“工作记忆”是有限的),超出之后,前面的内容就会被“遗忘”。
所以,向AI喂上下文的时候,不能无限堆。我个人的优先级排序是这样的:
- 最重要的信息:项目技术栈和版本号(影响API调用方式)、包名和目录结构(影响生成代码能不能直接跑)、核心统一返回/异常处理类(影响代码风格)。
- 中等重要:本次任务涉及的具体表结构、字段含义、关联关系。
- 最低优先级:历史上踩过的坑、公司级代码规范细节、一些边角料的配置文件。
如果你用的是IDE里的AI插件,比如JetBrains全家桶里的GitHub Copilot,它天然能读取你打开的文件内容,这个“喂上下文”的问题会轻一些。但对话式AI工具(Codex、ChatGPT、通义灵码网页版、智能体)没有这个优势,你必须主动喂。
还有一个很实用的习惯:每当开始一个新任务,就把旧对话里那些已经达成共识的“项目背景”重新发一遍。虽然麻烦,但是稳定。你省下的那两分钟,会在AI返回一堆驴唇不对马嘴的代码时加倍还给你。
3.3 代码块注释法:用注释“暗示”AI你的意图
这个方法是我用得最顺手的一个细节技巧。很多时候你不需要写一大段提示词,只需要在你打开的文件里、你要插入代码的位置,写上几行“写给AI看的注释”,IDE插件就能心领神会。
比如在方法体里先写这几行:
// TODO: 查询订单列表,条件:userId + status,按createdAt降序 // 分页:使用MyBatis-Plus的Page对象 // 返回:Page<OrderVO>然后换行开始敲代码。Copilot这种IDE插件通常会根据你的注释,立刻给出一整段实现。这个技巧在写胶水代码和样板代码时尤其好用——你不用费劲描述什么技术栈,因为AI已经读了文件上下文;你只需要描述精确意图。
代价就是你得改掉“有了工具就不写注释”的习惯。反过来想,反正每天本来就要写注释的,只多花10秒钟写具体一点,AI就直接帮你把方法体给补齐了,这买卖不亏。
4. 技巧三:多AI协作与AI Agent的流水线打法
4.1 一个AI负责想,一个AI负责写,一个AI负责审
不知道你有没有这种感觉:让同一个AI既做方案设计又写代码又自查,出来的东西总有一股“自卖自夸”的劲儿——它很难发现自己的错误,因为它是按照同一套“脑回路”生成的内容。就好像你让同一个同事既写代码又做code review,他大概率会遗漏掉自己的思维盲区。
后来我尝试了一个多AI协作的流水线,效果出奇地好,思路是“角色分离”:
- 方案设计AI:让通用对话型AI(比如ChatGPT、Claude、通义千问)负责拆解需求、整理技术方案、分析风险。
- 代码生成AI:让代码生成型AI(比如Codex、Copilot、CodeWhisperer类插件)根据方案写具体实现。
- 代码审查AI:再让另一个AI(或者同一个AI换一个角色设定)来Review这段代码,专门从“挑刺”角度找问题。
举个例子,我上一家公司有个订单导出功能,技术方案涉及异步任务+流式下载+内存控制。我先用方案AI整理了一套流程,明确要用xxl-job做异步、用EasyExcel做流式写、限制单次导出上限。然后我把这套方案的要点作为提示词,让代码AI去实现。最后把生成好的代码丢给审查AI,问它“这段代码在高并发场景下有什么内存问题?有哪些边界情况没处理?事务控制有没有漏洞?”
三步走下来,代码里90%的低级细节问题,在合入主干之前就被干掉了。以前我把代码发出去Review,被同事挑毛病挑到怀疑人生,现在至少能保证自己交出去的东西是体面的。
4.2 AI Agent:让智能体帮你跑完整条流水线
“AI Agent”是这两年的高频词。说白了,Agent就是一个能自己规划步骤、自己调用工具、自己判断结果、循环执行的智能体。它比普通对话AI多了一个“行动能力”,能够在你的授权下,从一个简单的任务描述展开为一系列操作步骤。
拿热词里提到的“写代码比较好的智能体”来说,现在主流的做法就是让Agent去完成一整个任务的闭环。比如你可以跟智能体说一句“请查看order模块的代码,找出金额计算相关的所有方法,并检查有没有精度丢失问题,输出一份分析报告”。智能体会自己去读取文件、分析代码、整理问题,最后给你一份报告。
实测下来,这种Agent在处理“重复性较高的代码改造”场景里最香。比如全项目把Date换成LocalDateTime、把fastjson换成Jackson、统一日志格式、统一异常处理,这类工作,让Agent去干,你能省下一整天的时间。
但注意,Agent不是万能的。它容易在复杂业务逻辑里“主线发散”——本来让它改A模块,它中途自己觉得B模块也有问题,顺手就改了。所以用Agent的时候,任务边界一定要画清楚,并且在它有自主行动苗头的时候及时在提示词里外挂一句“只处理我指定的文件,不要修改其他文件”。
4.3 工具选型:IDE插件、网页智能体、命令行工具怎么互补
很多人的误区是“只用一个工具”,但实际情况是不同工具各有特长。
- IDE内联工具(Copilot/Codeium/通义灵码插件):最大的优势是自动读上下文,最适合做“补全当前函数”“生成相似代码块”这种颗粒度小的任务,效率最高。缺点是,它很难一次性搞定跨文件的大型重构。
- 对话式模型(ChatGPT/Claude/通义千问等):适合设计方案、理清思路、生成跨多个文件的代码框架。配合技巧二去喂上下文,效果很好。
- 终端Agent(如Codex CLI这类):适合处理命令行级任务,比如“批量给所有Controller加统一日志切面”“扫描全项目找出所有未处理异常的代码”。它的优势是能动性,能帮你批量操作。
我的习惯是,写新文件的时候打开对话式AI,让它先出框架;写函数体的时候切到IDE插件,让它自动补全;做批量改造的时候上Agent。这三层配合起来,才是完整的“AI编程工作流”。很多人只停留在IDE插件这一层,自然体会不到效率翻倍的感觉。
5. 技巧四:让AI来Review代码,专抓低级错误
5.1 AI Review能查出什么:从空指针到边界条件
写代码的人都知道,自己看自己的代码容易“选择性失明”——你脑子里想的是“我要实现什么”,眼睛就会自动忽略“我代码里实际写了什么”。很多低级错误,比如可能为null的对象没有判空、for循环的边界写多了一位、异步线程里用了非线程安全集合、事务方法里捕获了异常导致回滚失效,这些问题让同事帮你review之前,AI其实就能先扫一轮。
我常用的做法是,把一段写好的代码直接丢给一个“扮演Reviewer”的AI,提示词类似这样:
你是一名经验丰富的Java代码审查员,请仔细审查下面这段代码,重点关注: 1. 是否存在NPE(空指针)风险 2. 事务执行过程中是否有可能被异常打断导致回滚失败 3. 并发场景下有没有线程安全问题 4. 有没有资源泄漏(连接、流等未关闭) 5. 边界条件是否需要补判 6. 有没有明显的SQL性能隐患 请按【问题位置】→【问题描述】→【修改建议】的格式输出,不要输出代码之外的废话。这一步的价值在于,AI审代码就像一台“工艺检查机”,它能把你代码里90%的标准化低级问题给筛出来。注意我说的是“标准化问题”,比如容易数组越界、判空遗漏、异常吞掉、资源泄漏等,这类问题特征是“有明确对错”,AI训练语料里见得够多,查得很准。
至于那些业务上的合理性、架构层面的设计缺陷,AI的能力还没到那个份上,这部分就别指望了。你要做的,是让AI把低级问题过滤掉,把高级问题的处理时间留给你和同事。
5.2 只挑刺不重写:Review模式的3个设置项
用AI做Review,有一个关键心态:你不是要让AI帮你“重新写一遍代码”,而是让它“挑毛病”。如果你让它“改进这段代码”,它可能把整段逻辑给你重写了,结构大变,不是你写的风格了,反而增加你review自己改动的工作量。我给自己的规则是:只让它输出问题和建议,不生成整段修改后的代码。
以下几个设置项很重要:
- 限定输出格式:要求它按“[行号 问题描述 修改建议]”的结构输出,方便你定位。
- 限定问题类型:让它在“正确性、健壮性、性能、可读性”里选,别什么都扯上。
- 限定审查重心:根据某次提交的目的来设置,比如这次重点是“处理并发”、下次重点是“SQL优化”,不要让它泛泛而看。
顺便吐槽一句,AI在Review这块有时候会“幻觉式挑刺”——它可能会指出一个根本不是问题的问题。比如明明代码里已经做了判空,它还说有NPE风险。这时候只能靠你自己的判断力去过滤,AI Review有价值,但绝不能完全替代人的判断。
5.3 用AI把不规范的提交信息也管起来
这算是额外赠送的一个小技巧,但它对团队协作的体感提升特别大。我见过很多程序员,代码写得漂漂亮亮,Commit Message却只有两个字“修改”“更新”。这会害了以后维护代码的人——三个月后git log里全是“修改”,谁也记不清当时改了什么。
我也把生成Commit Message这事儿交给了AI。用工具(比如git commit插件或者对话式AI)把本次改动的diff粘贴给它,让它按“类型(范围): 简述”的格式生成规范信息。命令如下:
git diff --stat git diff // 把diff内容直接复制给AIAI会给你一个类似fix(order): 修复订单列表状态筛选时金额单位转换错误的信息,一眼就能看懂。这活儿手动干很烦,交给AI刚好。团队里如果推行这个习惯,提效立竿见影,而且代码评审人光看commit就知道要重点查哪里了。
6. 技巧五:AI批量生成测试用例和文档,下班才能准点
6.1 测试用例生成:从“不想写”到“让它一口气写”
说起单测,估计不少人的表情都是“能拖就拖”。测试代码本身不产生业务价值,但少写了,后面回归测试的时候哭的就是你。AI在写单测这个场景里,真的是降维打击——因为大多数单测都是固定的套路组合:构造入参、调用方法、断言结果、验证mock交互。
我的常规操作是这样的,写完一个Service类之后,马上把这个类丢给AI,附带上关键的上下文。提示词一般长这样:
请为这个UserService类的每个公共方法生成JUnit 5单元测试。 要求: - 使用Mockito做依赖模拟,不启动Spring上下文 - 覆盖正常路径、空参数、业务异常三个分支 - 测试方法命名用shouldReturn...When... - 只输出测试代码,不要解释AI会在几秒钟内生成十几个测试方法,覆盖面还很全。我拿到之后简单看一眼,补充一两个它想不到的业务边界情况,就完成了。以前写一个类的单测要一个小时,现在十分钟搞定,质量还比我自己手写的更稳定。
这里有个经验,就是测试代码让AI生成的时候,上下文很重要。你不告诉它某个方法的输入输出是什么,它只能猜。所以,要么直接把方法实现代码也贴给它,要么给字段含义说明。总结一句话:AI写单测的成功率,取决于你给它的被测代码的完整程度。
6.2 生成文档:接口说明、数据库注释、README
程序员普遍不喜欢的活儿,除了单测,就是写文档。但现在AI把这块也代劳了。我个人用到最多的场景有几个:
- 接口文档:把Controller代码直接丢给AI,让它生成OpenAPI/Swagger注解,或者生成一份Markdown格式的接口清单,包含路径、入参、出参、错误码。这个直接能贴到外部的协作文档里。
- 数据字典:把建表SQL丢给AI,让它生成每张表、每个字段的注释说明,按Table → Field → Type → Comment列表格式输出。加字段时再也不会有人想半天“这个字段是什么意思”。
- README:把项目结构、启动方式、核心配置、对外依赖一股脑丢给AI,让它生成一份像样的 README。刚接手别人项目的时候,这招特别好用。
AI生成文档有个通病,就是“书面味道太重、容易跑偏”,比如它会把没实现的功能也写上去。所以我现在的文档流程是:让AI生成初稿 → 我改15分钟 → 完事。原先要花两小时的文档,现在半小时搞定,而且AI生成的那部分整体结构比我手写的更有条理,至少不会漏掉大发。
6.3 一个实战组合:新需求从聊天到提测的全流程
为了让你对整个过程有直观感受,我分享一个近期做过的真实案例。
需求很普通:给后台加一个“导出运营报表Excel”的接口,支持按时间范围、渠道来源筛选,导出总量限制5万条。放在以前,我的流程大概是:设计SQL → 写导出代码 → 写异步任务 → 写单测 → 写接口文档,总计大概需要一天半。
这次我用了AI流水线:
- 用对话式AI设计方案,重点让它对比“同步导出 vs 异步导出”的选择,还提醒了我导出量大时内存溢出的风险和用临时文件方案。
- 让IDE插件在Service里根据注释生成导出核心逻辑,包括数据分批查询和EasyExcel的分批写操作。
- 让AI补齐Controller、异步任务、导出记录表的Mapper。
- 让ReviewAI审查这堆代码,果然查出来一个“分页查询时只判断了list为空,没判断total为0”的问题。
- 让AI生成单测和接口文档,人工补了一版异常码说明。
结果半天不到,功能就完成了,代码还交得特别体面。同事看着半天干完一天半的活儿,直接问我“你是不是不加班”。哪是不加班,是工具用得对。
7. 常见问题与排查技巧实录
7.1 AI生成代码里的“幻觉依赖”,怎么发现和拦截
所谓的“幻觉依赖”,就是AI会一本正经地生成实际上根本不存在的类名、方法名、依赖包。比如它给你生成import com.example.common.DateUtils;,但你的项目里根本没有这个类。它会用“看起来合理但其实纯属编造”的库或工具类来填补空白。
这个问题在任何模型里都无法完全消除,关键在于拦截。我的做法是,AI生成完代码之后,先全局搜索一遍它import进来的第三方包,确认全部在pom.xml(或package.json)里出现过。如果没有,要么让AI改用已有工具类,要么自己把那块逻辑替换掉。这个检查流程30秒就能完成,但能避免你被一堆“NoClassDefFoundError”炸得头皮发麻。
7.2 同样的需求,为什么不同AI工具出来的代码质量差距很大
这个问题的答案很直接:因为训练数据侧重、模型参数、上下文窗口、提示词敏感度都不一样。有些模型在“代码补全”场景下训练得更充分,你在IDE里让它补函数体,它会很跟手;有些模型在“长上下文对话理解”上更强,你给它一个多文件的任务背景,它处理得更好。
我的经验是别家一种模型用到底。在IDE里,首选那种代码补全手感好、响应快的工具;在对话中,优先那种逻辑分析、长文档理解能力强的模型。还要提醒的是,工具的版本更新也很快,新版本常常在代码能力上有明显提升,值得每半年重新评估一下手里工具的能力边界。
7.3 踩坑记录:让AI重构老代码的3个“事故”,引以为戒
AI不是万能的,尤其面对历史复杂度缠在一起的老代码。我踩过几次坑,印象特别深:
第一次,让AI重构一个Service里300行的大方法,目标是把逻辑拆成几个私有方法。结果AI把原本正常的事务行为给弄丢了,因为我没告诉它这个方法有@Transactional注解,“方法内部互相调用导致事务失效”这个经典坑,AI照样踩。从那以后,凡是要动的方法,我都会先在提示词里强制声明“这个方法有事务注解,拆出来的私有方法不影响事务”。
第二次,让AI优化一段SQL,本意是让它加索引提示。结果AI“优化”后的SQL改变了一个业务过滤条件,查出来的数据范围变了,差点上线出事故。从那以后,涉及业务正确性的逻辑改动,我都要求AI“必须逐行解释每一处改变,否则视为修改错误”。
第三次,让AI自动修一个bug,它修好了这一个,却把一个正常功能给改没了。原因还是那个:它没有完整理解代码的意图,凭“最可能的修复”去改了。现在我对AI生成的大逻辑改动,一律要求它先输出“你打算怎么改、会有什么影响”,我再决定要不要执行。
这三个事故,本质上都指向同一个教训:AI是一个强大的引擎,但是方向盘和刹车得握在自己手里。永远不要在没看懂AI改了什么的情况下,就把代码交给测试。
8. 关于“AI是否取代初级程序员”的一点个人看法
这个话题几乎每个程序员群里都会聊到。说实话,我觉得“取代”这个词太极端了,更准确的说法应该是“淘汰那些只做低水平重复劳动的人”。如果一个人每天的工作就是写CRUD接口、写简单的页面、调个SQL、改几个样式,那这些活AI确实已经能做得又快又好。老板不会蠢到放着免费的AI不用,非要花钱雇一个人干同样的事。
但反过来说,AI对初级程序员带来的不一定全是坏消息。它更像是一个杠杆:一个懂业务、会写提示词、会审查代码、会评估风险的初级程序员,用上AI之后,产出的量和质都可能逼近一个中级甚至高级程序员。我自己带的几个刚满一年的校招生,配合AI工具干活,效率比我们当年快多了。这说明什么?说明AI不是来砸饭碗的,是来重新划分“能力坐标系”的。原来的坐标系里,你们比的是打字速度、API熟练度;现在的坐标系里,比的是谁更会用工具、谁更会拆解问题、谁更懂业务本质。
所以我的态度很明确:不要焦虑AI取代初级程序员,但要焦虑“只会按回车写代码、从不思考的人”。如果你还在担心,那就从今天开始,把这篇里提到的5个技巧挨个用起来,成为那个“会用AI的人”。
我个人在实际操作中还有一个体会:用AI写代码最大的敌人不是AI出错,而是你懒得追问为什么。它给你一段代码,你拿过来直接跑通就完事,这跟当年遇到问题百度一下复制粘贴没什么本质区别。真正有价值的用法是,让AI解释它的设计思路,你评估这个思路是否贴合你的场景,而不是无条件照单全收。这样做两三个月之后,你会发现自己对系统的理解深度、对代码质量的敏感度,都比以前提升了一大截。
最后再分享一个小技巧:每周花半个小时,把你这周让AI完成的任务记录一下,统计一下哪些类型的任务AI做得又快又好,哪些类型总是需要你返工。通过这个复盘,你就能慢慢摸清AI的能力边界。用得越准,加班越少。