diff --git a/articles/004-AI 编程爆发:程序员不写代码的时代真的来了.md b/articles/004-AI 编程爆发:程序员不写代码的时代真的来了.md new file mode 100644 index 0000000..df7be8c --- /dev/null +++ b/articles/004-AI 编程爆发:程序员不写代码的时代真的来了.md @@ -0,0 +1,247 @@ +# AI 编程爆发:程序员不写代码的时代真的来了 + +> 发布日期:2026-03-16 +> 分类:深度观点 / 行业趋势 +> 作者:老邓唠AI + +![封面](https://cdn.union.jxyunge.com/self-media/004/cover.png) + +## 引子:一个让我后背发凉的数据 + +最近 Pragmatic Engineer 发布了一份覆盖 906 名软件工程师的调研报告,里面有几个数据让我看完沉默了很久: + +- **95%** 的开发者每周至少使用一次 AI 编程工具 +- **75%** 的人用 AI 完成了至少一半的工程工作 +- **56%** 的人说 AI 已经接管了他们 70% 以上的编码任务 + +你没看错——**超过一半的程序员,七成以上的代码不是自己写的了。** + +Y Combinator 更夸张:最新一批入选的创业公司中,**25% 的公司报告其 95% 的代码由 AI 生成**。 + +这不是未来,这是现在。2026 年 3 月,此刻正在发生的事。 + +今天老邓不做工具评测,聊点更大的——AI 编程工具的爆发,到底在怎样改变"写代码"这件事?程序员这个职业,还存在吗? + +--- + +## 一、爆发的全景:从补全到接管 + +### 1.1 三代进化 + +AI 编程工具不是突然爆发的,它经历了三代清晰的进化: + +![AI 编程工具进化路径](https://cdn.union.jxyunge.com/self-media/004/diagram-01-evolution.png) + +| 阶段 | 时间 | 代表产品 | 核心能力 | +|------|------|---------|---------| +| **第一代:补全** | 2021-2023 | GitHub Copilot、Tabnine | 实时代码补全,逐行建议 | +| **第二代:AI 原生 IDE** | 2024-2025 | Cursor、Windsurf | 理解整个项目,多文件编辑 | +| **第三代:终端智能体** | 2025-2026 | Claude Code、Codex、Roo Code | 自主执行任务,读写文件,运行命令 | + +第一代是"打字加速器"——你写一半,它猜后一半。 + +第二代是"结对编程伙伴"——它理解你的项目上下文,能跨文件重构。 + +第三代才是真正的质变——**它不再是工具,它是一个能独立干活的智能体。** 你用自然语言描述需求,它读代码、改代码、跑测试、修 bug,全程不需要你碰键盘。 + +### 1.2 2026 年的工具格局 + +现在的 AI 编程市场,已经打成了一片红海: + +![2026 AI 编程工具格局](https://cdn.union.jxyunge.com/self-media/004/diagram-02-landscape.png) + +| 阵营 | 代表 | 哲学 | +|------|------|------| +| **AI 原生 IDE** | Cursor(100 万+ 用户)、Windsurf | 把 AI 深度集成进编辑器的每个角落 | +| **终端智能体** | Claude Code(8 个月登顶 #1)、OpenAI Codex | 在终端里自主工作,不绑定任何 IDE | +| **开源插件** | Roo Code、Cline、Kilo Code | VS Code/JetBrains 插件,灵活选模型 | +| **平台内置** | GitHub Copilot(2000 万用户)、Amazon Q | 与现有开发工作流无缝集成 | + +**一个惊人的变化:Claude Code 从 2025 年 5 月发布,仅用 8 个月就超越了 GitHub Copilot 和 Cursor,成为最受欢迎的 AI 编程工具。** 满意度排名中,Claude Code 以 46% 遥遥领先,Cursor 19%,GitHub Copilot 仅 9%。 + +这说明什么?开发者正在从"AI 辅助"走向"AI 主导"。终端智能体这种"全自主"模式,正在成为主流。 + +--- + +## 二、开发方式的五大剧变 + +### 2.1 从"写代码"到"写需求" + +传统开发:产品经理写需求文档 → 开发拆任务 → 逐行写代码 → 调试 → 提交 + +AI 时代:**用自然语言描述你想要什么 → AI 生成完整实现 → 你审查和调整** + +这有个新名词——**Vibe Coding(氛围编程)**。Andrej Karpathy 在 2025 年初提出的概念,到 2026 年已经成为 Collins 词典年度词汇,MIT Technology Review 将"生成式编码"列入年度十大突破技术。 + +Vibe Coding 的核心理念是:**你负责方向和判断,AI 负责实现。** + +![Vibe Coding 工作流](https://cdn.union.jxyunge.com/self-media/004/diagram-03-vibe-coding.png) + +最炸裂的数据:**Vibe Coding 的使用者中,63% 不是程序员**——他们是设计师、产品经理、创业者,甚至文科生。 + +### 2.2 从"单打独斗"到"多工具协奏" + +2026 年的开发者不再只用一个工具。调研显示: + +- **70%** 的开发者同时使用 2-4 个 AI 工具 +- **15%** 使用 5 个以上 + +一个典型的 2026 开发者工作流: + +| 场景 | 工具选择 | 原因 | +|------|---------|------| +| 快速原型 | Cursor | 所见即所得,多文件编辑快 | +| 复杂重构 | Claude Code | 百万 token 上下文,理解整个仓库 | +| 代码审查 | GitHub Copilot | 与 PR 工作流天然集成 | +| 调试排查 | Roo Code / Cline | 开源灵活,可自定义 Agent 行为 | + +**工具的选择不再是"哪个最好",而是"哪个最适合当前任务"。** + +### 2.3 从"初级写代码"到"AI 写代码、人审代码" + +以前的分工:初级工程师写代码,高级工程师审代码。 + +现在的分工:**AI 写代码,所有人审代码。** + +Pragmatic Engineer 的调研发现了一个有趣的倒挂:**Staff+ 级别的资深工程师是 AI Agent 最重的用户**(63.5% 使用率),比初级工程师(49.7%)高了近 14 个百分点。 + +![AI 工具使用率与职级关系](https://cdn.union.jxyunge.com/self-media/004/diagram-04-seniority.png) + +为什么?因为资深工程师**最知道什么是好代码**,他们能更高效地驾驭 AI,也能更准确地判断 AI 的输出是否靠谱。 + +这就引出了一个颠覆性的结论:**AI 时代最值钱的能力不是写代码,而是判断代码。** + +### 2.4 从"人适应工具"到"工具适应人" + +以前学编程:学语法 → 学框架 → 学 IDE 快捷键 → 用键盘写代码。 + +现在:**用你最自然的方式表达想法,工具来适应你。** + +想用 IDE?Cursor。想用终端?Claude Code。想在浏览器里搞?Replit。想用手机?ChatGPT 也能生成代码。 + +甚至连交互方式都在分化: + +| 交互方式 | 代表工具 | 适合人群 | +|---------|---------|---------| +| IDE 集成 | Cursor、Windsurf | 习惯 GUI 的开发者 | +| 终端 CLI | Claude Code、Codex | 追求效率的专业开发者 | +| 对话式 | ChatGPT、Claude.ai | 非技术人员、快速验证 | +| 低代码平台 | Bolt、Lovable、v0 | 设计师、产品经理 | + +### 2.5 从"代码产出"到"规格驱动" + +这是最深层的变化。 + +以前衡量开发者的标准是代码产出——写了多少行、提了多少 PR、解了多少 bug。 + +现在?AI 一天能生成人类一个月的代码量。**代码产出作为衡量标准已经失效了。** + +新的核心能力变成了: + +- **写清楚需求规格(Spec)**:你的 prompt 质量直接决定 AI 的输出质量 +- **架构设计能力**:AI 能写函数,但不擅长做系统级的架构决策 +- **审查和质控**:在 AI 生成的代码洪流中,快速判断什么能用、什么有坑 +- **上下文工程**:如何组织和喂给 AI 最有效的上下文信息 + +InfoQ 的年度盘点直接用了一个惊悚的标题:**"Spec 正在蚕食人类编码"**。 + +--- + +## 三、两个阵营的激烈碰撞 + +围绕"AI 会不会取代程序员",行业里形成了两个截然对立的阵营。 + +### 3.1 乐观派:蛋糕变大了 + +乐观派的核心论点:**AI 编程不是在抢程序员的饭碗,而是在做大整个蛋糕。** + +论据: +- 以前因为"找不到程序员"或"开发成本太高"而胎死腹中的项目,现在都可以做了 +- 非技术人员能做原型了,创业门槛大幅降低 +- 美国劳工统计局数据:纯"Programmer"岗位下降 25%,但"Developer"、"系统架构"、"产品工程"岗位没怎么降 + +他们的结论是:**AI 会消灭"写代码"这个动作,但不会消灭"做软件"这件事。** 开发者会从"代码打字员"升级为"软件导演"。 + +### 3.2 警告派:洗牌已经开始 + +警告派也有硬核论据: + +- 辛顿("AI 教父"):AI 将在 2026 年取代大量工作岗位 +- 马斯克:"编程奇点就在 2026 年" +- Google 总监警告:"只会写 Prompt 的程序员,2026 年将被淘汰" +- Y Combinator:25% 的新创公司 95% 的代码由 AI 生成——**这些公司根本没招几个程序员** + +他们的结论是:**中间层程序员受冲击最大。** 纯执行、不懂业务、不懂架构的"CRUD 工程师"正在被 AI 直接替代。 + +--- + +## 四、老邓的观点 + +说说我自己的看法。 + +### "程序员"不会消失,但"写代码的人"会变少 + +这不是文字游戏。 + +AI 消灭的是"写代码"这个**机械劳动**,但"用软件解决问题"这个需求不但没减少,反而因为 AI 降低了门槛而爆炸式增长。 + +打个比方:**电梯发明后,"爬楼梯"这个动作少了,但盖楼反而更多了。** AI 编程就是软件行业的"电梯"。 + +### 最危险的人:会写代码但不会思考 + +你以为 AI 只淘汰不会写代码的人?错了。 + +**最危险的是那些"只会写代码"的人。** + +他们能用 Python 写个脚本,能用 React 撸个页面,但你问他为什么要这样设计、有没有更好的方案、这个架构三个月后会不会崩——他说不上来。 + +这样的人,AI 可以 100% 替代。 + +### 未来程序员的四个必备能力 + +我认为 2026-2028 年,有竞争力的开发者需要: + +![开发者能力模型转变](https://cdn.union.jxyunge.com/self-media/004/diagram-05-skills.png) + +**1. 需求翻译力** — 把模糊的业务需求翻译成 AI 能理解的精确规格。这不是写 prompt 那么简单,而是一种系统性的需求工程能力。 + +**2. 架构判断力** — AI 能写函数,但不擅长做系统级决策。选什么数据库、怎么拆微服务、性能瓶颈在哪——这些需要经验和判断力。 + +**3. 质量审计力** — AI 生成的代码可能有安全漏洞、性能问题、逻辑边界错误。能快速发现这些问题的人,就是 AI 时代的"质检官"。 + +**4. AI 驾驭力** — 知道什么时候用 Cursor、什么时候切 Claude Code、什么时候该手写。就像赛车手知道什么时候踩油门、什么时候踩刹车。 + +### 给不同人群的建议 + +**给初级开发者:** 不要停止学习底层原理。AI 能帮你写代码,但如果你不懂代码背后的逻辑,你就无法判断 AI 写的对不对。**先成为一个好的代码审查者,再成为一个好的 AI 驾驭者。** + +**给资深开发者:** 恭喜你,你的经验和判断力在 AI 时代反而更值钱了。拥抱 Agent 工具,让 AI 处理你以前不愿意做的琐碎工作,把精力放在架构和设计上。 + +**给非技术人群:** 这是你们的黄金时代。Vibe Coding 让你无需学编程就能把想法变成产品。但记住,**做出来只是第一步,做好才是关键**——产品思维和业务理解比写代码更重要。 + +**给团队管理者:** 不要再用代码行数衡量开发者了。新的 KPI 应该是:需求完成速度、架构设计质量、系统稳定性。**你需要的不是更多写代码的人,而是更强的"软件导演"。** + +--- + +## 五、尾声:代码不死,只是换了个写法 + +2026 年的 AI 编程革命,本质上是一次**生产力的重新分配**。 + +代码不会消失——软件的世界只会越来越大。但谁来写代码、怎么写代码、写代码意味着什么——这些都在被重新定义。 + +90% 的代码由 AI 生成不可怕,可怕的是你还在用 2020 年的方式工作。 + +**工具在进化,你呢?** + +--- + +## 参考资料 + +- [AI Tooling for Software Engineers in 2026 | Pragmatic Engineer](https://newsletter.pragmaticengineer.com/p/ai-tooling-2026) +- [Developer Survey 2026: AI Coding Tool Adoption Hits 73%](https://claude5.ai/news/developer-survey-2026-ai-coding-73-percent-daily) +- [Cursor vs Windsurf vs Claude Code in 2026 | DEV Community](https://dev.to/pockit_tools/cursor-vs-windsurf-vs-claude-code-in-2026-the-honest-comparison-after-using-all-three-3gof) +- [Vibe Coding:AI 驱动的编程新范式](https://blog.ccino.org/p/vibe-coding-ai-paradigm-2025-2026/) +- [2026年AI编程工具全景测评 | 知乎](https://zhuanlan.zhihu.com/p/1999804779141030200) +- [2026年必藏的3款顶尖AI编程开源工具 | CSDN](https://aicoding.csdn.net/69676dacea53844658f6c9ba.html) +- [AI 时代需要更多新型程序员 | 知乎](https://zhuanlan.zhihu.com/p/1996205110490071089) +- [Spec 正在蚕食人类编码 | InfoQ](https://www.infoq.cn/article/5lxt9ibO77f3HKbITN5s) diff --git a/articles/004/cover.png b/articles/004/cover.png new file mode 100644 index 0000000..55b8169 Binary files /dev/null and b/articles/004/cover.png differ diff --git a/articles/004/diagram-01-evolution.mmd b/articles/004/diagram-01-evolution.mmd new file mode 100644 index 0000000..72fc440 --- /dev/null +++ b/articles/004/diagram-01-evolution.mmd @@ -0,0 +1,23 @@ +graph LR + subgraph 第一代["第一代:代码补全(2021-2023)"] + A1["GitHub Copilot"] + A2["Tabnine"] + end + + subgraph 第二代["第二代:AI 原生 IDE(2024-2025)"] + B1["Cursor"] + B2["Windsurf"] + end + + subgraph 第三代["第三代:终端智能体(2025-2026)"] + C1["Claude Code"] + C2["OpenAI Codex"] + C3["Roo Code"] + end + + 第一代 -->|"从补全到理解"| 第二代 + 第二代 -->|"从辅助到自主"| 第三代 + + style 第一代 fill:#0d2137,stroke:#94A3B8,color:#e0f7fa + style 第二代 fill:#0d2137,stroke:#F59E0B,color:#e0f7fa + style 第三代 fill:#0d2137,stroke:#10B981,color:#e0f7fa diff --git a/articles/004/diagram-01-evolution.png b/articles/004/diagram-01-evolution.png new file mode 100644 index 0000000..e403f93 Binary files /dev/null and b/articles/004/diagram-01-evolution.png differ diff --git a/articles/004/diagram-02-landscape.mmd b/articles/004/diagram-02-landscape.mmd new file mode 100644 index 0000000..301909b --- /dev/null +++ b/articles/004/diagram-02-landscape.mmd @@ -0,0 +1,26 @@ +graph TB + subgraph IDE["AI 原生 IDE"] + I1["Cursor
100万+ 用户"] + I2["Windsurf
$15/月"] + end + + subgraph Agent["终端智能体"] + A1["Claude Code
满意度 #1 (46%)"] + A2["OpenAI Codex"] + end + + subgraph Open["开源插件"] + O1["Roo Code"] + O2["Cline"] + O3["Kilo Code"] + end + + subgraph Platform["平台内置"] + P1["GitHub Copilot
2000万用户"] + P2["Amazon Q"] + end + + style IDE fill:#0d2137,stroke:#22D3EE,color:#e0f7fa + style Agent fill:#0d2137,stroke:#10B981,color:#e0f7fa + style Open fill:#0d2137,stroke:#F59E0B,color:#e0f7fa + style Platform fill:#0d2137,stroke:#818CF8,color:#e0f7fa diff --git a/articles/004/diagram-02-landscape.png b/articles/004/diagram-02-landscape.png new file mode 100644 index 0000000..c0f2921 Binary files /dev/null and b/articles/004/diagram-02-landscape.png differ diff --git a/articles/004/diagram-03-vibe-coding.mmd b/articles/004/diagram-03-vibe-coding.mmd new file mode 100644 index 0000000..dc62b8f --- /dev/null +++ b/articles/004/diagram-03-vibe-coding.mmd @@ -0,0 +1,10 @@ +graph LR + A["💡 用自然语言
描述需求"] --> B["🤖 AI 生成
完整代码"] + B --> C["👀 人工审查
调整方向"] + C --> D["✅ 测试验证
交付上线"] + D -.->|"新需求"| A + + style A fill:#0d3b66,stroke:#00e5ff,color:#e0f7fa + style B fill:#10a37f,stroke:#fff,color:#fff + style C fill:#F59E0B,stroke:#fff,color:#fff + style D fill:#4caf50,stroke:#fff,color:#fff diff --git a/articles/004/diagram-03-vibe-coding.png b/articles/004/diagram-03-vibe-coding.png new file mode 100644 index 0000000..b8e2ff2 Binary files /dev/null and b/articles/004/diagram-03-vibe-coding.png differ diff --git a/articles/004/diagram-04-seniority.mmd b/articles/004/diagram-04-seniority.mmd new file mode 100644 index 0000000..992f355 --- /dev/null +++ b/articles/004/diagram-04-seniority.mmd @@ -0,0 +1,5 @@ +xychart-beta + title "AI Agent 使用率 vs 职级" + x-axis ["初级工程师", "中级工程师", "高级工程师", "Staff+"] + y-axis "Agent 使用率 (%)" 0 --> 80 + bar [49.7, 52.3, 58.1, 63.5] diff --git a/articles/004/diagram-04-seniority.png b/articles/004/diagram-04-seniority.png new file mode 100644 index 0000000..85c3ef0 Binary files /dev/null and b/articles/004/diagram-04-seniority.png differ diff --git a/articles/004/diagram-05-skills.mmd b/articles/004/diagram-05-skills.mmd new file mode 100644 index 0000000..a45de96 --- /dev/null +++ b/articles/004/diagram-05-skills.mmd @@ -0,0 +1,19 @@ +graph TB + subgraph 过去["❌ 过去:代码能力为王"] + P1["语法精通"] + P2["框架熟练"] + P3["手写代码速度"] + P4["代码行数产出"] + end + + subgraph 未来["✅ 未来:判断能力为王"] + F1["需求翻译力
模糊需求 → 精确规格"] + F2["架构判断力
系统设计 · 技术选型"] + F3["质量审计力
安全 · 性能 · 边界"] + F4["AI 驾驭力
选对工具 · 高效协作"] + end + + 过去 -->|"能力模型转变"| 未来 + + style 过去 fill:#0d2137,stroke:#c62828,color:#e0f7fa + style 未来 fill:#0d2137,stroke:#10B981,color:#e0f7fa diff --git a/articles/004/diagram-05-skills.png b/articles/004/diagram-05-skills.png new file mode 100644 index 0000000..5206957 Binary files /dev/null and b/articles/004/diagram-05-skills.png differ diff --git a/scripts/upload_qiniu_004.py b/scripts/upload_qiniu_004.py new file mode 100644 index 0000000..c5d9b0c --- /dev/null +++ b/scripts/upload_qiniu_004.py @@ -0,0 +1,63 @@ +"""上传文章 004 的所有图片到七牛云 OSS""" + +import os +import glob +from qiniu import Auth, put_file, CdnManager + +ACCESS_KEY = 't1PIPGcvBY9lJVXFZFb48maTQsGGhvLsR5QQlNq0' +SECRET_KEY = 'KGooFdF5eCLdCIMCOD6x5ofMzu4vYE17T5Mvp9qC' +BUCKET_NAME = 'union-saas' +CDN_DOMAIN = 'https://cdn.union.jxyunge.com' +UPLOAD_PREFIX = 'self-media/004/' + + +def upload_file(local_path, key): + """上传单个文件到七牛""" + q = Auth(ACCESS_KEY, SECRET_KEY) + token = q.upload_token(BUCKET_NAME, key, 3600) + ret, info = put_file(token, key, local_path, version='v2') + if info.status_code == 200: + url = f'{CDN_DOMAIN}/{key}' + print(f' OK {os.path.basename(local_path)} -> {url}') + return url + else: + print(f' FAIL {os.path.basename(local_path)}: {info}') + return None + + +def main(): + img_dir = os.path.join(os.path.dirname(__file__), '..', 'articles', '004') + + # 收集所有 PNG 图片文件 + files = sorted(glob.glob(os.path.join(img_dir, '*.png'))) + + urls = [] + results = {} + for f in files: + name = os.path.basename(f) + key = UPLOAD_PREFIX + name + url = upload_file(f, key) + if url: + results[name] = url + urls.append(url) + + print(f'\n===== 上传完成: {len(results)}/{len(files)} =====') + for name, url in results.items(): + print(f'{name}: {url}') + + # 刷新 CDN 缓存 + if urls: + print('\n刷新 CDN 缓存...') + q = Auth(ACCESS_KEY, SECRET_KEY) + cdn = CdnManager(q) + ret, info = cdn.refresh_urls(urls) + if info.status_code == 200: + print('CDN 缓存刷新成功') + else: + print(f'CDN 刷新失败: {info}') + + return results + + +if __name__ == '__main__': + main()