添加初始练习


实现hello-world练习之后,下一步就是再实现 20 多个练习。

练习类型

你可以实现两种类型的练习:

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

一般来说,我们建议新的学习路径先实现实践练习,因为它们更容易实现,前期也不需要太多思考。 等你的学习路径顺利运行起来之后,随时可以再添加概念练习。

选择练习

为了帮助各条学习路径实现实践练习,我们创建了 exercism/problem-specifications 代码仓库。 这个代码仓库包含 100 多个实践练习的元数据,不同的学习路径可以用它来实现各自版本的这些练习。 因此,你会发现许多不同的学习路径都实现了相同的练习。

那么,如何从这 100 多个练习中选出 20 多个呢? 下面是一些建议。

选择能让学生练习多种概念的练习

这 100 多个练习涉及的概念非常多样。 你应该尽量实现能让学生练习多种概念的练习。 所以,与其实现 20 个都围绕字符串的练习,不如实现关注不同概念的练习。

下面是一些概念及对应的示例练习:

概念 练习
位操作 allergies、secret-handshake
布尔 leap
类 circular-buffer、robot-name
并发 bank-account
条件 raindrops
日期与时间 gigasecond、meetup
相等性 clock
浮点数 darts、space-age
惰性求值 alphametics、zebra-puzzle
数组 resistor-color、spiral-matrix
循环 collatz-conjecture、protein-translation
映射 nucleotide-count
数字 leap、grains
随机性 dnd-character、robot-name
字符串 bob、isogram,
树 binary-search-tree、pov

选择难度各异的练习

有些练习实现起来会比其他的更难。 你应该尽量选择难度不同的练习:有简单的,有中等难度的,也有困难的。

一个练习有多难取决于几个因素,比如涉及的概念以及学习路径所用的语言。 看看其他已经实现该练习的学习路径是怎么做的,能帮你更好地感受实现大概是什么样子。

下面是一些难度及对应的练习:

选择适合你的学习路径的练习

并不是所有练习都适合你的学习路径。 你应该只选择适合自己学习路径的练习;与其实现一个说不通的练习,不如干脆_不_实现。 举个例子,lens-person 练习让学生使用_透镜_,而很多语言并不支持。

如果你发现某个练习不适合你的学习路径,可以把它的 slug 添加到学习路径的 config.json 文件中的 exercises.foregone 数组里。 这样,工具就会忽略这个练习。

示例课程体系

为了更具体地说明,下面就是一个初始练习示例选择的样子:

练习 难度 概念
hello-world 简单 无(初始练习)
leap 简单 数字、布尔
gigasecond 简单 日期与时间
isogram 简单 字符串
resistor-color 简单 数组
nucleotide-count 简单 映射
collatz-conjecture 简单 循环
darts 简单 浮点数
two-fer 简单 字符串格式化、可选参数
high-scores 简单 集合处理
raindrops 中等 条件
bob 中等 字符串
allergies 中等 位操作
series 中等 异常
circular-buffer 中等 类
meetup 中等 日期与时间
yacht 中等 数组
dominoes 困难 元组、惰性求值
diamond 困难 字符串格式化
alphametics 困难 惰性求值
forth 困难 解析

实现练习

选好要加入学习路径的练习后,下一步就是实现它们。 添加实践练习的文档里有关于如何添加实践练习的详细说明。