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);

我們把每一種都稱為一個 Approach,每一種都有自己獨立的文章來解說。 這個練習的 Dig Deeper 頁面會把它們集結在一起,還附上一篇探討效能取捨的文章。

👉🏾 去看看(如果你還沒解過這個練習,需要切換到無痕模式)

還有更多!

除了這些不同做法的說明文件之外,我們的社群還製作了數千支影片,內容包括探索練習、錄製逐步導覽、直播寫程式,以及深入探討什麼才算是慣用的解法。 我們正在蒐集這些影片,並把它們放上相關頁面。

一起參與

接下來幾週,你會開始看到 Dig Deeper 分頁陸續出現在網站上各項練習中。

如果你想貢獻一個 Approach、一篇練習文章,或是告訴我們你的影片好讓我們加進來,歡迎聯絡 jonathan@exercism.org,他會協助你開始。

最後,歡迎告訴我們你的想法,並在論壇貼文中分享你的點子和意見!

2022年10月30日 · 覺得有幫助嗎?