📌 项目地址:practical-tutorials/project-based-learning | ⭐ 278,305 颗星 | 🔧 Python | 📜 未标注
先说清楚它是什么
practical-tutorials/project-based-learning,278,305 颗 star,整个仓库的核心就是一个 README。README 第一句话把收录标准讲死了:教程必须教你 “build an application from scratch”——从空目录开始,最后得到一个能跑的程序。语法书不收,API 文档不收,技巧合集不收。
列表按主语言分区:C/C++、Python、JavaScript、Go、Rust、Haskell、OCaml、Erlang、Lua 等 23 个。单个教程可以横跨多种技术,但必须有明确的主语言归档。
维护靠社区:fork 仓库,按 CONTRIBUTING.md 的规则提交链接。仓库有一个 link-rot 的 GitHub Action 工作流,定期检查所有链接是否失效。纯人工维护的清单撑不了几年,这条自动扫描是它能活到今天的原因。
C/C++ 分区值得单独讲
从这个分区的难度分布,能看出收录标准。我按梯度列几条:
入门层
- Write a Shell in C:写一个 shell。几百行 C 代码,逐段讲解,有 C 基础就能跟下来。
- Build Your Own Text Editor:终端文本编辑器 kilo,一千行左右。
中间层
- Build Your Own Lisp:从零写一个 Lisp 解释器,解析、求值、环境一步步来。
- Let’s Build a Simple Database:仿 SQLite 的简易数据库,B 树、分页存储都在里面。
- Building a CHIP-8 Emulator:CHIP-8 模拟器。
- Write a hash table in C:哈希表的完整实现。
ssloy 的 Tiny 系列也在这一层,四个项目,行数直接标在标题里:软件渲染器 500 行(Tiny Renderer)、光线追踪 256 行(tinyraytracer)、KABOOM 爆炸模拟 180 行(tinykaboom)、老式 FPS 486 行(tinyraycaster)。工作量一目了然,周末做完一个是有可能的。
天花板
- Write an OS from scratch:从引导扇区开始写操作系统。另一条 os-tutorial 是同类项目,两条并列收录。
分区里还有 JIT 编译器(Part 1 和 Part 2,系列文章按顺序读)、FUSE 文件系统、NES 游戏开发、内存分配器。语言分区不同,但条目结构就是这个模式。
我的用法
先定位语言分区,点开候选教程的开头几段判断难度。我的标准:概念能看懂一半、剩下需要查资料的,正合适。全看得懂说明太浅,全看不懂就换一条往下找。
还有一点,“读得懂”和“写得出”是两回事。跟着教程敲代码时卡住是正常状态,卡住的位置就是教程在起作用的位置。
两个提醒
仓库没有统一的环境和工具链。每个教程怎么编译、怎么运行,以教程原文为准,C/C++ 和 Python 的环境完全不同,README 里没有万能入口。
另外,278k star 里我猜大多数来自“先收藏”。这个清单的价值不在收藏,在于你挑一个项目,花几天到几周做完。做完一个,你就知道自己缺什么了。