构建轨道


一个学习轨道由许多不同的部分组成。

元数据

学习轨道的配置和元数据在config.json文件中指定。这个文件列出了学习轨道的练习、概念、编辑器设置等等。查看 config.json 文档。

概念

学习轨道的所有概念练习和实践练习都围绕_概念_展开。这些概念本身就是独立的实体。更多信息请查看文档。

学习轨道的概念练习所教授的概念构成一份_教学大纲_。 _教学大纲_以_概念图_的形式展示给学生。 想了解如何为一份_教学大纲_构建概念图,请查看_概念图_文档。

关于如何设计教学大纲,请查看教学大纲文档。

练习

学习轨道有两类练习:

  • 概念练习:旨在向学生教授一个或多个概念。更多信息请查看文档。
  • 实践练习:旨在练习已经学过的概念。更多信息请查看文档。

Dig deeper

每个练习都有一个可选的 Dig Deeper 部分,其中可以包含:

  • 解题方法:这个练习的不同解法
  • 文章:介绍这个练习中一些有意思的方面
  • 社区视频:展示这个练习的视频,通常是由某人从零开始解答这个练习

共享文件

有些文件并不针对单个练习,而是适用于_所有_练习。更多信息请查看文档。

文档

每个学习轨道都有几个必需的文档文件。更多信息请查看文档。

小部件

学习轨道的某些部分可以显示在小部件中。

风格指南

所有文档都应遵循风格指南。Markdown 文档还应遵循我们的 Markdown 规范。

示例

csharp
├── config
|   ├── exercise_readme.go.tmpl
|   └── maintainers.json
├── docs
|   ├── ABOUT.md
|   ├── INSTALLATION.md
|   ├── LEARNING.md
|   ├── RESOURCES.md
|   └── TESTS.md
├── concepts
|   └── numbers
|       ├── about.md
|       ├── introduction.md
|       └── links.json
└── exercises
|   ├── concept
|   |   └── cars-assemble
|   |       ├── .docs
|   |       |   ├── hints.md
|   |       |   ├── introduction.md
|   |       |   └── instructions.md
|   |       ├── .meta
|   |       |   ├── config.json
|   |       |   ├── design.md
|   |       |   └── Exemplar.cs (track-specific)
|   |       ├── CarsAssemble.cs (track-specific)
|   |       ├── CarsAssemble.csproj (track-specific)
|   |       └── CarsAssembleTests.cs (track-specific)
|   ├── practice
|   |   └── leap
|   |       └── .docs
|   |       |   └── instructions.md
|   |       └── .meta
|   |       |   ├── config.json
|   |       |   └── Example.cs (track-specific)
|   |       ├── Leap.cs (track-specific)
|   |       ├── Leap.csproj (track-specific)
|   |       └── LeapTests.cs (track-specific)
|   └── shared
|       └── .docs
|           ├── debug.md
|           ├── help.md
|           └── tests.md
└── config.json

维护

代码仓库权限

每个学习轨道都会被(自动)分配一个维护类别,这个类别决定了学习轨道维护者的 GitHub 代码仓库权限。

避免触发不必要的测试运行

当你合入一个涉及某个练习的学习轨道 PR 时,会触发_所有_学生解答的最新已发布版本重新测试。 对于热门的练习来说,这是_非常_昂贵的操作(极端情况下,Python 的 Hello World 有 70,000 次测试运行!)。

我们建议你尽量避免不必要地这样做。

如果合入的提交符合以下任一条件,解答不会被重新测试:

  • 只改动了.docs或.meta文件,或其他用户不会接触到的文件
  • 或者在提交正文中包含[no important files changed]。

如果合入的提交同时满足以下两个条件,解答会被重新测试:

  • 提交正文中缺少[no important files changed]
  • 并且改动了该练习的以下文件之一(具体见它的.meta/config.json文件):
    • 测试文件
    • 编辑器文件
    • 失效文件

一些例子:

  • Python#3423:只改动了文档,所以没有运行测试
  • Python#3437:合入时加上了[no important files changed],所以没有运行测试
  • Csharp#2138:从测试里删掉了空白。没有加上这个关键字。测试被不必要地重新运行了。