实现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 |
有些练习实现起来会比其他的更难。 你应该尽量选择难度不同的练习:有简单的,有中等难度的,也有困难的。
一个练习有多难取决于几个因素,比如涉及的概念以及学习路径所用的语言。 看看其他已经实现该练习的学习路径是怎么做的,能帮你更好地感受实现大概是什么样子。
下面是一些难度及对应的练习:
| 难度 | 练习 |
|---|---|
| 简单 | darts、gigasecond、isogram、leap、resistor-color、space-age |
| 中等 | allergies、bob、meetup、protein-translation、raindrops、secret-handshake |
| 困难 | alphametics、forth、react、pov、zebra-puzzle、zipper |
并不是所有练习都适合你的学习路径。 你应该只选择适合自己学习路径的练习;与其实现一个说不通的练习,不如干脆_不_实现。 举个例子,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 | 困难 | 解析 |
选好要加入学习路径的练习后,下一步就是实现它们。 添加实践练习的文档里有关于如何添加实践练习的详细说明。