📌 项目地址:codecrafters-io/build-your-own-x | ⭐ 504,202 颗星 | 🔧 Markdown | 📜 未标注
这不是一个项目,是一张“学会”的地图
打开 codecrafters-io/build-your-own-x,你看到的不是一个软件,而是一个 Markdown 文件。里面列了300多篇外部教程链接,按技术类别分成28组,外加一个“Uncategorized”。
它没有任何代码,没有安装步骤,没有配套视频。但它在 GitHub 上拿到了504,202颗星——这个数字说明了一件事:很多人需要它。
我最早看到它是在两年前,当时刚学会用 Git 但完全不懂它的内部逻辑。点进去发现第一行引用费曼的话:
What I cannot create, I do not understand.
这句话就是仓库的全部理由。
为什么50万人收藏?因为“用”和“造”是两种学习
绝大多数编程教程教你怎么调用 API、配置参数、跑通 demo。你跟着做,能解决临时问题,但换一个场景就忘了。
这个仓库反着来:它告诉你“别急着用,先把它造出来”。比如你想懂 Web 服务器,它不会教你怎么配置 Nginx,而是让你从零写一个能响应 HTTP 请求的服务。你亲手造出来,才算真正理解。
我试过两种路径。读 Redis 文档一周,记不住 AOF 重写流程。跟着一篇手写 Redis Server 的教程(属于这个仓库的 Database 类别)写了GET/SET/PEXPIRE,只花两天。之后再看生产级 Redis 源码里写数据到磁盘的逻辑,立刻能对应到自己实现时遇到的坑。
差在哪里?一个是输入,一个是输出。
仓库里有什么,没有什么
README 把教程分成这些类别:
- 3D Renderer
- AI Model
- BitTorrent Client
- Blockchain / Cryptocurrency
- Bot
- Command-Line Tool
- Database
- Docker
- Emulator / Virtual Machine
- Front-end Framework / Library
- Game
- Git
- Memory Allocator
- Network Stack
- Neural Network
- Operating System
- Physics Engine
- Processor
- Programming Language
- Regex Engine
- Search Engine
- Shell
- Template Engine
- Text Editor
- Visual Recognition System
- Voxel Engine
- Web Browser
- Web Server
- 外加一个 Uncategorized
每个类别下面列了具体教程链接,附带语言标签。例如“3D Renderer”下面有7篇,包括 C++ 的 Ray Tracing in One Weekend、C#/TypeScript/JavaScript 的软渲染教程等。“Distributed Systems”目前只有一篇 Java 的 Kafka 类实现。
它会告诉你“这是教程”,不保证链接永远有效。有些冷门类目可能只有一两篇,但热门类目(比如 Git、Docker、Shell)因为社区持续 PR,经常有新内容加入。
我怎么选教程,怎么跟下来
这个仓库不提供支持。你需要自己判断一篇教程值不值得跟。我踩过两次坑,总结出两步筛选法。
第一步,读前200字。如果超过20%的概念需要停下来查,关掉。说明你的前置知识差太多,硬啃效率低。如果80%能看懂,并且知道最终产出是什么(比如“一个能画球的软渲染器”),就留下来。
第二步,确认增量式教学。好的教程每步只引入一个抽象,每个阶段都能跑出结果。例如我选的《Ray Tracing in One Weekend》从 main() 写起,先定义 vec3,然后写球体结构、射线-球体相交——每个版本都能输出一张图片。坏教程喜欢先铺一堆数学概念再写代码,容易读着读着就断了。
我当时选这篇,是因为用过 Three.js 但不懂光追原理。教程是 C++,我 C++ 基础一般但能读懂,花了一周跟上。
前三天的感觉是:一直在写 vec3 的加减乘除、输出像素颜色。第4天写到球体相交,射线公式 P = O + t*D 代入球面方程解二次方程。跟着敲完,屏幕上出现了一个红色球体——那一下挺有成就感。
卡得最久的是漫反射采样。原教程用概率密度函数推导半球方向公式,我看了两遍没懂。搜评论区有人给出替代方案:先在单位立方体里随机生成点,再丢弃模长大于1的点。比原公式直观,结果一样。这种社区补充信息在官方文档里找不到,但在长期维护的教程仓库 Issues 里经常有。
跑完整个教程花了6个小时(不算查概念时间)。最终程序300多行 C++,渲染一个粉色球体带阴影、背景渐变。代码量不大,但它让我理解了射线如何转化成像素,以及为什么现实阴影是“面”不是“点”。
这个仓库不会给你的三样东西
一、不提供新手保姆。 如果你连 IDE 怎么配置、C++ 怎么编译都不清楚,建议先学完基础再看它。这些教程默认你懂工具链。
二、不承诺进阶。 手写一个 Redis 节点不意味着你理解了分布式一致性,只能说明你懂了单机数据结构。它帮你跨过门槛,但门槛后面的路得自己走。
三、没有监督。 没有人催你完成。如果你收藏后一周还没建项目文件夹,大概率不会再打开。唯一有效的启动方式:现在打开 README,找到你熟悉的技术门类,选一篇语言匹配的教程,新建一个空文件夹,开始写第一行。
谁适合打开这个仓库
- 有6个月以上编程经验,对某个系统停留在“会调用 API”的阶段。
- 愿意从零动手,一步步实现一个最简版本。
- 接受花时间查资料、改 bug——教程不会替你解决环境问题。
不适合零基础,也不适合只想马上跑通一个 demo 的人。
一个马上能做的动作
下次你打开 README,选一个你最常用但从未造过的技术(比如 Shell、文本编辑器、Git),点开对应类别下的第一篇教程,读前200字。如果里面出现超过3个需要查定义的概念,关掉换一篇。如果读得通且能想清楚最终产出是什么,就建个文件夹,开始写。
50万人收藏的路,得自己走一遍。