关于AI

在过去一年半的软件开发中,使用 AI 工具的经验表明,它在处理重构、简单任务等“无聊代码”和快速生成概念验证(PoC)方面非常出色,能显著减少会议和沟通成本。然而,在开发新功能时,AI 常常引入不必要的复杂性、错误和安全漏洞,导致技术债务急剧增加,并可能降低资深开发者的工作效率。最终的结论是,AI 目前的最大受益者并非开发者,而是产品经理、销售等非技术人员,因为它帮助他们更清晰地表达需求。尽管存在诸多挑战,但 AI 的未来前景依然乐观,它有潜力将人类从重复性工作中解放出来。

AI 的现实:在炒作与实际之间

行业中存在一种奇怪的脱节。一方面,公司声称 AI 大幅提高了效率;另一方面,独立研究表明 AI 实际上拖慢了经验丰富的开发者

衡量 AI 的真实效率极其困难。大多数指标只关注开发者是否“接受”了 AI 的建议,而不是那段代码是否未经修改就直接部署到生产环境中。

    • 个人经验:AI 在处理“无聊代码”方面表现出色,例如代码重构或耗时几分钟的简单任务。
    • 开发新功能:在开发全新功能时,AI 往往会成为阻碍。它可能诱导开发者陷入错误的抽象,修复这些问题需要耗费大量时间。

你必须非常详细地了解你想要如何解决一个问题,AI 才有可能提供有效的帮助。当任务不仅仅是重复劳动时,AI 就会碍事。

AI 真正擅长什么?

尽管存在问题,AI 在特定领域确实能提供巨大价值。

    • 消除无聊工作:AI 能很好地处理日常工作中约 5% 的重复性任务。例如,为一个 API 添加搜索功能,AI 可以一次性生成迁移文件、更新 HTTP 处理器和数据库查询。
  • 将想法变为现实:AI 最具变革性的用途是快速构建概念验证 (PoC)
      • 在内部会议中,用一个可交互的 PoC 代替设计稿,能让开发者更直观地理解需求,从而节省大量会议时间。
      • 在销售会议中,向客户展示 PoC 能让他们直接体验并提供具体反馈,极大地加速了需求确认过程。
    • 辅助前端和设计:AI 能将 Figma 设计稿转换为 React 代码,虽然不能一键完成,但能生成基础的样板代码,节省启动时间。
    • 研究和调试:在遇到棘手的 bug 时,AI 的研究模式有时能提供意想不到的线索。例如,通过分析一个 GitHub issue 的评论,AI 帮助解决了一个由数据库驱动变更引起的罕见连接池错误。

“氛围编程”的陷阱

“氛围编程”(Vibe coding)指完全依赖提示词来生成软件,开发者只看最终结果而不审查过程。这种方式存在严重问题。

AI 事实上非常不擅长编写代码,它会引入安全问题,并且不理解代码优化的概念——它只是生成一个结果。

    • 性能低下:AI 倾向于选择最直接但效率低下的方案。例如,在合并书籍和作者数据时,它会选择在循环中为每本书单独查询作者(N+1 查询),而不是一次性查询所有作者再进行合并,这在数据量大时会造成灾难性的性能问题。
    • 阻碍学习:对于新手开发者,虽然 AI 能提供即时反馈,让他们保持前进的动力,但“氛围编程”会延缓他们真正掌握技能的时间
    • 无法构建复杂系统:声称非技术人员可以用 AI 搭建 SaaS 公司的说法是谎言。软件开发的最后 10%(即处理各种细节和权衡)占据了 90% 的工作量,而这正是 AI 和非技术人员都无法理解的部分。

AI:最大的技术债务生成器

AI 是我职业生涯中见过的最大的技术债务生成器。技术债务是指为了短期速度而牺牲长期质量所做的权衡,它会使系统变得昂贵且难以维护。

AI 通过以下方式增加技术债务:

    • 糟糕的架构建议:AI 可能会建议在关系型数据库中用大型 JSON 字段来存储数据,理由是“灵活性”,但这违背了数据库设计的初衷。
    • 偏爱复杂性:AI 倾向于创造复杂的解决方案,并且不喜欢复用代码,而是重复编写相同的逻辑。
    • 引入安全漏洞:AI 对安全性的理解仍然很薄弱,常常生成带有 SQL 注入等漏洞的代码,而新手开发者可能无法识别这些问题。

我们并没有变得更高效

声称 AI 能提升开发者效率的说法具有误导性。使用 AI 后,开发者的工作重心从编写代码转向了调试、代码审查和修复安全漏洞

许多开发者认为自己变快了,只是因为他们只关注了编码阶段,而忽略了后续的调试和修复工作。一个实际案例是,让 AI 创建批量处理接口时,它虽然生成了并发代码的框架,但存在诸多问题:

    • 不正确的并发处理:AI 设置了固定长度的 channel,在数据量大时会导致程序死锁。
    • 低效的数据库操作:AI 选择用并发方式发送大量单独的删除请求,而不是使用一条 DELETE ... WHERE ID IN (...) 的 SQL 语句。
    • 错误处理不当:直接返回数据库的原始错误码,可能暴露系统信息,造成安全风险。

最终,自己重写所有代码反而比修复 AI 生成的代码花费的时间更少。

AI 的真正受益者:开发者之外的人

尽管有大量为开发者设计的 AI 工具,但真正获益最多的是那些不写代码的人

    • 产品和销售人员:他们可以利用 AI 生成 PoC,更直观地向客户和开发团队展示想法。
    • 管理者:AI 可以汇总来自不同渠道(如 Slack、邮件、日历)的信息,自动生成项目状态报告,从而减少不必要的同步会议。

AI 目前带来的最大收益,在于处理我们日常重复的简单任务。

未来展望

未来是光明的。AI 有潜力帮助我们摆脱日常工作中那些消耗精力的重复性任务,无论是工作还是家庭生活。如果 AI 能处理这些琐事,我们就能将更多时间投入到与家人、朋友相处等更有意义的事情上。