最近一直在深度使用 AI 编程,从完全无代码的开发哥网站,到 AI 生成后台代码;从 Cursor 到 Trae AI,能明显感受到 AI 可以帮我写大量代码。最多的时候,5 个小时写了超过 2000 行可以运行的代码。但一个奇怪的感受是,尽管 AI 让代码生产更快了,软件开发的复杂度却没有降低,项目的构建需要的心力依然和以前一样。
这让我不禁思考:AI 真的在降低软件开发的复杂度吗?还是说,复杂度只是被转移了?
在《人月神话》中,布鲁克斯提出了软件开发的四大本质复杂度:复杂度、一致性、可变性、不可见性。即使 AI 能够自动生成代码,这些复杂性依旧存在。
AI 并没有消除软件开发的复杂度,而是将其转移到了其它的层面:
传统复杂度 | AI 时代的复杂度转移 |
---|---|
人工编写 CRUD 代码 | 提示工程(Prompt Engineering) |
手动优化数据库索引 | AI 生成索引,但需要人类调优 |
代码逻辑的可读性 | AI 生成的代码可能变成「黑盒」 |
需求沟通的精确表达 | 需要用更严谨的自然语言指导 AI |
布鲁克斯认为,软件开发的困难分为根本困难(Essential Complexity)和次要困难(Accidental Complexity):
AI 编程 主要解决的是「次要困难」,但无法消除「根本困难」。让我们来看看布鲁克斯提出的软件开发四大根本困难,以及 AI 编程是否真的能克服它们。
布鲁克斯认为,软件的复杂度源自以下几个因素:
AI 确实能快速生成代码,但它无法减少软件的业务复杂性。 例如:
结论:AI 不会减少软件的复杂度,只是让代码生产更快,但架构和业务逻辑的复杂性依然存在。
软件必须兼容历史系统、旧数据、第三方 API 和用户习惯,这导致:
AI 可能会破坏一致性,而不是增强一致性。
结论:AI 不能自动保证代码和系统的一致性,反而可能引入新的不兼容问题。
软件必须不断适应需求变化:
AI 确实可以加速代码变更,但它无法理解业务变更的深层逻辑:
结论:AI 可以加速代码变更,但无法主动适应业务变化,反而可能增加技术债务。
软件不像建筑或者机械产品那样,可以从物理空间上直观理解。软件的结构是逻辑性的,导致:
结论:AI 代码的「黑盒性」可能让软件的可见性更差,导致调试和维护的挑战更大。
虽然 AI 无法消除软件的根本复杂度,但它确实在减少次要复杂度(Accidental Complexity),包括: ✔ 代码生成:AI 可以帮你写 CRUD、API、测试代码,提高开发效率。
✔ 调试辅助:AI 可以自动分析日志、找出潜在 Bug。
✔ 文档生成:AI 可以自动补充代码注释,提升可读性。
✔ 代码优化:AI 可以推荐更优的算法或 SQL 查询,提高性能。
但与此同时,AI 也引入了新的复杂度: ❌ Prompt 设计复杂度:如何写出好的 Prompt,才能让 AI 生成高质量代码?AI 代码质量很大程度上依赖于输入的提示(Prompt),这意味着开发者需要掌握新的技能,比如如何编写高质量的 Prompt。 ❌ AI 代码治理:如何审查 AI 生成的代码,防止安全漏洞?
❌ 技术债务:AI 可能会生成「能跑但难维护」的代码,如何管理长远的架构演进? AI 可以帮助我们快速生成大量代码,但如何组织这些代码、保证架构的可维护性,仍然是开发者的责任。
AI 编程时代,开发者的角色正在改变:
AI 让代码生成变得简单,但软件架构仍然需要人类设计。
未来,AI 编程会让开发变得更加高效,但开发者的核心竞争力将不再是写代码,而是驾驭复杂度。
未来,AI 可能会替代低端的代码搬运工,但无法替代深刻理解复杂度的架构师。
「AI 不会取代开发者,但懂得驾驭 AI 的开发者,将取代那些不懂 AI 的人。」
以上。