在 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,他會協助你開始。
最後,歡迎告訴我們你的想法,並在論壇貼文中分享你的點子和意見!