CodeCrafters 的 73 个硬核编程项目清单:一份按经典论文组织的自学地图

编程学习
系统编程
开源
CodeCrafters
项目实战
2026/10/19
·

阅读时间: 大约 15 分钟

CodeCrafters 的 73 个硬核编程项目清单:一份按经典论文组织的自学地图

负载均衡项目引用的"双随机选择"对比图:横轴为缓存负载刷新间隔,纵轴为平均排队时间,Random pick、Best of 2、Best of 3 与 Best 四条曲线

2025 年 4 月 14 日,编程学习平台 CodeCrafters 的开发者 Karan Kalra 与 CEO Sarup Banskota 在官方博客发布了一篇 18 分钟阅读量的长文《73 Programming Project Ideas to Inspire and Challenge You》。与网上常见的”做个待办清单、做个天气应用”式创意列表不同,这份清单的每个项目都明确指向一份权威规范、经典论文或权威教程:BitTorrent 项目直接挂官方协议规范,Raft 项目挂 Raft 论文,Diff 项目挂 Myers 1986 年论文,SQL 优化器项目挂 DuckDB 优化器讲解。本文基于官方全文逐篇通读,对清单做归类、机制拆解与适用性分析。

一、背景动机:为什么是”从零实现”而不是”调 API”

官方开篇直接批评互联网上的项目创意”basic and dull”(基础且乏味),主张选择”teach a lot and are fun to build”(能教会很多东西、做起来有趣)的项目。这背后是 CodeCrafters 一贯的产品立场:通过从零复刻真实系统(Git、Redis、Docker、SQLite 等)来理解底层,而不是在现成框架上堆叠业务代码。

清单的组织逻辑不是按语言、也不是按难度,而是按”你将掌握什么底层原理”来描述每个项目。例如 BitTorrent 客户端条目写的是”learn how P2P networking works”,容器条目写的是”kernel namespaces, chroot, process isolation”,SQLite 条目写的是”B-trees”与”how SQLite stores data on disk”。也就是说,项目名只是载体,论文/规范才是学习目标。

二、73 个项目的领域归类

通读全文后,可以把 73 个项目归入六个大致方向(官方原文并未分类,以下归类为本文整理):

方向代表项目(官方编号)挂靠的权威资料
操作系统与系统底层5 容器、18 FUSE 文件系统、35 GDB 调试器、58 Malloc、63 Shell、65 Make、56 无锁数据结构容器原理文章、GDB 内部结构、Marwan Burelle 的 malloc 教程、Make 非递归论文
网络与分布式1 BitTorrent、8 DNS 服务器、10 Raft、41 NTP 时间同步、45 Mesh VPN、51 Kafka Broker、55 TCP/IP 协议栈、57 负载均衡、73 去中心化互联网BitTorrent 规范、Raft 论文、RFC 5905、Kafka 协议指南、IETF TCP/IP 文档、Scuttlebutt 与 IPFS
数据与存储12 Bitcask、21 Redis 克隆、25 SQLite、42 HyperLogLog、43 SQL 优化器、52 知识图谱、38 Wikipedia 搜索Bitcask 论文、Redis 官方文档、Google HyperLogLog 论文、DuckDB 优化器文章
图形、游戏与仿真14 Dangerous Dave、47 光线追踪、54 GBA 模拟器、37 国际象棋、70 OpenGL 渲染器、33 立体视觉深度估计GBATEK 文档、《Ray Tracing in One Weekend》、chess programming wiki、Middlebury 数据集
算法与 AI2 Wordle 求解器、19 量子门模拟、36 从零神经网络、62 随机森林、31 进化设计、15 Myers Diff信息论/熵、Bernstein-Vazirani 与 Simon 算法、Karpathy 教学视频、遗传算法资料
完整应用复刻27 Dropbox、40 TikTok、49 Messenger、59 Netflix、50 亚马逊配送路径、28 Google Maps、30 去中心化协作文档系统设计文章、R-tree 原始论文、CRDT 数据结构文章、VRP 算法对比

三、几个代表性项目的机制拆解

3.1 Raft 共识(#10)与 Kafka Broker(#51)

Raft 条目要求”implement the RAFT protocol from scratch to support distributed computing”,学习目标明确写为 consensus、failure recovery、fault-tolerant distributed systems;Kafka Broker 条目则要求实现 topic 创建、produce/consume 请求,重点是并发、竞态条件与分布式日志。两者构成分布式系统学习的一对:前者解决”多副本如何达成一致”,后者解决”日志如何被生产和消费”。

3.2 负载均衡与”双随机选择”(#57)

负载均衡项目要求实现请求分发、健康检查与会话保持。官方在配图旁直接引用了”power of two random choices”(双随机选择)这一经典结论:不从全部后端中挑最优,而是随机取两个、选负载较轻的一个,效果接近全局最优。

官方配图:缓存负载刷新间隔增大时,Best of 2 / Best of 3 的平均排队时间显著低于全量 Best,而 Random pick 几乎持平

图中横轴为 Cached load refresh interval(缓存负载刷新间隔),纵轴为 Mean queue time(平均排队时间):Random pick 曲线在约 18 的位置几乎走平,Best of 2、Best of 3 随间隔缓慢上升,而全量 Best 曲线随间隔拉长急剧恶化——这正是”只看两个候选”在工程上性价比极高的直观证据。需要注意,这张图是官方为说明算法引用的外部研究图,并非 CodeCrafters 自己的实测数据,坐标轴刻度也未标注单位。

3.3 Google Maps 与空间索引(#28)

地图引擎项目要求索引道路、地形、地标与行政区,学习空间索引、范围查询与缩放层级抽象。官方建议先实现 R-tree 原始论文,或用更简单的 Quadtree(四叉树)替代,数据可使用 Natural Earth 与 GeoFabrik 开放数据集。

四叉树空间剖分示意:地图轮廓被递归切分为大小不一的方块,密集区域细分、稀疏区域合并

四叉树把二维空间递归四等分,查询时只遍历与目标范围相交的节点,是比 R-tree 更易上手的入门方案。

3.4 程序化生成与确定性宇宙(#11)

程序化填字游戏条目顺带引出 No Man’s Sky:官方称该游戏是”largest deterministic game till date”,其程序化开放世界包含 18,446,744,073,709,551,616 颗行星(即 2 的 64 次方),所有星球由种子算法确定性生成,无需手工建模。官方建议可从 Wave Function Collapse 算法入手。

No Man's Sky 星系地图截图:当前星系 Bayasu(F4//Water)距 Galactic Core 553539 光年,星球位置由程序化算法生成

3.5 Git(#34)与 Malloc(#58)

Git 条目要求实现 init、commit、diff、log、branch,学习内容寻址存储、哈希与树;官方特别提到 Linus Torvalds 用 10 天写出 Git,推荐《Write yourself a Git》。Malloc 条目则从指针、堆、对齐、碎片与系统调用入手理解内存分配。这两个项目正是 koala-oss 点评中最推荐”彻底解耦黑箱”的方向。

四、关键事实核对

事实官方出处口径
清单规模73 个项目(标题与正文编号 1–73 一致)
发布时间Apr 14th, 2025,标注 18 min read
作者Karan Kalra(Developer, CodeCrafters)、Sarup Banskota(CodeCrafters CEO)
No Man’s Sky 行星数18,446,744,073,709,551,616(官方原文引用,即 2^64)
Git 历史官方称 Linus Torvalds built Git in 10 days
NTP 规范指向 RFC 5905
压缩包规范指向官方 .zip specification

五、这份清单的评测方式与偏向

需要说明:这篇文章本质是”创意汇编”而非评测报告,官方没有给出任何完成率、学习时长、难度评级或对比基准,因此不存在”官方评测方法”可供批判。它的偏向体现在选材上:

  1. 偏向系统与底层:73 个项目中操作系统、网络、存储、分布式占比明显高于前端、移动端与纯业务应用,反映 CodeCrafters 平台自身的课程重心(从零实现系统软件);
  2. 偏向英文资料生态:所有挂靠资源(论文、RFC、YouTube 视频、英文教程)均为英文,非英语学习者需要额外翻译成本;
  3. 配图以梗图为主:正文穿插大量 meme 图(如量子计算条目配”我不敢问量子计算机是什么”表情包),用于调节阅读节奏,并非技术示意图,不能当作学习材料。

六、适用与不适用场景

适合:

  • 已有一门语言基础、想从”会用框架”进阶到”理解原理”的初中级工程师;
  • 准备系统面试(系统设计、分布式、数据库)的人,可把 Raft、Kafka、Redis、负载均衡作为专项;
  • 自学者按图索骥,配合 AI 答疑与官方论文自行推进。

不适合:

  • 完全零基础的新手:清单没有语法教学,直接做容器或 TCP/IP 栈会无从下手;
  • 想要带测试、带验收的结构化课程的人:清单只给方向和资料链接,不提供 CodeCrafters 平台课程里那种逐步测试驱动的反馈闭环;
  • 只想做产品、不关心底层的应用开发者:73 个项目几乎都是”造轮子”,与业务交付距离较远。

七、客观分析:优势与局限

优势:

  1. 每个项目都锚定权威一手资料:论文、RFC、官方规范优先于二手博客,学习路径不容易被错误认知带偏;
  2. 项目之间可组合成体系:DNS、TCP/IP、Web Server、负载均衡、Kafka、Raft 串起来就是一套完整的后端分布式知识网;
  3. 难度梯度客观存在:Wordle 求解器、BMP 编解码适合入门,Raft、量子模拟、TCP/IP 栈适合进阶,可自行挑选。

局限(官方未明说、通读后可核实的口径偏差):

  1. 没有难度分级与前置依赖说明:#2 Wordle 与 #10 Raft 并列编号,新手无法从编号判断先后,官方也未给出推荐顺序;
  2. 是 idea list 不是课程:不提供分步指导、测试用例与验收标准,完成质量完全靠自驱和自查,这与 CodeCrafters 付费课程的体验有本质区别;
  3. 外部链接长期可用性无保障:论文 PDF、YouTube 视频、个人博客分散在各处,清单发布于 2025 年 4 月,部分链接未来可能失效;
  4. 领域覆盖不均:前端工程、移动端、数据工程、安全实战(除 #53 Malware 与 #44 匿名投票外)着墨很少。

八、它意味着什么 / 谁该关注

这份清单的价值不在于”73 个”这个数字,而在于它示范了一种学习方法:用一个可运行的小系统作为载体,反向读懂一份经典论文或规范。对在职工程师而言,每年挑 1–2 个与自己工作相关的项目(如做后端的选 Kafka 或 Raft,做数据库的选 SQLite 或 Bitcask),比泛泛刷教程更能形成长期记忆。CodeCrafters 本身提供带测试的付费课程,但即使不付费,按清单挂靠的公开资料自行尝试也并非不可完成——这一点 koala-oss 条目亦有提及。

参考来源