课程、翻译、修复、制品——所有贡献都欢迎。每个 PR 只做一项贡献可以让评审更快,也能正确计算贡献者数量和学分。
site/build.js 解析 README.md、ROADMAP.md 和 glossary/terms.md 来生成 site/data.js。任何涉及这些文件的 PR 必须保持以下两种模式不变:
- 阶段标题使用
### Phase N: Name \X lessons`格式或Phase N — Name ...
` 格式。X lessons... Description - 课程表格的列格式为
| # | 课程 | 类型 | 语言 |(或| # | 项目 | 组合 | 语言 |用于综合项目表格)。语言列接受纯文本(Python, TypeScript)或旧版 emoji 标志(🐍 🟦 🦀 🟣 ⚛️);两者在解析器中等效。 - ROADMAP 状态标记(
✅、🚧、⬚)出现在阶段标题和课程行上。请勿用文字替换——解析器依赖这些精确字符。
编辑这些文件后运行 node site/build.js;git diff site/data.js 应只显示时间戳变更(如果你的编辑是结构安全的)。
每门课程位于 phases/XX-phase-name/NN-lesson-name/ 目录下,结构如下:
NN-lesson-name/
├── code/ 至少一个可运行的实现
├── notebook/ Jupyter notebook,用于实验(可选)
├── docs/
│ └── en.md 课程文档(必需)
└── outputs/ 本课程产出的提示词、技能或代理(如适用)
课程文档格式(en.md):
# 课程标题
> 一句话口号——核心理念。
## 问题
为什么这很重要?没有它你无法做什么?
## 概念
用图表、可视化和直觉来解释。代码在后面。
## 从零构建
从零开始逐步实现。
## 使用框架
现在使用真实的框架或库做同样的事情。
## 交付
本课程产出的提示词、技能、代理或工具。
## 练习
1. 练习一
2. 练习二
3. 挑战练习在任何课程的 docs/ 文件夹中创建新文件:
docs/
├── en.md (英语——始终必需)
├── zh.md (中文)
├── ja.md (日语)
├── es.md (西班牙语)
├── hi.md (印地语)
└── ...
保持与英文版本相同的结构。翻译内容,不翻译代码。
如果课程应该产出可复用的提示词、技能、代理或 MCP 服务器:
- 在课程的
outputs/文件夹中创建 - 在顶级
outputs/索引中添加引用
提示词格式:
---
name: 提示词名称
description: 提示词功能描述
phase: 14
lesson: 01
---
[系统提示词或模板内容]技能格式:
---
name: 技能名称
description: 技能教学内容
version: 1.0.0
phase: 14
lesson: 01
tags: [agents, loops]
---
[技能内容]- 修复不能运行的代码
- 改进解释
- 添加更好的图表
- 更新过时信息
更多练习和项目始终受欢迎,尤其是连接多个阶段的内容。
- 代码必须能运行。 每个代码文件应能使用列出的依赖无错误执行。
- 代码中不写注释。 代码应该是自解释的。使用文档进行解释。
- 为工作选择最佳语言。 不要强迫在 TypeScript 或 Rust 更合适的场景使用 Python。
- 先从零构建。 始终先从第一性原理实现概念,再展示框架版本。
- 保持实用性。 理论服务于实践,而非反过来。
- 不要有 AI 水文。 像人一样写作。直截了当。删掉废话。
- Fork 仓库
- 创建功能分支(
git checkout -b add-lesson-phase3-gradient-descent) - 进行修改
- 确保所有代码能运行
- 提交 PR 并附上清晰描述
参见 CODE_OF_CONDUCT.md。友善、乐于助人、有建设性。
- 直接的文风。删掉废话。匹配手册的语气,而非营销文案。
- 标题中不使用装饰性 emoji。语言列的 emoji 标志是唯一例外,仅因为解析器映射了它们。
- 代码使用课程中列出的依赖即可直接运行。
- 先从零构建,再用框架。