演習の改善を提案する

演習の改善を提案する前に考えること


演習で改善したい点が見つかったのですね。 まずは、関心を持ち、時間を割いて知らせてくださりありがとうございます!💙

演習を変更するときには、いくつか考えるべきことがあります。そしてそれは、学習演習(シラバスのトピックを教える演習)と練習演習(それ以外の演習)で少し異なります。 その違いについては、このあとで詳しく説明します。

ただしその前に、どの演習にも共通して考えるべきことがいくつかあります。

演習の変更には影響が伴います

演習を変更すると、さまざまな影響があります。

  1. 新しいテストを追加すると、既存の解答が動かなくなる可能性があります。 その結果、何千人もの人の書いたものが古くなってしまいます。追加したテストが既存のバグを浮き彫りにするものでなければ、その人たちにとっては残念なことにしかなりません。
  2. 全員の解答を再テストする必要があり、環境面でも費用面でもコストがかかります。
  3. 1人以上のメンテナーが変更をレビューする時間を取る必要があり、その間はトラックのほかの改善に手を付けられません。

こうした理由から、はっきりとした大きなメリットがある場合に限って、慎重に演習を変更しています。

何でもかんでも増やすのは避けましょう

演習のテストスイートの目的は、考えられるすべてのケースを網羅することではありません。 演習は業務用のソフトウェアではありませんし、現実のユースケースを模倣するように設計されたものでもありません。 演習は、プログラミング言語を使いこなせるようになるためのおもちゃのような問題として設計されています。 そのため、すべてのエッジケースを網羅しようとしたり、大量の入力値チェックを強制したり、そうした現実世界の関心事を持ち込んだりすることは、意図的に避けています。 提案する改善がエッジケースの捕捉や入力値チェックのためだけのものであれば、演習に大きな違いをもたらすものでない限り、受け入れられることはまずありません。

学習演習

学習演習は、ただ1つの目的で設計されています。それは概念を教えることです。

演習への変更はすべて、まず何よりも、その変更が概念の理解を深めるかどうかという観点で検討されます。

学習演習は、(とくに)テストを網羅的にするようには設計されていません。 また、学習者がまだ学んでいない概念を使わないように、あるいは学習者を圧倒しないように、少し不自然だったり回りくどかったりすることもよくあります。

提案する変更が概念の学習から気をそらすおそれがある場合は、おそらく却下されます。 変更によって学習がしやすくなるのであれば、前向きに検討されます。 どちらともいえない場合は、受け入れられることはあっても、優先されることはまずありません。

練習演習

練習演習について理解しておきたい最も重要な点は、そのほぼすべてが中央リポジトリ("Problem Specifications"として知られています)に置かれているということです。 そのため、1つの演習に変更を加えると、すべてのトラックに波及効果が生じます。 つまり、よい変更はすべての言語の助けになるので、効果がとても大きいということです。 ただし、変更が受け入れられるには複数のトラックをまたいだメンテナーの合意が必要で、さらに各言語のメンテナーがその変更を自分のトラックに取り込む必要があるため、変更の負担も大きくなります。

また、演習を変更すると、シラバスでその演習が結び付いている概念が分かりにくくなったり、演習を解くために追加の機能が必要になったりして、アンロックされる位置が変わることがあります。 これも、変更が受け入れられる前に、トラックをまたいで検討する必要があります。

一部のトラックだけが特定のテストケースを持つための仕組みも用意していますが、そのような分岐はメンテナーと学習者の両方を混乱させかねないため、あまり推奨していません。 ですので、練習演習への変更を提案するときは、トラック全体の大きな流れを考慮してください。

変更を受け入れてもらうには

提案を受け入れない理由はたくさんありますが、それでも、すばらしいアイデアを思いついてくださり、実際に採用されることもよくあります!

また、とくに学習演習では、分かりやすさを高める表現の変更にはほぼいつでも前向きです。

提案が承認される可能性を最大限に高めるために、次の点を考慮したうえで提案を書き出してください。

  • その変更によって得られる具体的な改善(できれば、変更によって可能になること/防げることを示すコード例を添えて)。
  • 既存の解答への影響と、それだけの価値があると考える理由。
  • 教えられる概念や使われる概念に生じる変更。
  • なぜ今の形になっているのかを理解していること。(チェスタトンのフェンスについての記事も読んでみてください。)

そして、意見は意見として、事実は事実として述べることを忘れないでください。 そうすることで、いちばん実りある議論につながります。

提案のために時間を割いてくださり、またこの文書を読んでくださり、改めてありがとうございます!