AI 辅助编程时代:为什么"无聊"的语言才是正解

1 阅读7分钟

2026年的开发者社区,一个观点正在蔓延:与其追逐 Rust、Zig 这些复杂的新语言,不如用 Python、JavaScript 这些"无聊"的老家伙配合 LLM 效率更高。

争论的焦点看似是语言选择,实则触及了本质:当 AI 成为编程的主力选手,开发者该用什么姿势应对?

一致性红利:LLM 时代的语言选择逻辑

笔者注意到一个现象:大型语言模型会放大不一致的技术栈,同时悄悄强化那些一致性强的东西。那些生态碎片化严重的地方,智能体输出最糟糕;而约定优先的框架,输出最可靠。

模型的本质是在高维向量空间中寻找余弦相似度。 训练语料越一致,推理时输出的 token 就越可靠。就像一群老师教同一个学生,如果老师们的教法七嘴八舌,学生最后学到的东西必然混乱;如果讲的是同一套方法,学生输出自然稳定。

Python 生态:碎片化的代价

Python 生态就是反面教材。一个简单的问题"你用哪个包管理器",就可能牵扯出 pip、Poetry、uv 三种选择,再加上语言版本、系统兼容性排列组合,复杂度让技术负责人头大。

更别说还要面对 Django 还是 FastAPI、async 还是 task queue 这样的选择题。对人类来说这是烦恼,对模型来说这是实实在在需要解决的强化学习问题。

# Python 包管理器碎片化示例
# 问题:同一个项目,不同开发者的环境可能完全不同

# 方案1:pip
pip install requests

# 方案2:poetry
poetry add requests

# 方案3:uv
uv add requests

# 再加上语言版本兼容性问题...
# Python 3.8, 3.9, 3.10, 3.11, 3.12 各有差异
# 第三方库的版本支持也不一致

JavaScript 生态:同样的困境

根据 2024 年 JS 现状调查,生态系统高度碎片化,至少有十几种生产级框架提供着功能相似但实现不同的方案。

有开发者反映,Anthropic 的 Claude Code 对 JavaScript 框架存在硬编码的偏好。这从侧面说明了模型面对碎片化生态时的无力——模型不是不懂,而是碎片化让它无法稳定发挥。

Rails 的启示:约定优于配置

Rails 的情况则截然不同。Ruby on Rails 奉行的"约定优于配置"原则,20年前是为了解放人类程序员,现在看来同样解放了机器。

一个模型在 Rails 项目上推理,比在通用 JavaScript 后端上推理输出更稳定,不是因为 Ruby 语言本身更优秀,而是因为 Rails 的方案高度统一,模型不需要在不同实现之间做概率猜测。

Go 语言:AI 时代的意外赢家

Go 语言几乎完美符合这个逻辑。多年来 Go 语言团队顶住压力,拒绝引入一些开发者呼声很高的便利功能,比如泛型,这让很多开发者不满。但正是这种克制,让 Go 成为当前这个 AI 时代最具优势的主流语言之一。

优势一:Goroutine 对智能体友好

相比线程、回调、async/await 这些让人头疼的并发方案,Goroutine 简单、类型安全,而且在训练语料中出现频率极高。

package main

import (
    "fmt"
    "net/http"
)

// 并发请求示例:Goroutine 使并发编程变得简单
func fetchUrls(urls []string) {
    results := make(chan string, len(urls))

    for _, u := range urls {
        go func(u string) {
            resp, err := http.Get(u)
            if err != nil {
                results <- fmt.Sprintf("%s: %v", u, err)
                return
            }
            defer resp.Body.Close()
            results <- fmt.Sprintf("%s: %s", u, resp.Status)
        }(u)
    }

    for range urls {
        fmt.Println(<-results)
    }
}

func main() {
    urls := []string{
        "https://go.dev",
        "https://golang.org",
        "https://pkg.go.dev",
    }
    fetchUrls(urls)
}

优势二:标准库即战力

net/http alone 支撑着互联网上相当比例的微服务,加密包由 Google 资助维护,代码质量世界级。在 Zoom 和 Keybase 的生产系统中部署过这些默认配置,从未需要引入第三方依赖。

// 最小化 HTTP 服务:标准库即可,无需第三方框架
package main

import (
    "encoding/json"
    "net/http"
)

type Response struct {
    Message string `json:"message"`
    Status  string `json:"status"`
}

func handler(w http.ResponseWriter, r *http.Request) {
    resp := Response{
        Message: "Hello from standard library",
        Status:  "ok",
    }
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(resp)
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

优势三:工具链强制一致性

这是最被低估的优势。Go 设计上只有一个正确做法:gofmt、go vet、go fix 强制执行单一规范,不接受讨价还价。gopls 提供实时语义反馈,golangci-lint 静态强制编码风格和原语,不需要通过 prompt 让智能体遵守规范。

# Go 工具链:开箱即用的高质量工具
gofmt        # 自动格式化,统一代码风格
go vet       # 静态分析,捕获常见错误
go fix       # 自动升级代码到新版本
golint       # 代码风格检查
staticcheck  # 高级静态分析

# 实际工作流:保存即格式化
# 提交前检查:go vet ./... && golangci-lint run
# 无需配置,无需约定,工具链本身即规范

模型的能力边界在哪里

语言模型有一个被反复记录的缺陷:内存管理能力不稳定。这不是某个模型的个别问题,而是整个领域的共同局限。短期内不会消失。

Rust 在类型和借用检查层面强制内存安全,对人类程序员是优秀的设计,但对智能体来说却是持续的战斗。C 和 C++ 更困难,因为训练数据中充满了这类语言几十年来踩坑总结出的经验教训,模型可能学会避免,也可能完美复现。

Go 的选择是:提供接近原生的性能,但不要求智能体直接管理内存。这是一种务实的取舍。

当然,这个逻辑有一个重要的前提:当前的大语言模型主要处理的是非可视化软件任务,即大多数工程师日常面对的基础场景。处理信息、读写文件、响应网络请求,这些场景下 Go 的能力边界足够应对。智能体不擅长的是那些需要精确内存控制的场景,在那些领域 Rust 确实不可替代。

实践建议:2026 年的语言选择策略

回到文章开头的问题:2026 年该用什么语言?答案不是非此即彼,而是一个优先级排序。

场景一:后端服务 / CLI 工具 / 代理编排

推荐:Go + AI 智能体

  • Goroutine + 标准库 = 最少依赖
  • 工具链强制一致性 = 稳定输出
  • Google 背书的工具链 = 长期维护有保障

场景二:数据处理 / 脚本自动化

推荐:Python + AI

  • 丰富生态 + AI 加持 = 覆盖大部分需求
  • 学习曲线平缓 = 快速出成果
  • 不必为了追求"更正确"而放弃生产效率

场景三:系统级编程 / 内存安全严格要求

推荐:Rust(但要有心理准备)

  • AI 辅助 Rust 编程仍是挑战
  • 陡峭学习曲线不是说说而已
  • 特定场景下不可替代

工具思维优先于语言思维

这个思路的共同点是:用 AI 放大现有技能,而不是被"应该学什么语言"的焦虑带着跑。

不是说新语言不值得学。在特定领域、特定场景下,Rust、Zig 这样的语言有它们不可替代的价值。问题是,如果目标是让 AI 辅助编程产出稳定可靠的软件,那么在大多数日常开发场景中,一致性红利的逻辑远比你追不追逐新语言更重要

与其花时间追赶每年都在重新定义自己的语言潮流,不如把精力放在理解现有工具与 AI 的协作边界上。这个选择,在 2026 年显得格外务实。


引用列表

  1. Use boring languages with LLMs - Jacob Young, jry.io - 2026-04-20
  2. Hacker News Discussion - HN #48237012 - 178 points, 143 comments
  3. 2024 State of JS Survey - stateofjs.com