AI 写的代码,你敢上线吗?

最近几个月,我开始习惯用 AI 写代码

说实话,一开始真的很爽。

一个功能,描述一下,AI 很快就给你一版能跑的:

  • 接口写好了
  • 数据结构补齐了
  • 连异常处理都帮你想好了

有时候甚至连你没想到的细节,它都提前补上。

那一刻你会有一种感觉:

写代码这件事,好像突然变得不值钱了。

但用着用着,我慢慢开始感觉不对劲。

不是写代码变慢了,而是,项目后面越来越痛苦。

-****01-

**开发确实更快了 **

以前一个需求,大致节奏是这样的:

<pre data-start="378" data-end="417" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important;">

需求梳理 ↓ 开发实现 ↓ 联调测试 ↓ 修 bug ↓ 上线

</pre>

虽然慢,但整体是 稳步推进

现在的节奏变成了:

<pre data-start="450" data-end="493" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important;">

想个大概 ↓ AI 一顿生成 ↓ 页面已经跑起来 ↓ 然后开始怀疑人生

</pre>

你会逐渐发现:

  • 有些边界你根本没想过
  • 有些逻辑 看起来对,其实不对
  • 改一个地方,另外两个地方开始出问题

最痛苦的一点是:

你不是在修 bug,你是在重新理解这个系统。

而这个系统,

一开始其实不是你完整设计的。

AI 最大的问题不是写错,而是“看起来没错”

这点我踩过很多次坑。

AI 写出来的代码,很少是明显错误的。

大多数情况是:

  • 能跑
  • 逻辑顺
  • 结构甚至还挺优雅

但问题在于:

AI 默认你的需求是清晰的。

可现实是:

很多需求其实是模糊的。

比如产品一句话:

“这个功能大概这样那样就行。”

而你脑子里其实也只有一个模糊轮廓。

于是 AI 做了一件非常危险的事:

把一个模糊的想法,变成一个看起来合理的实现。

然后你会产生一种错觉:

“好像差不多了。”

但其实:

差得远。

[图片上传失败...(image-2ae7f1-1774864875622)]

-****02-

**最扎心的一点 **

你开始不完全理解代码

以前代码是自己一行一行写的。

你心里其实是有数的:

  • 为什么这么设计
  • 边界在哪里
  • 哪些地方容易出问题

但现在很多时候是:

<pre data-start="1025" data-end="1063" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important;">

AI 给一大段代码 ↓ 你大概扫一眼 ↓ 能跑 ↓ 合进项目

</pre>

短期看效率很高。

但只要后面改动一点,你就会发现:

你对这段代码的掌控力,其实是弱的。

这种感觉很像什么?

接手别人写的老项目。

只不过这个“别人”,是 AI。

测试突然变成“救命工具”

以前我对测试的理解是:

保证质量。

但现在越来越觉得:

测试其实是在帮你补你没想清楚的东西。

因为现在很多项目的问题是:

  • 需求没完全想清楚
  • AI 不会主动追问需求
  • 开发阶段直接就生成完了

那最后谁来兜底?

只能是测试。

但问题又来了:

测试拿到的其实是一个,

边界不清晰的系统。

于是就会出现:

  • 测不全
  • 测到一半发现逻辑本身就有问题
  • 来回反复修改

[图片上传失败...(image-e1e7bd-1774864875622)]

-****03-

AI Agent 更夸张

如果只是普通业务代码,其实还能控制。

但最近在做 AI Agent 产品,感受更明显。

你会发现:

  • 同样输入,有时候结果不同
  • prompt 改一点,行为就变了
  • 工具链一复杂,系统开始不可控

传统测试逻辑是这样的:

<pre data-start="1567" data-end="1586" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important;">

输入 A → 输出 B

</pre>

但在 Agent 里变成:

<pre data-start="1603" data-end="1625" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important;">

输入 A → 大概率输出 B

</pre>

甚至偶尔会:

<pre data-start="1635" data-end="1654" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important;">

输入 A → 输出 C

</pre>

这时候问题就来了:

你怎么写测试用例?

传统软件开发,其实一直有一套 隐形流程

  • 产品收敛需求
  • 开发做技术取舍
  • 测试卡业务边界

这些事情不一定写在文档里,但一直存在。

但现在很多时候变成:

<pre data-start="1807" data-end="1823" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important;">

一个人 + AI

</pre>

问题就在这里:

AI 不会帮你定义边界。

它只会顺着你写下去。

如果你自己没有提前想清楚,最后就会变成:

<pre data-start="1886" data-end="1903" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important;">

前面飞快 后面返工

</pre>

而 Leader 还会问:

“不是已经差不多了吗?”

你却根本没法给出准确时间。

因为系统的 不确定性太大了

[图片上传失败...(image-e7bda9-1774864875620)]

-****04-****有点反直觉的结论

很多人觉得 AI 会让开发更轻松。

但我现在的真实感受是:

轻松的是写代码,累的是兜结果。

而且这个“累”是 后移的

<pre data-start="2064" data-end="2097" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; color: rgba(255, 255, 255, 0.55); font-size: 17px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: 0.578px; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(25, 25, 25); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">

开发阶段:很爽 测试阶段:开始崩 验收阶段:彻底崩

</pre>

就像是:

你把复杂度借到了后面。

我并不觉得 AI 是坏事。

相反,它确实在大幅提升效率。

但有一点越来越明确:

AI 只是让“写代码”变简单了。

它并没有让:

  • 做系统
  • 做架构
  • 做产品

变简单。

甚至某种程度上:

代码越容易生成,系统越容易失控。

所以现在我越来越认同一个判断:

AI Coding 解放的是实现力,但放大的是系统风险。

如果你不想项目最后变成反复返工,有些事情其实绕不过去:

  • 需求必须有人收敛
  • 边界必须有人定义
  • 测试必须有人兜底

这些事情,目前 AI 还做不了。

所以我暂时不太相信:

“一个人 + AI 就能稳定做出一条产品线”。

AI 带来的,本质还是:

提效,而不是替代。

真正聪明的用法也许是:

用 AI 提高人效,然后去做更多新的产品线。

而不是试图用 AI 替代整个团队。

如果你最近也在用 AI 写代码,有类似的感受,欢迎聊聊。

我也还在摸索:

怎么在 AI 时代,做出更稳定的系统。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容