写好一篇设计文档并不是一件容易的事情,本文从 Go 官方 proposal 仓库(golang/proposal/design)中挑选了几个公认优秀、影响深远的设计文档,提炼它们的共性结构与写法,总结成一份可复用的设计文档写作指南,并精炼成一个 to-design skill。
01 引言:软件工程范式的五十年之变
"Same person. Different era. The difference is the tooling."
人未变,时代已改。拉开差距的,全在工具。——Garry Tan, Y Combinator 总裁 & CEO, 2026 年
卷首语用五个人的故事画出了一幅图景:Karpathy 半年没写代码,Amodei 预言 90% 代码将由 AI 完成,Garry Tan 的产出翻了 810 倍,Boris Cherny 不再写代码只审查代码,antirez 放下了亲手雕琢每一行的执念。这些信号指向同一个结论——软件工程正在经历自 1968 年这门学科诞生以来最深刻的一次范式转换。
本章建立理解这场变革所需的概念坐标。它是怎么一步步走到今天的?新旧范式之间真正的断裂在哪里?全书贯穿的那根主线——"用结构化知识驾驭非结构化 AI 能力"——是怎么来的?
00 卷首语:当 Karpathy 说他半年没写一行代码
"I don't think I've typed like a line of code probably since December, basically, which is an extremely large change."
从去年十二月起,我基本上一行代码都没写过,这是一个巨大的变化。——Andrej Karpathy,No Priors 播客,2026 年 3 月
LLM 究竟是如何工作的?
Machine Learning Transformers LLM Neural Networks AI
本文带你走一遍 LLM 的工作原理。现代 LLM 大多是由 transformer 块反复堆叠而成的,因此理解了 transformer 机制,你就掌握了大部分。
我将覆盖现代基于 transformer 的 LLM 内部的核心机制,避开那些复杂的数学。别误会,你应该学数学,但本文可以作为一个入门。
大多数现代 LLM 共享同一套 transformer 家族的骨架。差异来自于各自的训练数据、规模和配置选择,以及在此之上的后训练。读完本文后,你应该能够阅读许多现代 LLM 论文或模型卡,并知道每个部分在讲架构中的哪个组件。
路线如下:
- Token——一串文本如何变成一组整数序列
- Embedding——这些整数如何获得含义
- 位置编码——模型如何知道 token 的顺序
- Attention——token 之间如何交换信息
amd64 微架构级别对 Go 程序性能提升多少?
在 Go 1.17 之前,Go 编译器总是生成可由任何 64 位 x86 处理器执行的 x86 二进制文件。
Go 1.18 为 AMD64 引入了 4 个架构级别 。每个级别在编译器可以包含在生成的二进制文件中的 x86 指令集上有所不同:
- GOAMD64=v1(默认值):基准模式。仅生成所有 64 位 x86 处理器都能执行的指令。
- GOAMD64=v2:所有 v1 指令,加上 CMPXCHG16B、LAHF、SAHF、POPCNT、SSE3、SSE4.1、SSE4.2、SSSE3。
- GOAMD64=v3:所有 v2 指令,加上 AVX、AVX2、BMI1、BMI2、F16C、FMA、LZCNT、MOVBE、OSXSAVE。
- GOAMD64=v4:所有 v3 指令,加上 AVX512F、AVX512BW、AVX512CD、AVX512DQ、AVX512VL。
例如,设置 GOAMD64=v3 将允许 Go 编译器在生成的二进制文件中使用 AVX2 指令(这在某些情况下可能会提高性能);但是这些二进制文件将无法在不支持 AVX2 的旧 x86 处理器上运行。
Go 工具链也可能生成更新的指令,但会通过动态检查来确保它们只在支持的处理器上执行。例如,如果设置了 GOAMD64=v1,并且 CPUID 报告 POPCNT 指令可用,那么 math/bits.OnesCount 仍然会使用该指令。否则,它会回退到通用实现。
Go 工具链目前不生成任何 AVX512 指令。
不支持 SSE3 的平台不支持种族检测器。
64 位 Intel 和 AMD 处理器已经演进了几十年。当你为 64 位 Intel 或 AMD 处理器编译 Go 程序时,编译器默认面向的是一个将近 20 年前的指令集。生成的二进制文件几乎能在任何 x64 芯片上运行,但同时也放弃了自 2003 年以来添加的所有指令。
我们通常用微架构级别(microarchitecture levels)来描述这一分层。每个级别捆绑了一组可以假定存在的指令集扩展:
| 级别 | 新增内容(大致) |
|---|---|
| v1 | 原始 AMD64 基线(SSE2) |
| v2 | popcnt、SSE4.2 |
| v3 | AVX2 |
| v4 | AVX-512(F/BW/DQ/VL) |
Loop Engineering 实践:一次批量实现 8 个 issue,完成夔牛工具的开发
I don't talk to an agent anymore, I talk to a loop or a routine.
——Boris Cherny
先讲一个真实的 case。
6 月 10 日下午,我把一个新工具 kuiniu(夔牛) 的 PRD 丢给 Claude Code,让它生成 8 个 issue 卡到 GitHub 仓库。然后我敲了一句 /loop-it,然后离开了。
一个小时后打开仓库一看,8 个 issue 全 closed,对应的 PR 全 merge 了。main 分支上多出了 client、server、codec、bitflip 检测、丢包统计、命令行入口、Makefile/goreleaser 集成,还顺手抽出了一个 util/rotate_writer.go。
Loop Engineering 实践:我把 RDMA 开发库移植到 Go 语言,花费 239 块钱
傻瓜式RDMA高性能网络开发:从零跑到 400 Gb每秒
用 Go 写 RDMA,到底能有多简单?又能有多快?这篇带你从零跑到 400 Gb/s。
开篇:一个让人又爱又怕的技术
如果你做过高性能网络,一定听过 RDMA 这个词。它是 AI 训练集群里 GPU 之间狂飙数据的底层、是分布式存储压榨延迟的杀手锏、是金融交易系统微秒必争的武器。
两种传输 & 两种操作
RC(可靠连接,类比 TCP):有序可靠,支持双边和单边操作
UD(不可靠数据报,类比 UDP):无连接,一对多
双边操作(Send/Recv):接收方要先挂好接收请求,双方 CPU 都参与
单边操作(RDMA Write/Read):发起方直接读写对端内存,对端 CPU 完全不参与——这是 RDMA 最"魔法"的地方
大厂的内部工具居然开源了! 一窥百度物理网络秒级监控定位的秘密
目前顶尖的云服务商都包含百万台服务器、数十甚至上百个机房、上万台网络设备、百万级网络链路。单单一个GPU集群,就有上万卡的级别。对这些网络和服务器的监控,一个分钟级别的故障,可能就是上百万资产的损失。
这不是一个ping能解决的问题。
今天,我们将百度物理网络黑盒监控方向的工具集 nettools 开源了(https://github.com/baidu/nettools),第一批放出的是 bitflip 和 bitflip6,用于检测网络丢包和比特翻转,在百度内部跑了很长时间了。
