本文档提供了一种结构化的方法,您可以根据您的技能水平、兴趣和编程语言偏好来浏览“自己动手构建 X”的教程。与其随意尝试所有教程,不如遵循一条指导性的学习路径,以最大限度地提高学习效果,并确保更平稳地过渡到越来越复杂的概念。
有关特定类别教程的信息,请参阅 Wiki 中的相应部分
浏览“自己动手构建 X”存储库主要有三种策略:
每种方法都有其优点,具体取决于您的学习目标和现有专业知识。
来源: README.md5-9
本存储库中的教程涵盖了广泛的难度级别,从适合初学者的项目到需要相当专业知识的高级实现。
图示:项目难度分类
来源: README.md116-126 README.md129-143 README.md290-334 README.md144-152 README.md258-278 README.md393-396 README.md144-152 README.md258-278 README.md393-396 README.md144-152 README.md72-96
对于刚接触系统编程或希望在着手更复杂的项目之前建立信心的人来说,以下学习路径为逐步介绍基本概念提供了指导。
图示:初学者学习路径
| 项目类型 | 推荐教程 | 编程语言 | 大致时间 |
|---|---|---|---|
| 命令行工具 | 构建 lolcat、cowsay、fortune 等命令行工具 | Go | 1-2 天 |
| 简单游戏 | 文本类游戏、贪吃蛇、2D 弹球 | JavaScript, Python | 1 周 |
| HTTP 服务器 | 基本 Web 服务器实现 | Python, Node.js | 2-3 天 |
| 文本编辑器 | 简单的文本编辑器 | C, Python | 3-5 天 |
| 机器人 | Reddit 或 Telegram 机器人 | Python | 2-4 天 |
这些初学者项目是理想的起点,因为它们:
来源: README.md116-126 README.md186-222 README.md375-382 README.md98-114 README.md398-410
在掌握了初学者项目之后,中级教程将深入探讨系统内部和更复杂的应用程序。
图示:中级学习路径进展
| 项目类型 | 核心概念 | 推荐语言 | 先决条件 |
|---|---|---|---|
| 数据库 | 存储引擎、索引、查询处理 | C, Go, Python | Web 服务器、文件 I/O |
| Git 实现 | 对象模型、Merkle 树、版本控制 | JavaScript, Ruby | 命令行工具 |
| 正则表达式引擎 | 状态机、解析、优化 | C, JavaScript | 命令行体验 |
| 神经网络 | 矩阵运算、反向传播 | Python、JavaScript | 基础数学、简单游戏 |
| 模板引擎 | 解析、AST、代码生成 | JavaScript, Python | Web 开发基础 |
来源: README.md129-143 README.md224-232 README.md335-345 README.md241-256 README.md366-372
高级项目需要扎实的前期知识,但能提供对复杂系统工作原理最深入的见解。
| 项目 | 复杂性 | 时间投入 | 关键先决条件 |
|---|---|---|---|
| 操作系统 | 非常高 | 月 | C/汇编、内存管理、硬件知识 |
| 编程语言 | 高 | 几周到几个月 | 解析、编译器理论、内存管理 |
| Web 浏览器 | 高 | 几周到几个月 | 网络、渲染、JavaScript |
| Docker | 高 | 几周 | Linux 内核、命名空间、cgroups |
| 区块链 | 高 | 几周 | 密码学、分布式系统 |
着手高级项目时
来源: README.md258-278 README.md290-334 README.md144-152 README.md72-96
许多开发人员喜欢在特定的编程语言生态系统中工作。以下是如何根据您的语言偏好来浏览存储库。
图示:按项目类型划分的编程语言覆盖率
Python 为您提供了最友好的存储库入门路径之一
JavaScript 提供了一个出色的以前端为中心的路径
面向系统编程爱好者
来源: README.md45-53 README.md99-113 README.md186-222 README.md129-142 README.md291-333
一些开发者可能倾向于专注于特定领域,并在该领域内逐步提升复杂度。
图示:领域特定进阶路径
这条路径探索 Web 技术,从基础协议到完整的浏览器。
适合对底层系统感兴趣的人
来源: README.md398-410 README.md366-372 README.md169-184 README.md393-396 README.md234-239 README.md144-152 README.md258-278
了解项目之间的依赖关系有助于创建更有效的学习路径。有些教程是建立在其他教程所介绍的概念基础之上的。
图示:项目依赖与先修课程
上图展示了某些项目如何成为更高级项目的天然先修课程。例如,构建 Shell 有助于为操作系统开发做准备,而正则表达式引擎的实现则为编程语言的创建提供了宝贵的背景知识。
来源: README.md116-126 README.md356-363 README.md224-232 README.md258-278 README.md186-222 README.md279-286 README.md41-53 README.md129-143 README.md72-96 README.md335-345 README.md290-334 README.md398-410 README.md393-396 README.md234-239
“Build Your Own X” 仓库通过实践实现的方式,提供了多种理解复杂技术的路径。通过遵循这些学习路径,你可以系统地将知识从基础应用构建到复杂的系统。
请记住,最有效的学习路径是根据你的特定兴趣、编程背景和学习风格量身定制的。将此处提供的框架作为指导,但不要犹豫,根据最让你兴奋的内容来开创自己的道路。
来源: README.md5-9