一、它是什么

大多数技术教程教你「怎么用」一个工具。build-your-own-x 教你「怎么造」一个。

这个仓库本身不包含任何代码——它是一份精心策划的链接索引,把互联网上高质量的「从零实现 XXX」教程按技术方向分类整理,每条都标注了使用的编程语言和教程来源,点进去就能开始学。

属性详情
仓库地址github.com/codecrafters-io/build-your-own-x
Star 数526k+(GitHub 历史前 20)
Fork49.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 valueRedis 支持哪些数据结构?
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、扩散模型、RAGPython
BitTorrent ClientBencode 解析器、BT 客户端Go、Python、C#
Blockchain / Cryptocurrency区块链、PoW/PoS、加密货币Go、Python、JS、Rust
BotTelegram/Discord/Reddit/Slack BotNode.js、Python
Command-Line ToolCLI 应用、dotfiles 管理器Go、Rust、Zig
DatabaseRedis、B+Tree、SQL 引擎、图数据库C、Go、Rust、Python
Docker100 行 Go 实现容器、Linux 容器原理Go、C、Shell
Emulator / VMCHIP-8 模拟器、虚拟机C、C++、Rust
Front-end FrameworkReact 简化版、Virtual DOM、ReduxJavaScript、TypeScript
Game俄罗斯方块、Flappy Bird、物理引擎C++、C#、Python
Git从零实现 Git 版本控制Python、Go
Network StackTCP/IP 协议栈、UDPC、Rust
Neural Network从零实现神经网络、反向传播Python、C
Operating Systemx86 引导加载、内核开发、RISC-VC、Rust
Physics Engine2D/3D 物理引擎C++、C
ProcessorCPU 设计、指令集实现Verilog、VHDL
Programming LanguageLisp 解释器、编译器、垃圾回收C、Haskell、Python、Rust
Regex Engine正则表达式引擎C、Rust、Python
Search Engine全文搜索、爬虫+索引Python、Go
ShellUnix Shell 实现C、Rust、Go
Template Engine模板渲染引擎Python、JavaScript
Text Editor终端编辑器、GUI 编辑器C、Rust、Python
Web Browser浏览器引擎、HTML 解析器Rust、Python
Web ServerHTTP 服务器、WebsocketPython、Go、Node.js
Distributed SystemsKafka-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」的教程数量庞大、质量参差不齐,它做了一层过滤,只收录经过验证的高质量教程。

费曼说得对——真正理解一个东西的标志,是你能亲手造一个出来。

返回技艺录