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

اما از میان ۵۰۰ راه‌حل اخیری که از آزمون‌ها عبور کرده‌اند، بیش از ۳۵۰ مورد یکتا بوده‌اند 😲 و حتی وقتی مواردی مثل فاصله‌های خالی و اسم متغیرها را یکسان‌سازی کنید، باز هم بیش از نیمی از آن‌ها راه‌حل‌های واقعاً یکتا خواهند بود.

این موضوع باعث می‌شود کاوش در این‌که همه چطور مسائل را حل می‌کنند فوق‌العاده جذاب باشد. اما این کار کاملاً غیرعملی هم هست. میلیون‌ها راه‌حل در 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 تماس بگیرید تا به شما کمک کند شروع کنید.

و در پایان، بگویید چه فکری می‌کنید و ایده‌ها و نظراتتان را در پست انجمن بنویسید!

30 اکتبر 2022 · برایتان مفید بود؟