一、它是什么
大多数技术教程教你「怎么用」一个工具。build-your-own-x 教你「怎么造」一个。
这个仓库本身不包含任何代码——它是一份精心策划的链接索引,把互联网上高质量的「从零实现 XXX」教程按技术方向分类整理,每条都标注了使用的编程语言和教程来源,点进去就能开始学。
| 属性 | 详情 |
|---|---|
| 仓库地址 | github.com/codecrafters-io/build-your-own-x |
| Star 数 | 526k+(GitHub 历史前 20) |
| Fork | 49.7k |
| 语言 | 纯 Markdown(100%) |
| 协议 | CC0(公共领域,放弃所有版权) |
| 维护方 | CodeCrafters, Inc.(最初由 Daniel Stefanovic 创建) |
| 最近更新 | 2026-02-21(611 commits,131+ 贡献者) |
一句话定位:GitHub 上最大的「从零构建技术」教程索引库。不是给你看的,是给你做的。
二、费曼理念:为什么「造」比「读」管用
仓库首页引用了费曼的一句话:
"What I cannot create, I do not understand."
—— Richard Feynman
这是整个项目的核心理念。读过《Redis 设计与实现》和亲手写一个简化版 Redis,是两种完全不同的认知深度:
| 层次 | 方式 | 你能回答的问题 |
|---|---|---|
| L1 使用者 | SET key value | Redis 支持哪些数据结构? |
| L2 原理理解者 | 读过《Redis 设计与实现》 | Redis 为什么单线程还这么快? |
| L3 实现者 | 自己写过简化版 Redis | 事件循环里 epoll 和 accept 怎么协作? |
| L4 优化者 | 实现过并对比过多种方案 | 为什么 Redis 用渐进式 rehash 而不是一次性? |
认知科学研究:主动建构的知识,保留率是被动阅读的 3-5 倍。build-your-own-x 推荐的每篇教程都是「理论 + 代码」双驱动——你一边看原理,一边写代码,写完之后不仅「知道」了,而且「做出来」了。
三、30+ 分类全景
仓库覆盖了计算机科学的主要方向,按分类列出,每个条目标注编程语言和教程标题:
| 分类 | 典型教程示例 | 高频语言 |
|---|---|---|
| 3D Renderer | 光线追踪、光栅化、PBR 物理渲染 | C++、Python、Java |
| AI Model | 从零搭建 LLM、扩散模型、RAG | Python |
| BitTorrent Client | Bencode 解析器、BT 客户端 | Go、Python、C# |
| Blockchain / Cryptocurrency | 区块链、PoW/PoS、加密货币 | Go、Python、JS、Rust |
| Bot | Telegram/Discord/Reddit/Slack Bot | Node.js、Python |
| Command-Line Tool | CLI 应用、dotfiles 管理器 | Go、Rust、Zig |
| Database | Redis、B+Tree、SQL 引擎、图数据库 | C、Go、Rust、Python |
| Docker | 100 行 Go 实现容器、Linux 容器原理 | Go、C、Shell |
| Emulator / VM | CHIP-8 模拟器、虚拟机 | C、C++、Rust |
| Front-end Framework | React 简化版、Virtual DOM、Redux | JavaScript、TypeScript |
| Game | 俄罗斯方块、Flappy Bird、物理引擎 | C++、C#、Python |
| Git | 从零实现 Git 版本控制 | Python、Go |
| Network Stack | TCP/IP 协议栈、UDP | C、Rust |
| Neural Network | 从零实现神经网络、反向传播 | Python、C |
| Operating System | x86 引导加载、内核开发、RISC-V | C、Rust |
| Physics Engine | 2D/3D 物理引擎 | C++、C |
| Processor | CPU 设计、指令集实现 | Verilog、VHDL |
| Programming Language | Lisp 解释器、编译器、垃圾回收 | C、Haskell、Python、Rust |
| Regex Engine | 正则表达式引擎 | C、Rust、Python |
| Search Engine | 全文搜索、爬虫+索引 | Python、Go |
| Shell | Unix Shell 实现 | C、Rust、Go |
| Template Engine | 模板渲染引擎 | Python、JavaScript |
| Text Editor | 终端编辑器、GUI 编辑器 | C、Rust、Python |
| Web Browser | 浏览器引擎、HTML 解析器 | Rust、Python |
| Web Server | HTTP 服务器、Websocket | Python、Go、Node.js |
| Distributed Systems | Kafka-like 消息系统 | Java |
每个分类下教程数量不等。操作系统、编程语言这类大方向收录了几十个条目,而 Memory Allocator 这种小众方向只有一个。内容分布上,C/C++、Python、JavaScript、Go、Rust 是出现频率最高的语言。
四、重点分类拆解
Database — 最受欢迎的分类之一
从键值存储到 B+Tree 到完整 SQL 引擎,从 Redis 到图数据库:
- C: Let's Build a Simple Database — 从 B+Tree 到 SQL,经典系列
- Go: Build Your Own Redis from Scratch — 3000 行 Go 实现完整 Redis
- Python: DBDB: Dog Bed Database — 理解持久化存储的核心概念
- Rust: Build your own Redis client and server — Rust 生态版本
- Go: Build Your Own Database from Scratch: From B+Tree To SQL in 3000 Lines — 最硬核的一篇
Operating System — 深水区
写一个操作系统是程序员的终极浪漫:
- Writing a simple OS from scratch — x86 引导加载 + 内核
- Rust OS development tutorials — Rust 写 OS 的完整教程
- xv6: A simple Unix-like teaching OS — MIT 教学用操作系统
- Linux from scratch — 从零构建 Linux 系统
Docker — 100 行代码看透容器本质
理解 Docker 不需要读源码,100 行就够:
- Go: Build Your Own Container in under 100 lines of Go — 100 行实现容器隔离
- C: Linux containers in 500 lines of code — 500 行 C 代码理解 namespace 和 cgroup
- Shell: Docker implemented in around 100 lines of bash — 用 bash 实现 Docker
Programming Language — 造一个语言
从 Lisp 解释器到完整编译器:
- C: Build Your Own Lisp — 用 C 实现 Lisp 解释器(在线书)
- Rust: Build Your Own Programming Language — Rust 生态
- Python: A Python Interpreter written in Python — 理解解释器本质
- Haskell: Write You a Haskell — 用 Haskell 实现编程语言
Web Browser — 浏览器不是黑盒
- Rust: Let's build a browser engine! — 用 Rust 实现浏览器引擎
- Python: Web Browser Engineering — Python 实现浏览器
五、怎么用才有效
这个仓库最大的风险是变成收藏夹吃灰。52 万人 Star 了它,但真正动手做的人不到 1%。以下是推荐的使用方法:
1. 选一个,只选一个。不要贪多。找到你最好奇的技术方向,只做那一个。
2. 控制学习粒度。想快速了解原理?选 200 行的简化版。想深入细节?选完整系列教程。从「玩具实现」到「生产级代码」都有覆盖。
3. 选你熟悉的语言。同一个概念(比如 B+Tree)可以用 C 写一遍理解内存布局,再用 Rust 写一遍理解所有权。如果你刚开始,用你最擅长的语言。
4. 不要 copy-paste。教程的价值在于「你亲手敲了一遍」。复制粘贴和阅读没有区别。
5. 完成比完美重要。跑通核心功能就够。不需要把所有扩展功能都实现。
6. 做完后写一篇笔记。记录你踩的坑、理解的关键点。这比教程本身更有价值。
六、玩一玩:三条推荐路线
根据你的水平和兴趣,推荐三条不同难度的实操路线:
路线 A:入门级 — 2 小时理解 Promise(前端方向)
1. 在 JavaScript 分类找到 Learn JavaScript Promises by Building a Promise from Scratch
2. 跟着教程用 JS 手写一个 Promise/A+ 实现
3. 理解微任务队列、then 链式调用、错误传递
4. 对比原生 Promise,验证你的实现行为是否一致
收获:彻底搞懂事件循环和微任务,面试不再背概念。
路线 B:进阶级 — 周末写个 Redis(后端方向)
1. 在 Database 分类找到 Go: Build Your Own Redis from Scratch 或 Python: Write your own miniature Redis with Python
2. 实现基本 SET/GET/DEL 命令
3. 加上过期机制(TTL)
4. 实现事件循环(epoll/select)
5. 用 redis-benchmark 压测你的实现
收获:理解网络编程、I/O 多路复用、内存数据结构的底层逻辑。
路线 C:硬核级 — 看透 Docker 本质(系统方向)
1. 在 Docker 分类找到 Go: Build Your Own Container in under 100 lines of Go
2. 理解 Linux namespace(PID/NET/MNT/UTS/IPC)
3. 理解 cgroup 资源限制
4. 用 Go 实现一个能跑 echo hello 的最小容器
5. 对比 Docker 源码,理解它在你这 100 行基础上加了什么
收获:容器不再是黑盒。K8s、Docker 的行为你都能从底层解释。
七、适合谁 & 注意点
适合:
- 面试准备者——深入理解底层实现,面试时有真东西可说
- 遇到技术瓶颈的中级开发者——用具体项目驱动学习,摆脱「教程疲劳」
- 想转方向的人——接触新领域(系统编程、AI、数据库)但不知道从哪下手
- 纯粹好奇的人——就是想搞懂「这玩意到底怎么工作的」
- 正在学 Vue/React 的前端——Virtual DOM、Promise、模块打包器都有教程
注意:
- 最大风险是收藏不动手。52 万人 Star 了,但大多数人只是收藏。选一个,这周就开始做。
- 仓库本身不含代码,只提供链接索引。点进去后是外部教程(博客、GitHub repo、视频)。
- 教程质量经过社区筛选但并非官方保证,遇到过时内容可以在仓库提 Issue 或 PR。
- 部分教程是英文的,需要一定阅读能力。
- CC0 协议意味着你可以自由使用、修改、分发,甚至商用,无需署名。
定位:build-your-own-x 不是一本「书」,而是一张精心策划的地图——它告诉你「如果你想从零构建一个 Redis/Docker/操作系统,有哪些最好的教程可以参考」。它解决的核心问题是:互联网上「从零写 XXX」的教程数量庞大、质量参差不齐,它做了一层过滤,只收录经过验证的高质量教程。
费曼说得对——真正理解一个东西的标志,是你能亲手造一个出来。
返回技艺录