AI会编码,但还不会做软件:一个架构师的深度思考
AI正在改变软件开发方式,但存在明显的能力边界。作为IT架构师和一人公司实践者,作者发现AI能高效生成功能性代码(个人项目60-70%代码由AI完成),但无法独立构建生产级系统。从"能跑的代码"到可靠产品之间存在四大鸿沟:质量保障体系(边界处理、安全)、工程基础设施(CI/CD)、架构决策(权衡判断)和团队协作。10倍编码速度需要配套的10倍工程能力提升,否则会放大风险。真正的

我是 dtsola,IT解决方案架构师,一人公司实践者。
在过去的职业生涯中,我既经历过大型企业的复杂系统架构设计,也在一人公司的实践中深度使用AI工具提升开发效率。这种双重视角让我对"AI辅助开发"有着独特的理解——我既看到了AI带来的巨大生产力提升,也深刻体会到从"能跑的代码"到"生产级系统"之间的鸿沟。
这篇文章源于两篇让我深有共鸣的文章:
- 《The New Calculus of AI-based Coding》(Joe Mag,Amazon工程师的实践)
- 《AI can code, but it can't build software》(Bytesauna的观察)
作为解决方案架构师,我在为客户设计系统时,越来越多地遇到这样的场景:
- 客户展示一个AI生成的原型:"你看,功能都实现了!"
- 我审查代码后:"这需要重构才能上生产环境。"
- 客户困惑:"为什么能跑的代码不能直接用?"
作为一人公司实践者,我自己也大量使用AI工具(Cursor、GitHub Copilot、Claude等)来加速开发。我的个人项目中,约60-70%的代码由AI生成。但我发现,真正耗时的不是写代码,而是:
- 设计系统架构
- 处理边界情况
- 确保长期可维护性
- 集成各个模块
- 建立测试和部署流程
这两篇文章从不同角度验证了我的观察,促使我结合自身经验,系统性地思考这个问题。
目标读者
- 🎯 正在使用AI辅助开发的工程师
- 🎯 有AI生成原型但不知如何产品化的创业者
- 🎯 试图理解AI对软件工程影响的技术管理者
- 🎯 一人公司/独立开发者
核心问题
- AI在软件开发中到底能做什么、不能做什么?
- 为什么"能跑的demo"和"生产级产品"之间有巨大鸿沟?
- 作为架构师/工程师,我们的价值在哪里?
- 如何正确地利用AI提升真正的生产力?
目录
- 一、两个平行的信号
-
- 1.1 信号A:技术联合创始人的需求激增
- 1.2 信号B:10倍速团队的系统性困境
- 1.3 核心论点
- 二、AI确实会编码
-
- 2.1 编码能力的实质性突破
- 2.2 AI擅长的编码场景
- 2.3 古老智慧的验证
- 三、从Demo到产品:不可逾越的鸿沟
-
- 3.1 "生产就绪"的残酷真相
- 3.2 软件工程的本质:复杂度管理
- 3.3 10倍速度的系统性风险
- 四、软件工程的多维挑战
-
- 4.1 第一维:质量保障体系
- 4.2 第二维:工程基础设施
- 4.3 第三维:架构设计与决策
- 4.4 第四维:团队协作与沟通
- 五、为什么AI(暂时)不会做软件
-
- 5.1 问题的本质属性
- 5.2 编码 vs 软件工程的本质区别
- 5.3 高速开发暴露的真相
- 六、当前状态定位
-
- 6.1 AI能力的清晰边界
- 6.2 能力图谱
- 6.3 客户常见的误解
- 七、真正的机会
-
- 7.1 不是替代,是赋能
- 7.2 以前"太贵"的实践现在可行
- 7.3 用AI构建支撑AI的基础设施
- 7.4 范式转变
- 八、结论:拥抱人机协作的新时代
一、两个平行的信号
1.1 信号A:技术联合创始人的需求激增
来自Bytesauna的观察:
最近,越来越多的人在寻找技术联合创始人或CTO。这些请求大多遵循一个模式:"嘿,我有这个用AI编写的应用,你能帮我让它生产就绪吗?"
这些人通常有一个共同的画像:他们了解自己的业务,但一直缺乏将想法变为现实的技术技能——可能是法律顾问,也可能是客户经理。
这引发了一个关键问题:如果软件工程已经被AI自动化了,为什么还有人在寻找技术联合创始人?
我的类似经历:
作为解决方案架构师,我最近收到的咨询中,约30%是这类请求:
- "我用Cursor做了个SaaS原型,能帮我评估一下吗?"
- "这个AI生成的系统,上线需要改什么?"
- "为什么我的应用在本地跑得好好的,部署就出问题?"
每次收到这样的请求,我都能感受到提问者的困惑:他们认为自己已经完成了大部分工作,只需要"最后一公里"的帮助。但当我审查代码后,往往发现需要的不是"最后一公里",而是重新规划整个旅程。
1.2 信号B:10倍速团队的系统性困境
来自Joe Mag的实践(Amazon Bedrock团队):
在过去三个月里,Joe和他的团队一直在Amazon Bedrock内构建一些很酷的东西。他们团队的独特之处在于——大部分代码是由AI代理(如Amazon Q或Kiro)编写的。
但他们不是在"vibe coding"(随意让AI写代码)。相反,他们使用一种人类和AI代理协作生成代码变更的方法。每个提交都有工程师的名字,该工程师需要审查并为代码负责。
成就令人瞩目:
- 约80%的代码由AI生成
- 团队产出是典型高速团队的10倍
- Joe个人的编码吞吐量达到职业生涯的最高点
但困境也随之而来:
- 质量保障:以前一年一两次的生产事故,现在可能每周都会发生
- CI/CD瓶颈:传统pipeline需要几小时构建测试,但一次构建期间就产生几十个新commit
- 团队协作:决策频率提升10倍,沟通成为主要瓶颈
Joe意识到:在高速驾驶时,你需要大量下压力来保持赛车在赛道上。
我的一人公司实践:
我的经历与Joe的观察高度一致:
- 个人项目中60-70%的代码由AI生成
- 开发速度确实提升了3-5倍
- 但我发现真正耗时的是:
-
- 架构设计和模块集成
- AI生成的代码需要大量审查和重构
- 测试和部署流程反而变得更重要
1.3 核心论点
两个信号 + 我的实践 → 同一个真相:
AI会编码,但还不会做软件
这不是对AI能力的贬低,而是对软件工程本质的重新认识。AI在编码层面的能力已经达到了令人印象深刻的水平,但从"能跑的代码"到"生产级软件系统"之间,仍然存在着一道需要人类跨越的鸿沟。
二、AI确实会编码
在深入探讨AI的局限之前,我们必须首先承认:AI在编码方面的能力是真实的、强大的,并且正在改变我们的工作方式。
2.1 编码能力的实质性突破
数据支撑:
- Joe的团队:80%代码AI生成,10倍产出
- 我的实践:60-70%代码AI生成,3-5倍速度提升
- 行业趋势:GitHub Copilot用户平均提升55%生产力
这些数字不是营销噱头,而是实实在在的生产力提升。
技术协同的关键:
Joe的团队使用Rust,我主要使用TypeScript。我们都发现了一个共同点:强类型语言的编译器为AI提供了快速反馈循环。
- Rust编译器 + AI:Rust编译器以关注正确性和安全性著称,在编译时捕获许多问题,并提供有用的错误消息帮助AI迭代
- TypeScript + AI:类型系统为AI提供了明确的约束,减少了运行时错误
这种协同效应让AI能够快速迭代修正错误,而不是陷入无休止的试错循环。
2.2 AI擅长的编码场景
从我的实践来看,AI在以下场景表现优异:
✅ AI的舒适区:
- CRUD操作和标准业务逻辑:创建、读取、更新、删除的标准模式
- 数据转换和格式化:JSON解析、数据映射、格式转换
- 重复性的样板代码:配置文件、接口定义、数据模型
- 标准算法实现:排序、搜索、常见数据结构操作
- 测试用例生成:基于函数签名生成单元测试
- 文档和注释:根据代码生成说明文档
工作流(Joe的方法,我深度认同):
- 人类:分解任务到清晰的子问题
- AI:生成代码
- 人类:审查每一行,确保质量
- 迭代:人机协作优化
- 原则:每一行代码都有工程师署名和负责
这不是"vibe coding"(随意让AI写代码然后直接使用),而是"agentic coding"(人机协作的工程化方法)。区别在于责任和质量把控。
2.3 古老智慧的验证
软件工程界有一句古老的智慧:
"Coding is easy, software engineering is hard"
AI的出现,以一种意想不到的方式验证了这句话。
重新定义:
- 编码(Coding):写出能工作的代码,解决特定的、孤立的问题
- 软件工程(Software Engineering):让代码可集成、可扩展、可长期维护,管理系统整体复杂度
AI的位置:
- AI已经能很好地完成"编码"——它能快速生成语法正确、逻辑清晰的代码
- 但"软件工程"仍然需要人类——需要权衡、决策、全局视角和长期思考
这就像说"会拧螺丝"和"会造汽车"的区别。AI现在非常擅长"拧螺丝",但"造汽车"需要的是系统性工程能力。
三、从Demo到产品:不可逾越的鸿沟
3.1 "生产就绪"的残酷真相
Bytesauna的关键洞察:
"当你看到这些人发来的代码,你会意识到'让应用生产就绪'实际上意味着推倒重来。"
这句话道出了一个残酷的现实。作为架构师,我每次收到AI生成的代码进行评审时,都会发现类似的问题:
我作为架构师的评审经验:
|
问题类型 |
具体表现 |
生产风险 |
|
错误处理 |
只处理happy path,没有try-catch |
边界情况导致系统崩溃 |
|
安全性 |
没有输入验证、存在SQL注入风险 |
数据泄露、被攻击 |
|
性能 |
N+1查询、内存泄漏、没有缓存 |
高负载下系统不可用 |
|
可观测性 |
没有日志、监控、告警 |
问题无法定位和诊断 |
|
可扩展性 |
硬编码配置、紧耦合 |
无法应对需求变化 |
|
测试 |
没有或很少测试 |
回归风险高,不敢重构 |
|
部署 |
只能本地运行,没有环境配置 |
无法自动化部署 |
对比:
- ✅ AI能做:展示一个功能(demo)——在理想条件下运行的代码
- ❌ AI不能:以支持集成、扩展和长期维护的方式构建功能(产品)
这就是为什么"让应用生产就绪"往往意味着"推倒重来"。不是因为AI写的代码完全没用,而是因为它缺少了生产系统所需的所有"非功能性"部分——而这些部分往往占据了80%的工作量。
3.2 软件工程的本质:复杂度管理
Bytesauna的核心定义:
"普通生产软件只做一堆简单的事,挑战在于同时做几百件简单的事,并保持整体可维护。"
这句话精准地抓住了软件工程的本质。软件工程师的真正工作不是解决一个难题,而是处理复杂度。
我的架构师视角——复杂度的四个维度:
3.2.1 空间复杂度(系统的广度)
- 多个模块如何集成?
- 不同服务如何协调?
- 如何保证数据一致性?
- API契约如何管理?
3.2.2 时间复杂度(系统的演进)
- 代码如何长期可维护?
- 技术债务如何管理?
- 如何保持向后兼容?
- 如何平滑升级?
3.2.3 不确定性复杂度(边界情况)
- 网络故障怎么办?
- 并发冲突如何处理?
- 数据损坏如何恢复?
- 第三方服务不可用怎么办?
3.2.4 人的复杂度(团队协作)
- 代码如何让他人理解?
- 知识如何传递?
- 决策如何记录?
- 团队规范如何统一?
AI能力分析:
|
复杂度维度 |
AI能力 |
说明 |
|
局部正确性 |
✅ 擅长 |
单个函数逻辑清晰 |
|
全局一致性 |
⚠️ 需要约束 |
需要steering rules指导 |
|
时间维度 |
❌ 难以预见 |
无法预测长期可维护性 |
|
不确定性 |
❌ 处理不足 |
边界情况和异常考虑不周 |
|
人的因素 |
❌ 无法理解 |
不理解团队协作和知识传递 |
AI在局部正确性上表现优异,但在其他四个维度上都力不从心。这就是为什么AI能写出"能跑的代码",但写不出"生产级软件"。
3.3 10倍速度的系统性风险
Joe的数学关系:
如果你的代码速度提升10倍,会发生什么?
- 代码速度 ×10 → 决策频率 ×10
- 如果bug概率不变 → 生产事故频率 ×10
- 结论:需要质量保障能力 ×10
这不是理论推测,而是Joe团队的实际经验。他们发现,即使AI生成的代码经过人类审查,bug的绝对概率可能不会显著改变,但由于提交频率大幅增加,生产事故的频率也会相应增加。
我的一人公司经验:
我的数据与Joe的观察一致:
- 开发速度提升了3-5倍
- 但调试和重构时间也相应增加
- 需要更严格的代码审查流程
- 需要更完善的测试覆盖
三个生动的比喻:
比喻1:开200mph的赛车(Joe)
"开200mph,你需要大量下压力来保持赛车在赛道上!"
高速不是问题,问题是你的车是否有足够的下压力、足够好的轮胎、足够强的刹车来支撑这个速度。
比喻2:老车装涡轮(Joe)
"就像给老车装涡轮增压器,如果不升级轮胎和刹车,结果不是更快,而是车毁人亡。"
AI就像涡轮增压器,能让你的引擎输出更大功率。但如果你的其他系统(测试、部署、监控)还停留在原来的水平,结果不是更快交付,而是更快崩溃。
比喻3:骑共享单车 vs 开F1(我的比喻)
AI编码就像是从骑共享单车升级到开F1赛车:
- 速度确实快了10倍
- 但如果你还用骑车的心态(随意转向、突然刹车),必然翻车
- 你需要配套的:专业赛道、安全装备、维修团队、应急预案
这三个比喻都指向同一个真相:速度的提升必须伴随着整个系统的升级,否则速度本身就成了风险。
四、软件工程的多维挑战
当代码速度提升10倍后,软件工程的哪些维度会成为瓶颈?Joe的团队和我的实践都指向了四个关键维度。
4.1 第一维:质量保障体系
4.1.1 问题
Joe的观察:
- 原状:偶尔的bug,一年一两次生产事故,团队可以接受
- 10倍速:每周都可能出现生产事故,即使在测试环境被发现,也会影响共享代码库,需要调查,拖慢整个团队
我的实践:
- AI生成的代码往往只覆盖happy path(理想路径)
- 边界情况、异常处理常常缺失
- 需要人工补充大量防御性代码
Joe得出结论:为了让agentic开发将工程速度提高一个数量级,我们需要将有问题的提交概率降低一个数量级。
4.1.2 解决思路:借鉴飞机制造业
Joe的启发:
Joe是个飞机迷,他一直很欣赏飞机制造商使用的测试理念:
- 早期模拟
- 组件测试
- 风洞测试
- 破坏性测试
- 完整飞机的试飞
这些理念在软件行业也有尝试,但远未普及。
软件类比:"风洞式"全系统测试
Joe的团队实现了"风洞式"测试:测试完全组装的系统在受控环境中的表现。
我的架构师方法——AI时代的测试金字塔:
测试金字塔(AI时代版)
/\
/E2E\ ← AI辅助生成场景测试
/集成测\ ← AI生成fake依赖
/组件测试\ ← AI快速生成测试用例
/单元测试 \ ← AI生成基础覆盖
/___________\
人类负责:测试策略、关键场景、边界情况
关键变化:
- 以前:测试金字塔的每一层都需要人工编写,成本高昂
- 现在:AI可以快速生成大量测试用例,人类专注于测试策略和关键场景
4.1.3 实践案例
Joe的团队:
- 实现了外部依赖的高保真"fake"版本(认证、存储、链复制、推理引擎)
- 编写了测试harness,使用这些fake在开发者机器上启动整个分布式系统
- 构建时测试针对完全组装的堆栈启动canary,验证整个系统
- 成本变化:几年前,这样的想法会被认为"不错,但太贵"。这次,只用了几天就实现了
我的一人公司实践:
- 用AI生成API mock和测试数据
- 用AI编写集成测试脚本
- 用AI生成负载测试场景
- 关键:测试策略和关键场景由我设计,AI负责实现
Joe对这种方法非常看好,因为它能捕获一类以前只能在变更提交到测试环境后才能发现的bug。
4.2 第二维:工程基础设施
4.2.1 问题:CI/CD成为瓶颈
Joe的场景:
软件团队的CI/CD pipeline通常需要几个小时来构建、打包和测试软件变更,然后需要几天时间在预生产阶段和最终生产阶段推出一批变更。通常,拥有这种自动化水平的团队会被认为是健康的团队。
但agentic coding改变了这种动态:
- 在构建、打包和测试一组提交所需的时间内,可能又有十几个提交在等待
- 当一个变更集准备部署到生产环境时,它可能包含100个或更多提交
- 如果其中一个提交有问题,部署需要回滚,pipeline停摆
- 与此同时,更多变更积累,增加了混乱和风险
我的一人公司挑战:
作为一人公司,我没有专职DevOps团队,但AI让我能快速搭建CI/CD。关键是设计合理的流程,而不是手工操作。
4.2.2 比喻:F1黄旗
Joe的比喻:
"我是F1粉丝,这让我想起赛道上的事故如何导致黄旗。通常,赛车以极快的速度和加速度在赛道上疾驰。但如果发生事故,赛事干事会举起黄旗,要求所有赛车在安全车后面减速。激动人心的比赛变成悠闲的绕圈,直到清理完碎片,赛道再次安全。为了最小化这种减速,赛事组织者会为各种事故做好准备,确保他们能在几分钟内清理赛道并重新开始比赛。"
类比软件开发:
- 正常:高速提交代码,快速迭代
- 问题commit:黄旗,整个团队(或个人)必须减速
- 需要:像F1那样,分钟级清理赛道,而不是小时级
4.2.3 解决方向
Joe的要求:
就像全系统本地测试有助于收紧某些bug的反馈循环一样,我们需要类似地思考如何实现CI/CD pipeline。
当团队以每小时几十个提交的速度移动时:
- 需要在分钟而不是小时或天内识别、隔离和回滚有问题的问题
- 这意味着典型的构建和测试基础设施需要比今天快一个数量级
反馈循环的重要性:
"就像高延迟的在线视频游戏变得无法玩一样,如果每个提交仍然需要很长的延迟才能看到反馈,那么以10倍的速度移动真的很难。"
我的一人公司方案:
- 用GitHub Actions + AI生成workflow
- 增量构建和测试(只测试变更部分)
- 自动回滚机制
- 关键:架构设计要支持快速反馈
-
- 模块化设计
- 独立部署单元
- 特性开关(feature flags)
4.3 第三维:架构设计与决策
4.3.1 问题:架构决策无法自动化
Joe的观察:
当你的吞吐量增加一个数量级时,你不仅仅是在写更多代码——你在做更多决策:
- 应该使用这个缓存策略还是那个?
- 应该如何处理这个边界情况?
- 这里正确的抽象是什么?
决策频率的变化:
- 正常速度:团队可能每周做一两个这样的决策
- 10倍速度:每天做多个决策
决策类型(AI无法自动化):
- 缓存策略选择(Redis vs Memcached vs CDN)
- 边界情况处理方式(重试 vs 降级 vs 熔断)
- 抽象层设计(何时抽象,何时具体)
- 性能与可读性权衡
- 技术栈选择
我的架构师经验:
这些决策需要考虑:
- 业务上下文:这个功能对业务有多重要?
- 团队能力:团队熟悉哪些技术?
- 长期演进:这个决策会如何影响未来6个月、1年的开发?
- 成本约束:预算是多少?
- 风险承受度:能接受多大的风险?
AI的局限:
- AI可以列出选项
- AI可以解释pros/cons
- 但AI无法根据具体情况做出最优决策
- 因为这需要权衡,而权衡需要价值判断
4.3.2 架构决策的连锁反应
Joe的例子:
"许多这些决策会影响其他人正在做的事情。工程师A决定重构认证流程,这会影响工程师B即将扩展的API。这些不仅仅是实现细节——它们是在代码库中产生涟漪的架构选择。"
我的架构师视角:
一个看似局部的决策,可能影响:
- 系统性能特征
- 安全边界
- 部署复杂度
- 运维成本
- 团队学习曲线
- 未来扩展性
案例:选择数据库
决策:用PostgreSQL还是MongoDB?
表面上:技术选型
实际影响:
- 数据模型设计(关系型 vs 文档型)
- 查询性能特征(JOIN vs 嵌套文档)
- 事务保证(ACID vs 最终一致性)
- 运维复杂度(备份、恢复、扩展)
- 团队技能要求(SQL vs NoSQL)
- 未来扩展性(垂直 vs 水平扩展)
- 成本结构(开源 vs 托管服务)
AI可以生成两种数据库的代码,但无法做这个决策。因为这个决策需要权衡多个相互冲突的目标,而权重取决于业务上下文。
4.3.3 解决方案:架构决策记录(ADR)
我的实践:
我使用架构决策记录(Architecture Decision Records, ADR)来管理这些决策:
- 用AI辅助编写ADR文档
- 但决策本身由人类做出
ADR包括:
- 上下文:为什么需要做这个决策?
- 决策:我们决定做什么?
- 理由:为什么这样决定?
- 后果:这个决策会带来什么影响?
- 替代方案:我们考虑过哪些其他选项?
好处:
- 知识传递(对未来的自己或团队成员)
- 决策可追溯(为什么当时这样决定?)
- 避免重复讨论(已经讨论过并记录了)
4.4 第四维:团队协作与沟通
4.4.1 问题:协调成本的数学
Joe的关键洞察:
"挑战在于,许多这些决策会影响其他人正在做的事情。传统的协调机制在这里引入了太多延迟。等待Slack回复或安排当天晚些时候的快速同步,意味着要么创建瓶颈——决策阻塞进度——要么冒着在意识到冲突之前走错路的风险。在高吞吐量下,协调成本可能占主导地位!"
协调需求:
- 架构决策的对齐
- 代码风格的一致性
- API契约的协商
- 技术债务的优先级
4.4.2 比喻:餐厅后厨
Joe的比喻:
"我喜欢观察运营良好的操作。如果你曾经窥视过繁忙餐厅的后台,乍一看你可能会认为那是混乱。但如果你花点时间注意细节,你会看到所有成员都在不断地相互协调。厨师、厨师、服务员、清洁工和经理在持续的流中来回传递信息。通过保持持续同步,运营良好的餐厅即使在高峰时段也能为顾客提供服务,而不会牺牲质量或延迟。"
软件开发的类比:
- 厨师长 = 架构师
- 各个岗位 = 不同模块的负责人
- 持续沟通 = 代码审查、设计讨论、站会
4.4.3 Joe的团队方案
高速协调的解决方案:
Joe认为,实现类似的速度提升需要对团队沟通方式进行约束:
"我们的团队坐在同一层楼,我认为这对我们的速度至关重要。当有人需要做出可能影响其他人的决策时,他们可以走过去,在白板前几分钟内解决。我们就方法达成一致,实时讨论权衡,两位工程师都回去工作。决策快速、正确地做出,不会造成阻塞工作的堆积。"
未解决的挑战:
"我认识到这并不能解决分布式团队的问题——这仍然是一个开放的挑战。"
4.4.4 我的一人公司优势与挑战
优势:
- ✅ 没有沟通成本(只有我一个人)
- ✅ 决策速度快(不需要对齐)
- ✅ 上下文切换成本低(都在我脑子里)
挑战:
- ❌ 缺少代码审查(需要自我审查)
- ❌ 容易陷入局部最优(缺少外部视角)
- ❌ 知识孤岛(只有我知道)
- ❌ 精力有限(一个人要做所有决策)
我的解决方案:
- 用AI作为"橡皮鸭"(rubber duck debugging)——向AI解释问题,帮助自己理清思路
- 定期重构和代码审查(自我审查,但要严格)
- 完善的文档和ADR(对未来的自己负责)
- 加入技术社区,获取外部视角(参加meetup、在线讨论)
五、为什么AI(暂时)不会做软件
5.1 问题的本质属性
Bytesauna的思考:
"我不太清楚为什么AI不能构建软件(目前)。也许这与工作的本质有关。当你为生活编写软件时,你的主要任务是处理复杂度。普通生产软件只做一堆简单的事。挑战是同时做几百件简单的事,并保持整体可维护。"
我的架构师分析:
软件工程的本质是在约束下做权衡:
- 性能 vs 可读性
- 灵活性 vs 简单性
- 快速交付 vs 长期可维护
- 成本 vs 质量
- 创新 vs 稳定
AI的局限:
- AI可以优化单一目标(比如"让这段代码更快")
- 但软件工程往往需要多目标优化(快、可读、可维护、低成本)
- 而且目标的权重取决于业务上下文(创业公司 vs 大企业,核心系统 vs 辅助工具)
- 这需要价值判断,而不只是技术判断
举个例子:
场景:优化一个查询
AI可能建议:
- 添加索引(提升性能)
- 使用缓存(提升性能)
- 数据库分片(提升性能)
但人类需要权衡:
- 添加索引 → 写入变慢,存储增加
- 使用缓存 → 一致性问题,复杂度增加
- 数据库分片 → 运维复杂度大幅增加
正确答案取决于:
- 这个查询有多重要?
- 当前的瓶颈在哪里?
- 团队能维护多复杂的系统?
- 预算是多少?
AI可以给出选项,但无法做出权衡。
5.2 编码 vs 软件工程的本质区别
5.2.1 编码(AI擅长)
- ✅ 孤立的问题
- ✅ 定义明确的需求
- ✅ 局部正确性
- ✅ 短期可用性
- ✅ 单一优化目标
例子:
- "写一个函数,计算两个日期之间的天数"
- "实现一个用户登录接口"
- "生成一个数据转换脚本"
这些都是AI的舒适区。
5.2.2 软件工程(AI力不从心)
- ❌ 数百个相互依赖的决策
- ❌ 模糊的、演进的需求
- ❌ 全局一致性
- ❌ 长期演进能力
- ❌ 多目标权衡
- ❌ 意外交互的管理
- ❌ 业务上下文理解
例子:
- "设计一个能支持未来3年业务增长的用户系统"
- "重构这个模块,让它更容易扩展,但不要破坏现有功能"
- "在性能、成本和开发速度之间找到平衡"
这些是AI的困难区。
5.2.3 我的实践验证
AI生成代码的特点:
优点:
✅ 语法正确
✅ 逻辑清晰
✅ 运行快速
缺点:
❌ 缺少错误处理
❌ 没有考虑边界情况
❌ 硬编码多(配置、常量)
❌ 缺少抽象(重复代码)
❌ 没有考虑扩展性
❌ 测试覆盖不足
❌ 没有日志和监控
我需要做的:
- 重构代码结构(提取函数、模块化)
- 添加错误处理(try-catch、错误边界)
- 提取可配置项(环境变量、配置文件)
- 设计抽象层(接口、抽象类)
- 补充测试(单元测试、集成测试)
- 优化性能(缓存、索引)
- 添加可观测性(日志、监控、告警)
时间分配(我的实际经验):
- AI生成代码:20%
- 审查和重构:40%
- 集成和测试:30%
- 文档和部署:10%
这个比例说明:AI帮我节省了20%的时间,但我仍需要投入80%的时间做工程化工作。
5.3 高速开发暴露的真相
Joe的洞察:
"10倍速度是放大镜"
放大了什么:
- ✅ commit间的意外交互
- ✅ 架构决策的重要性
- ✅ 协调成本
- ✅ 反馈循环的价值
- ✅ 技术债务的累积速度
我的补充:
高速开发也放大了:
- 架构设计的价值:好架构让集成容易,坏架构让每次集成都是噩梦
- 测试的价值:快速验证变更,避免破坏现有功能
- 文档的价值:快速理解上下文,避免重复问题
- 规范的价值:保持一致性,降低认知负担
结论:
AI能解决局部问题,但系统性复杂度需要人类。
更准确地说:
- AI能快速生成代码片段
- 但人类需要将这些片段组织成一个连贯的、可维护的系统
- 这需要架构视角、全局思维、长期规划
六、当前状态定位
6.1 AI能力的清晰边界
三个视角的一致结论:
- Bytesauna:demo到产品的鸿沟
-
- AI能做demo,但"生产就绪"意味着推倒重来
- Joe:10倍速度需要10倍配套
-
- AI让代码速度提升10倍,但需要整个开发生命周期同步升级
- 我:编码快了,但工程挑战更大
-
- AI让我编码速度提升3-5倍,但80%的时间仍在做工程化工作
两个平行的现实:
- 技术乐观者:"AI让我10倍速编码!"
- 技术求助者:"谁能帮我把AI代码变成产品?"
这两个现实并不矛盾 —— 它们共同定义了AI的边界:
- AI确实能让编码速度大幅提升
- 但编码只是软件工程的一小部分
6.2 能力图谱
编码能力谱系:
孤立函数 → 模块 → 系统 → 产品 → 平台
↓ ↓ ↓ ↓ ↓
AI擅长 AI可以 需要人类 人类主导 人类必需
(有指导) (AI辅助)
例子:
孤立函数:计算两个日期的天数 ← AI完全可以
模块:用户认证模块 ← AI可以生成,但需要人类指导架构
系统:完整的用户管理系统 ← 需要人类设计架构,AI辅助实现
产品:生产级SaaS应用 ← 人类主导,AI加速部分环节
平台:支持多租户的企业平台 ← 人类必需,AI只能辅助局部
转折点:Demo → 产品
- 这是AI能力的边界
- 这是技术联合创始人的价值所在
- 这是"推倒重来"发生的地方
- 这是架构师的用武之地
6.3 客户常见的误解
作为架构师,我经常遇到这些误解:
误解1:"AI写了代码,就完成了80%"
- 现实:可能只完成了20%,剩下80%是工程化
- 就像盖房子,砖头准备好了,但还需要设计、施工、装修、验收
误解2:"AI代码能跑,就能上生产"
- 现实:能跑 ≠ 生产就绪
- 就像汽车,能启动 ≠ 能上路(需要安全检查、保险、维护)
误解3:"找个程序员改改就行"
- 现实:需要架构师重新设计
- 就像建筑,不是"改改",而是需要结构工程师评估和加固
误解4:"AI能替代开发团队"
- 现实:AI是工具,不是团队
- 就像电钻能提升效率,但不能替代木匠
我的标准回答:
"AI帮你快速验证了想法(demo),证明了技术可行性。但要做成产品,需要系统性的软件工程工作:架构设计、错误处理、安全加固、性能优化、测试覆盖、部署流程、监控告警。这不是'改改代码',而是重新设计架构、建立工程体系。"
七、真正的机会
7.1 不是替代,是赋能
错误理解:用AI替代软件工程师
正确理解:用AI降低最佳实践的成本
我的观点:
AI不是要替代工程师,而是:
- ✅ 让工程师专注于更高价值的工作(架构、决策)
- ✅ 让以前"太贵"的最佳实践变得可行(完整测试、完善文档)
- ✅ 让一人公司也能构建复杂系统(我的亲身体验)
- ✅ 让小团队也能实现大团队的产出(Joe的10倍速团队)
这是一个能力放大器,而不是替代品。
7.2 以前"太贵"的实践现在可行
7.2.1 Joe的团队经验
|
工程实践 |
以前 |
现在(AI辅助) |
|
高保真fake依赖 |
太贵,不做 |
AI几天搞定 |
|
全系统本地测试 |
维护成本高 |
AI持续更新 |
|
更严格的测试覆盖 |
时间不够 |
AI快速生成 |
|
完善的文档 |
总是过时 |
AI同步维护 |
Joe的结论:
"这些想法在原则上是合理的,但实施和维护成本太高,大多数团队不会编写这样的测试。我认为我们正在看到agentic coding可以改变这里的计算的早期迹象。AI代理擅长输出大量代码,特别是当所需行为众所周知且几乎没有歧义时。原则上合理但实施和维护成本太高的想法,其成本刚刚降低了一个数量级。"
7.2.2 我的一人公司实践
以前做不到的:
- ❌ 完整的测试覆盖(太耗时,一个人写不完)
- ❌ 多语言支持(翻译成本高,维护困难)
- ❌ 完善的API文档(手写太累,容易过时)
- ❌ 多平台支持(iOS、Android、Web,开发量太大)
- ❌ 性能优化(需要专家,成本高)
现在可以做到:
- ✅ AI生成测试用例,我设计测试策略
- ✅ AI翻译文档和UI,我审校关键内容
- ✅ AI生成OpenAPI文档,我设计API契约
- ✅ AI生成平台适配代码,我处理特殊情况
- ✅ AI建议优化方案,我做权衡决策
关键变化:
- 从"做不做"变成"怎么做"
- 从"有没有资源"变成"如何设计"
- 瓶颈从执行转移到决策
这是一个根本性的转变。以前,很多好的工程实践因为"太贵"而被放弃。现在,AI降低了执行成本,让这些实践变得可行。
7.3 用AI构建支撑AI的基础设施
自举循环:
AI生成代码(速度快)
↓ 需要
更好的工程实践(质量保障)
↓ 需要
更多基础设施代码(测试、CI/CD、监控)
↓ 用
AI生成基础设施代码(降低成本)
↓ 支撑
更高速的AI编码(正向循环)
↓ 循环
Joe的实践:
- 用AI生成fake依赖
- 用AI生成测试harness
- 用AI维护测试基础设施
我的实践:
- 用AI生成CI/CD配置(GitHub Actions workflow)
- 用AI生成监控和告警规则(Prometheus、Grafana)
- 用AI生成部署脚本(Docker、Kubernetes)
- 用AI生成性能测试场景(k6、JMeter)
关键:
- 人类设计架构和策略
- AI实现具体细节
- 整个开发生命周期需要同步进化
这是一个良性循环:AI帮助我们构建更好的基础设施,更好的基础设施支撑更高速的AI编码。
7.4 范式转变
7.4.1 旧范式
人类编码 → 人类测试 → 人类部署
↓ ↓ ↓
慢但可控 覆盖有限 手工为主
瓶颈:人的时间和精力
7.4.2 新范式
AI编码(×10) → 增强测试(×10) → 加速CI/CD(×10)
↓ ↓ ↓
人类架构决策 人类测试策略 人类部署策略
↓ ↓ ↓
权衡判断 关键场景 风险控制
瓶颈:人的决策质量和架构能力
7.4.3 我的一人公司范式
传统一人公司:
能力 = 个人技能 × 时间
瓶颈 = 时间(24小时/天)
结果 = 只能做小项目
AI时代一人公司:
能力 = (个人决策能力 × AI执行速度) × 工程体系
瓶颈 = 决策质量 + 架构设计
结果 = 可以做中大型项目
成功的关键:
Joe的总结:
"成功使用agentic开发的团队,将是那些认识到整个软件开发生命周期需要协同演进的团队。"
我的补充:
"成功的一人公司,是那些用AI放大决策能力,而不是仅仅加快编码速度的人。"
八、结论:拥抱人机协作的新时代
8.1 核心结论
现在:AI会编码,但还不会做软件
为什么:
- 编码是解决孤立的、定义明确的问题
- 软件工程是管理系统复杂度、做权衡决策
- AI擅长前者,后者需要人类
未来:
- 可能有一天AI也能做软件工程
- 但那一天还没到来
- 当下是人机协作的黄金时代
8.2 三个视角的一致结论
Bytesauna的观察:
"Demo到产品的鸿沟,就是AI能力的边界。当你看到AI生成的代码,你会意识到'生产就绪'意味着推倒重来。"
Joe的实践:
"10倍速度需要整个开发生命周期的同步进化。就像给老车装涡轮增压器,如果不升级轮胎和刹车,结果不是更快,而是车毁人亡。"
我的经验:
"AI让我编码更快,但架构设计和工程化仍然是我的核心价值。AI节省了我20%的时间,但我仍需要投入80%的时间做工程化工作。"
8.3 软件工程的本质没有改变
仍然是:
- 管理复杂度
- 做权衡决策
- 确保长期可维护性
- 服务业务目标
改变的是:
- 工具更强大了(AI)
- 速度更快了(10倍)
- 要求更高了(需要配套设施)
- 机会更多了(以前做不到的现在可以做)
不变的是:
- 软件工程的核心——在约束下做权衡,管理系统复杂度——仍然需要人类
- 架构师的价值——系统性思维、全局视角、长期规划——更加凸显
8.4 给所有人的最后建议
8.4.1 拥抱AI,但保持清醒
拥抱:
- ✅ AI确实能大幅提升生产力
- ✅ AI确实能降低很多工作的门槛
- ✅ AI确实能让小团队做大事
- ✅ AI确实能让个人开发者实现以前不可能的项目
清醒:
- ⚠️ AI不是银弹
- ⚠️ 编码只是软件工程的一部分
- ⚠️ 质量和速度需要平衡
- ⚠️ 架构和决策仍需人类
8.4.2 投资正确的能力
短期(立即行动):
- 学会高效使用AI工具
- 建立人机协作工作流
- 提升代码审查能力
长期(持续投资):
- 架构设计和系统思维
- 复杂度管理
- 业务理解
- 权衡决策能力
永远重要:
- 好奇心和学习能力
- 解决问题的能力
- 沟通和协作能力
8.4.3 建立工程体系
不要:
- ❌ 只追求速度
- ❌ 忽视质量
- ❌ 跳过测试
- ❌ 省略文档
- ❌ 积累技术债务
要做:
- ✅ 建立代码审查流程
- ✅ 投资测试基础设施
- ✅ 完善CI/CD
- ✅ 记录架构决策
- ✅ 保持技术债务可控
- ✅ 建立监控和告警
8.5 最后的思考
Joe的展望:
"我对agentic开发的潜力感到非常兴奋。我认为它不仅能提高软件开发的效率,还能让我们解决以前太小众或太昂贵而无法解决的问题。收益是真实的——我们团队的10倍吞吐量增长不是理论上的,而是可衡量的。"
Joe的警告:
"但这些收益不会在我们简单地把AI代理嫁接到现有开发实践上时实现。就像给轮胎窄、刹车旧的车加涡轮增压器,结果不会是更快的圈速——而是撞车。在10倍代码速度下,我们当前的测试、部署和团队协调方法成为限制因素。瓶颈只是移动了。"
我的总结:
"AI会编码,但还不会做软件——这既是现实,也是机会。"
"现实是,软件工程师(尤其是架构师)的价值不会消失,反而更加凸显。我们的核心价值从'写代码'转移到'设计系统、做权衡决策、管理复杂度'。"
"机会是,我们可以用AI放大自己的能力,做以前做不到的事。作为一人公司,我现在能做以前需要小团队才能完成的项目。作为架构师,我能更快地验证想法、更好地服务客户。"
所以:
- 让我们拥抱这个人机协作的新时代
- 用AI增强我们的能力,而不是被AI的速度拖垮
- 专注于AI难以自动化的核心价值:架构、决策、复杂度管理
- 建立配套的工程体系,让高速开发可持续
记住:
- 编码只是软件工程的一小部分
- AI让我们更快编码,但也要求我们更好地做工程
- 真正的机会在于让以前"太贵"的最佳实践变得可行
- 软件工程的核心——在约束下做权衡,管理系统复杂度——仍然需要人类
AI会编码,但还不会做软件——这是挑战,更是机遇。
参考资料
- The New Calculus of AI-based Coding
Joe Mag, 2025
https://blog.joemag.dev/2025/10/the-new-calculus-of-ai-based-coding.html - AI can code, but it can't build software
Bytesauna
https://bytesauna.com/post/coding-vs-software-engineering
如果这篇文章对你有帮助,欢迎点赞、收藏、转发。也欢迎在评论区分享你的经验,我们一起交流学习!
我是 dtsola【IT解决方案架构师 | 一人公司实践者】 ;专注商业、技术、一人公司、个人成长分享。
#AI编程 #软件工程 #架构师 #一人公司 #独立开发者 #技术管理 #程序员 #技术博客 #职场成长 #创业
更多推荐



所有评论(0)