汇集了分布式系统、3D渲染、编译器、操作系统等技术的从零实现教程,通过重新发明经典系统帮助程序员理解本质原理。涵盖数据库、网络栈、虚拟机等核心领域。

自己构建 <插入技术名称>
这个仓库是一个精心编写、分步指南的汇编,用于从零开始重新创建我们喜爱的技术。
我不能创造的东西,我就不能理解 — Richard Feynman。
这是一个很好的学习方式。
Java: 从头开始构建类似 Kafka 的系统:分步指南
C++: 光线追踪简介:创建 3D 图像的简单方法
C++: OpenGL 如何工作:500 行代码的软件渲染
C++: Wolfenstein 3D 的光线投射引擎
C++: 基于物理的渲染:从理论到实现
C++: 周末光线追踪
C++: 栅格化:实际实现
C# / TypeScript / JavaScript: 学习如何在 C#、TypeScript 或 JavaScript 中从头开始编写 3D 软件引擎
Java / JavaScript: 构建你自己的 3D 渲染器
Java: 如何在纯 Java 中创建自己的简单 3D 渲染引擎
JavaScript / 伪代码: 从零开始的计算机图形学
Python: 一个 3D 建模工具
Python: 大语言模型 (LLM)
Python: 用于图像生成的扩散模型
Python: 用于文档搜索的 RAG
C#: 如何:初学者使用 Vuforia 和 Unity 3D 的增强现实应用教程 [视频]
C#: 如何使用 Unity ARCore [视频]
C#: Unity AR 传送门教程 [视频]
C#: 如何在 Unity ARCore 中创建龙的增强现实 [视频]
C#: 如何增强现实 AR 教程:ARKit 传送门到颠倒世界 [视频]
Python: 使用 Python 和 OpenCV 进行增强现实
C#: 从头开始用 C# 构建 BitTorrent 客户端
Go: 从头开始在 Go 中构建 BitTorrent 客户端
Nim: 编写 Bencode 解析器
Node.js: 编写你自己的 bittorrent 客户端
Python: Python 3.5 中的 BitTorrent 客户端
ATS: 函数式区块链
Crystal: 使用 Crystal 编写你自己的区块链和 PoW 算法
Go: 在 Go 中构建区块链
Go: 用不到 200 行的 Go 代码编写你自己的区块链
Java: 用 Java 创建你的第一个区块链
JavaScript: 一个不到 1500 行代码的加密货币实现
JavaScript: 在 JavaScript 中构建你自己的区块链
JavaScript: 学习并在 JavaScript 中构建区块链
JavaScript: 用 JavaScript 创建区块链
JavaScript: 如何启动你自己的生产级加密货币
JavaScript: 在 Node.js 中编写区块链
Kotlin: 让我们用 Kotlin 实现加密货币
Python: 通过构建学习区块链
Python: 构建你自己的区块链:Python 教程
Python: 区块链实用介绍(使用 Python)
Python: 让我们构建最小的区块链
Ruby: 逐步编程区块链(手稿书版本)
Scala: 如何构建一个简单的基于 actor 的区块链
TypeScript: Naivecoin:构建加密货币的教程
TypeScript: NaivecoinStake:构建具有权益证明共识的加密货币的教程
Rust: 在 Rust & Substrate 中构建区块链
Haskell: 自己编写 IRC 机器人
Node.js: 使用 API.ai 在 Node.js 中创建一个简单的 Facebook Messenger AI 机器人
Node.js: 如何创建一个响应式电报机器人
Node.js: 创建一个 Discord 机器人
Node.js: gifbot - 构建 GitHub App
Node.js: 使用 Web Speech API 和 Node.js 构建一个简单的 AI 聊天机器人
Python: 如何使用 Python 构建你的第一个 Slack 机器人
Python: 如何使用 Slack Events API 和 Django 在 20 分钟内用 Python 构建一个 Slack 机器人
Python: 构建一个 Reddit 机器人
Python: 如何制作一个 Reddit 机器人 [视频]
Python: 如何使用 Python 创建电报机器人
Python: 使用 Tweepy 在 Python 中创建 Twitter 机器人
Python: 使用 Python & PRAW 创建 Reddit 机器人 [视频]
R: 使用 R 构建加密货币交易机器人
Rust: Starcraft 中的 Rust、C 或任何其他语言的机器人
Go: 使用 Go 可视化你的本地 git 贡献
Go: 使用 Go 构建命令行应用程序:lolcat
Go: 使用 Go 构建 cli 命令:cowsay
Go: Go CLI 教程:fortune 克隆
Nim: 编写 stow 替代品来管理点文件
Node.js: 用 Javascript 创建 CLI 工具
Rust: Rust 中的命令行应用程序
Rust: 用 Rust 编写命令行工具
Zig: 从零开始在 Zig 中构建你自己的 CLI 应用程序
C: 让我们构建一个简单的数据库
C++: 从零开始构建你自己的 Redis
C#: 构建你自己的数据库
Clojure: 一个受考古学启发的数据库
Crystal: 为什么你应该构建你自己的 NoSQL 数据库
Go: 从零开始构建你自己的数据库:从 B+Tree 到 SQL,3000 行代码
Go: 分 45 步编写数据库:一系列测试驱动的小编码谜题
Go: 从零开始构建你自己的 Redis
JavaScript: Dagoba:内存图数据库
Python: DBDB:小狗床数据库
Python: 用 Python 编写你自己的迷你 Redis
Ruby: 在 Ruby 中构建你自己的快速、持久化的 KV 存储
Rust: 构建你自己的 Redis 客户端和服务器
C: Linux 容器,500 行代码
Go: 使用不到 100 行的 Go 代码构建你自己的容器
Go: 在 Go 中从零开始构建容器 [视频]
Python: Linux 容器研讨会:从零开始重建 Docker
Python: Docker 的概念验证模仿,用 100% Python 编写
Shell: Docker 在大约 100 行 bash 中实现
C: 自制字节码解释器
C: C 中的虚拟机
C: 编写你自己的虚拟机
C: 编写一个 Game Boy 仿真器 Cinoop
C++: 如何编写仿真器(CHIP-8 解释器)
C++: 仿真教程(CHIP-8 解释器)
C++: 仿真教程(Game Boy 仿真器)
C++: 仿真教程(Master System 仿真器)
C++: NES 仿真器从零开始 [视频]
Common Lisp: Common Lisp 中的 CHIP-8
JavaScript: JavaScript 中的 Game Boy 仿真
Python: 仿真基础:编写你自己的 Chip 8 仿真器/解释器
Rust: 0dmg:通过构建部分 Game Boy 仿真器学习 Rust
JavaScript: WTF is JSX(让我们构建一个 JSX 渲染器)
JavaScript: 一个 DIY 指南来构建你自己的 React
JavaScript: 从零开始构建 React [视频]
JavaScript: Gooact:160 行 JavaScript 中的 React
JavaScript: 了解 React Reconciler 包如何工作,通过构建你自己的轻量级 React DOM
JavaScript: 构建你自己的 Redux
JavaScript: 让我们编写 Redux!
JavaScript: Redux:从零开始实现 Store [视频]
JavaScript: 在 200 行 JavaScript 中构建你自己简化的 AngularJS
JavaScript: 创建你自己的 AngularJS
JavaScript: 如何编写你自己的虚拟 DOM
JavaScript: 构建前端框架,从零开始,带组件(模板、状态、VDOM)
JavaScript: 构建你自己的 React
JavaScript: 构建自定义 React 渲染器 [视频]
C: 如何用 C 编程 NES 游戏
C: C 中的国际象棋引擎 [视频]
C: 让我们制作:Dangerous Dave [视频]
C: 学习 C 中的视频游戏编程 [视频]
C: 用 C 编程数独求解器 [视频]
C: 用 C 编程 Rogue/Nethack RPG [视频]
C: 关于俄罗斯方块和重新实现
C++: 游戏编程入门 v2.0
C++: C++ 中的俄罗斯方块教程,独立于平台,专注于初学者的游戏逻辑
C++: 用 C++ 重制 Cavestory [视频]
C++: 重建 Cave Story [视频]
C++: Space Invaders 从零开始
C#: 通过构建简单 RPG 学习 C#
C#: 在 C# 中创建 Roguelike 游戏
C#: 构建一个 C#/WPF RPG
Go: Games With Go [视频]
Java: 使用 Java 编写 2D 游戏引擎 - 初学者完整课程 [视频]
Java: 使用 LWJGL 3 进行 3D 游戏开发
JavaScript: 使用 Phaser 进行 2D 突破游戏
JavaScript: 如何用 Phaser 用 HTML5 制作 Flappy Bird
JavaScript: 使用 React、Redux 和 SVG 开发游戏
JavaScript: 从零开始构建你自己的 8-Ball Pool 游戏 [视频]
JavaScript: 如何制作你的第一个 Roguelike
JavaScript: 像程序员一样思考:如何仅使用 JavaScript、HTML 和 CSS 构建 Snake
Python: 使用 PyGame 开发游戏
Python: 使用 Python 和 Pygame 制作游戏 [pdf]
Python: Roguelike 教程修订版
Ruby: 使用 Ruby 开发游戏
Rust: Rust 中的冒险:基本 2D 游戏
Rust: Rust 中的 Roguelike 教程 + tcod
Haskell: 在 Haskell 中重新实现"git clone",从底部开始
JavaScript: 构建 GIT - 学习 GIT
Python: 足够的 Git 客户端来创建仓库、提交和将其推送到 GitHub
Python: 编写你自己的 Git!
Python: ugit:通过从头开始构建 Git 来学习 Git 内部原理
Ruby: 在 Ruby 中重建 Git
C: Malloc 不是魔法——实现你自己的内存分配器
C: Beej 的网络编程指南
C: 让我们编写一个 TCP/IP 堆栈
C / Python: 构建你自己的 VPN/虚拟交换机
Ruby: 如何在 Ruby 中构建网络堆栈
C#: 神经网络 OCR
F#: 在 F# 中构建神经网络:第 1 部分
F#: 在 F# 中构建神经网络:第 2 部分
Go: 用 Golang 构建多层感知器
Go: 如何用 Go 构建一个简单的人工神经网络
Go: 在 Go 中从零开始构建神经网络
JavaScript / Java: 神经网络 - The Nature of Code [视频]
JavaScript: 为 JavaScript 语言学家从零开始的神经网络(第 1 部分 — 感知器)
Python: Python 中 11 行的神经网络
Python:从零构建深度学习(分 34 个阶段重新实现 PyTorch 内部机制)
Python:从零实现神经网络
Python:光学字符识别(OCR)
Python:使用卷积网络进行交通标志分类
Python:在 Keras 中使用 LSTM 神经网络生成音乐
Python:卷积神经网络入门
Python:神经网络:从零到高手
Python:SlowTorch:使用 100% 纯 Python 从头实现 PyTorch
Assembly:编写一个微型 x86 引导加载程序
Assembly:Baking Pi——操作系统开发
C:从零构建简单计算机的软硬件栈 [视频]
C:操作系统:从 0 到 1
C:操作系统开发小书
C:动手编写一个玩具版 UNIX 克隆操作系统
C:内核 101——让我们编写一个内核
C:内核 201——让我们编写一个支持键盘和屏幕的内核
C:从零为 ARM 构建一个最小化的多任务内核
C:如何从零创建操作系统
C:破解虚拟内存
C:使用 Linux 内核和 Raspberry Pi 学习操作系统开发
C:写给初学者的操作系统开发
C++:编写自己的操作系统 [视频]
C++:编写引导加载程序
Rust:用 Rust 编写操作系统
Rust:新增 RISC-V Rust 操作系统教程
(任意语言):从零构建 Linux
C:电子游戏物理教程
C++:Allen Chou 的游戏物理系列
C++:如何创建自定义物理引擎
C++:3D 物理引擎教程 [视频]
JavaScript:物理引擎的工作原理
JavaScript:使用空间分区进行宽阶段碰撞检测
JavaScript:为 JavaScript 游戏构建一个简单的 2D 物理引擎
Verilog:从闪烁灯到 RISC-V
(任意语言):mal——实现一个 Lisp
C:人生中的第一个垃圾回收器
C:构建你自己的 Lisp:学习 C,并用 1000 行代码构建自己的编程语言
C:用 C 编写一个简单的垃圾回收器
C:一个能够解释自身的 C 解释器
C:Jack Crenshaw《让我们构建一个编译器》的 C 与 x86 版本
C:从零构建编译器的探索之旅
C++:使用 Flex 编写自己的玩具编译器
C++:如何创建编译器 [视频]
C++:Kaleidoscope:使用 LLVM 实现一门语言
F#:理解解析器组合子
Elixir:通过编写自己的编译器揭开编译器的神秘面纱 [视频]
Go:超微型编译器
Go:使用 Go 进行词法扫描 [视频]
Haskell:让我们构建一个编译器
Haskell:为你写一个 Haskell
Haskell:48 小时内用 Haskell 编写一个 Scheme
Haskell:为你写一个 Scheme
Java:《Crafting Interpreters》:编程语言制作手册
Java:创建 JVM 语言
JavaScript:超微型编译器
JavaScript:超微型解释器
JavaScript:小型 Lisp 解释器
JavaScript:如何使用 JavaScript 实现一门编程语言
JavaScript:让我们来编写一个 Lisp
OCaml:编写一个 C 编译器
OCaml:编写 Lisp 系列教程
Pascal:让我们构建一个编译器
Python:用 Python 编写的 Python 解释器
Python:lisp.py:创建自己的 Lisp 解释器
Python:如何用 Python 编写 Lisp 解释器
Python:让我们构建一个简单的解释器
Python:创建自己的简单解释型编程语言 [视频]
Python:从源代码到机器码:从零构建自己的编译器
Racket:《Beautiful Racket》:如何使用 Racket 创建自己的编程语言
Ruby:从零构建编译器
Ruby:使用 Ruby 从零构建 Markdown 编译器
Rust:使用 Rust 学习解析器组合子
Swift:使用 Swift 从零构建 LISP
TypeScript:构建自己的 WebAssembly 编译器
C:正则表达式匹配器
C:正则表达式匹配可以既简单又快速
Go:如何从零构建正则表达式引擎
JavaScript:用不到 40 行代码构建正则表达式引擎
JavaScript:如何使用导数在函数式 JavaScript 中实现正则表达式
JavaScript:实现正则表达式引擎
Perl:正则表达式的工作原理
Python:构建自己的正则表达式引擎:回溯、NFA、DFA
Scala:没有魔法:正则表达式
CSS:用 CSS 实现搜索引擎
Python:使用 Redis 和 redis-py 构建搜索引擎
Python:使用 Python 构建向量空间索引引擎
Python:构建基于 Python 的搜索引擎 [视频]
Python:让文本搜索从反馈中学习
Python:使用 TF-IDF 查找文本中的重要词语
C:教程——用 C 编写 Shell
C:让我们构建一个 Shell!
C:编写 UNIX Shell
C:构建自己的 Shell
C:用 C 编写 Shell
Go:用 Go 编写一个简单的 Shell
Rust:使用 Rust 构建自己的 Shell
JavaScript:仅用 20 行代码实现 JavaScript 模板引擎
JavaScript:理解 JavaScript 微型模板
Python:实践:使用 Python 构建玩具模板引擎
Python:模板引擎
Ruby:如何用不到 30 行代码编写模板引擎
C:构建自己的文本编辑器
C++:设计一个简单的文本编辑器
Python:Python 教程:创建自己的文本编辑器 [视频]
Python:创建一个简单的 Python 文本编辑器!
Ruby:使用 Rails 构建协同文本编辑器
Rust:Hecto:使用 Rust 构建自己的文本编辑器
Python:使用 Python 机器学习开发车牌识别系统
Python:使用 TensorFlow 深度学习构建人脸识别流水线
C++:让我们制作一个体素引擎
Rust:让我们构建一个浏览器引擎
Python:浏览器工程
C#:从零编写 Web 服务器
Node.js:使用 JavaScript 从零构建自己的 Web 服务器
Node.js:让我们使用 NodeJS Streams 从零编写 Web 服务器
Node.js:让我们构建 Express
PHP:使用纯 PHP 编写 Web 服务器
Python:一个简单的 Web 服务器
Python:让我们构建一个 Web 服务器
Python:从零构建 Web 应用
Python:使用 Python 从零构建一个基础 HTTP 服务器
Python:使用 Python 和 Flask 实现 RESTful Web API
Ruby:使用 Ruby 从零构建一个简单的 WebSocket 服务器
(任意语言):从 NAND 到俄罗斯方块:从第一性原理构建现代计算机
(任意语言):build-your-own-x-vibe-coding:为凭感觉编程改编的 BYOX 风格教程
Alloy:同源策略
C:如何用不到 1000 行代码编写视频播放器
C:学习如何用 C 编写哈希表
C:终端模拟器最基础的知识
C:编写系统调用
C:Sol——从零构建 MQTT 代理
C++:花费 200 美元构建自己的 VR 头显
C++:X Window 管理器的工作原理及其编写方法
C++:编写 Linux 调试器
C++:64k 演示程序是如何制作的
C++:制作自己的游戏引擎
C#:C# 网络编程:创建 TCP 聊天服务器、TCP 游戏、UDP Pong 等
C#:使用 C# 和 GLSL 从零加载并渲染 3D 骨骼动画
Clojure:构建拼写检查器
Go:用 100 行 Golang 构建一个简单的终端模拟器
Go:让我们创建一个简单的负载均衡器
Go:从零实现视频编码
Java:如何构建 Android Reddit 应用 [视频]
JavaScript:构建自己的模块打包器——Minipack
JavaScript:通过从零构建 Promise 学习 JavaScript Promise
JavaScript:从零实现 Promise(TDD 方式)
JavaScript:自己实现 JavaScript 中的 call()、apply() 和 bind() 方法
JavaScript:JavaScript 算法与数据结构
JavaScript:使用 React Native 构建网约车应用
JavaScript:(真的)只需 10 分钟构建自己的广告拦截器
Kotlin:构建自己的缓存
Lua:通过从零构建 CDN 来学习 CDN
Nim:编写 Redis 协议解析器
Nim:编写构建系统
Nim:编写 MiniTest 测试框架
Nim:编写 DMIDecode 解析器
Nim:编写 INI 解析器
Nim:编写链接检查器
Nim:编写 URL 缩短服务
Node.js:用 Node.js 和 40 行代码构建静态网站生成器
Node.js:使用 Node.js 从零构建一个简单的单点登录(SSO)服务器及解决方案
Node.js:如何使用 Node 创建一个真实可用的 Node CLI 应用
Node.js:使用 Node.js 构建 DNS 服务器
Node.js:使用 Node.js 和 Y.js 构建同步引擎
PHP:使用 PHP 从零编写自己的 MVC
PHP:创建自己的博客
PHP:不使用框架的现代 PHP
PHP:使用 PHP 编写 Web 搜索引擎
Python:构建深度学习库 [视频]
Python:如何在短短 5 分钟内构建一款超强的移动文档扫描器
Python:持续集成系统
Python:Python 推荐系统:初学者教程
Python:使用 Scikit-learn 编写短信垃圾信息检测器
Python:使用 Python 构建一个简单的基于内容的推荐引擎
Python:使用 Python 中的 LSTM 预测股票市场
Python:使用 TensorFlow 构建一个简单的生成对抗网络(GAN)
Python:通过编程学习机器学习算法:决策树
Python:JSON 解码算法
Python:使用 Python 构建自己的 Git 插件
Ruby:现实世界中的计步器
Ruby:使用 Ruby 创建 Linux 桌面应用
Rust:使用 Rust 构建 DNS 服务器
Rust:从零编写可扩展的聊天服务
Rust:WebGL + Rust:基础水体教程
TypeScript:微型包管理器:了解 npm 或 Yarn 的工作原理
欢迎提交,只需发送 PR 或创建 issue
通过留下评论和"反应"来帮助我们审查待处理的提交
本仓库是众多贡献者的成果。最初由 Daniel Stefanovic 创建,现由 CodeCrafters, Inc. 维护。在法律允许的范围内,CodeCrafters, Inc. 已放弃对本作品的所有版权及相关邻接权。