Uploaded avatar of iHiD

さあ、Dig Deeperの時間です!

@iHiD
4年弱前
動画

Exercismの演習を解くのは、最初の一歩にすぎません。 本当の学びは、その先にあります!

今週、演習に新しい「Dig Deeper」タブを公開しました。これは、解答したあとにさらに踏み込み、メンターに聞かなくても、演習のニュアンスやトレードオフを探求できるようにするためのものです。

はじめに

演習の解答は、驚くほど多様です。 ほとんどのトラックで、もっとも基本的な「きちんとした」演習はTwoFerです。 典型的な解答はこんな感じです(これはRubyですが、ほとんどの言語でも似ています):

module TwoFer
  def self.two_fer(name='you')
    "One for #{name}, one for me."
  end
end

しかし、最近テストに合格した500件の解答のうち、350件以上がユニークでした 😲 さらに、空白や変数名などを正規化しても、半数以上は実際にユニークな解答のままです。

だからこそ、みんながどう解いているかを探るのは、たまらなく面白いのです。 しかし、それはまったく現実的でもありません。Exercismには何百万もの解答があり、そのすべてを読むには、文字どおり一生かかります。

でも! チームは演習を設計し、何十万人もの人をメンタリングしてきたので、人がどんなアプローチを取るのか、だいたい把握しています。 そこで、演習を解く際のさまざまなイディオマティックな(あるいはイディオマティックではないけれど興味深い)方法を紹介するために、新しいDig Deeperタブを追加しました。

例

実際の例を見てみましょう。 C#では、文字列を逆にする方法がいくつかあります。

Array.Reverse()メソッドを使う方法があります:

var chars = input.ToCharArray();
Array.Reverse(chars);
return new string(chars);

または、より短いLINQベースの方法もあります:

return new string(input.Reverse().ToArray());

または、StringBuilderを使う方法もあります:

var chars = new StringBuilder();
for (var i = input.Length - 1; i >= 0; i--)
{
    chars.Append(input[i]);
}
return chars.ToString();

さらに、少しイディオマティックさは落ちますが(でもパフォーマンスは上がります!)、Span<T>を使う方法もあります:

Span<char> chars = stackalloc[input.Length];
for (var i = 0; i < input.Length; i++)
{
    chars[input.Length - 1 - i] = input[i];
}
return new string(chars);

これらのそれぞれをアプローチと呼んでいます。それぞれに、それを説明する独立した記事があります。 この演習のDig Deeperページでは、それらをまとめて紹介し、パフォーマンスに関する記事も用意して、トレードオフを掘り下げています。

👉🏾チェックしてみてください(まだこの演習を解いていない場合は、シークレットモードで開く必要があります)

でも、まだあります!

これらの異なるアプローチに関する記事があるだけでなく、コミュニティが制作した何千もの動画もあります。動画では、演習を探求したり、ウォークスルーを録画したり、コーディング配信をしたり、イディオマティックな解答を成り立たせているものの奥深さに迫ったりしています。 これらの動画をすべて収集して、ページに掲載していきます。

参加しよう

これから数週間で、サイト内のさまざまな演習にDig Deeperタブが表示されるようになります。

アプローチや演習記事を寄稿したい場合、または動画を追加してほしいと知らせたい場合は、jonathan@exercism.orgまで連絡してください。Jonathanが始め方を手伝ってくれます。

最後に、感想を聞かせてください。アイデアや考えはフォーラムの投稿に書いてください!

2022年10月30日(日) · 役に立ちましたか?