在提出练习改进建议之前需要考虑什么
你发现了某个练习中你想改进的地方。首先,感谢你的关心,也感谢你抽出时间来告诉我们!💙
修改练习时,有几件事需要考虑,而学习练习(也就是讲解教学大纲中主题的那些练习)与实践练习(其余的练习)的考量略有不同。下面我们会详细说明这些区别。
不过,先来看几个通用的注意事项。
修改练习会带来相当多的影响:
出于这些原因,我们只会在能带来明确的重大收益时才会修改练习,对此非常谨慎。
练习的测试套件并不以覆盖所有可能情况为目标。 我们的练习不是生产软件,也不是为了模拟真实世界的使用场景。 它们被设计成玩具问题,帮助你熟练地掌握一门编程语言。 因此,我们有意避免覆盖每一个边界情况、强制做大量输入校验,或者其他类似真实世界的关切。 如果你建议的改进只是捕获某个边界情况或检查输入校验,那么除非它对练习有实质性的影响,否则不太可能被接受。
学习练习的设计只有一个目标:讲解概念。 对练习的任何改动,首先都要看它是否有助于更好地讲解概念。
学习练习(尤其)不以测试详尽为目标。 它们有时还会显得有点刻意或晦涩,这是为了避开学生还没学过的概念,或者避免让学生不堪重负。
如果你建议的改动可能分散对概念学习的注意力,那它多半会被拒绝。 如果改动让学习变得更轻松,我们会重点考虑。 如果它介于两者之间,可能会被接受,但不太可能被优先处理。
关于实践练习,最重要的一点是:几乎所有实践练习都放在一个中央代码仓库里(名为 “Problem Specifications”)。 因此,修改一个练习会对所有学习轨道产生连锁影响。 这意味着一个好的改动格外有价值,因为它能帮到所有语言。 但它也加重了改动的负担:需要多位负责不同学习轨道的维护者都同意,改动才会被接受,然后每种语言的维护者还要把改动向下游同步到各自的学习轨道中。
修改练习还可能让教学大纲中与它关联的概念变得更模糊,或者让练习需要额外的功能才能解答,从而改变它解锁的位置。 在改动被接受之前,这一点也需要在各个学习轨道上统一考虑。
虽然我们确实有办法让只有部分学习轨道包含某些测试用例,但我们通常不鼓励这样做,因为这种分叉会让维护者和学生都感到困惑。 所以,在提议修改实践练习时,请从所有学习轨道的大局出发。
虽然我们拒绝建议的理由有很多,但很多时候,人们提出的好点子我们都会采纳!
对于能让表述更清晰的措辞改动,我们也几乎总是欢迎的,尤其是在学习练习中。
为了让你的建议最有可能被批准,请在写建议时体现出你已经考虑了以下几点:
另外,请记得把观点表达为观点,把事实表达为事实。 这样往往能带来最有成效的讨论。
再次感谢你抽出时间提出建议,也感谢你读完了这份文档!