angelikatyborska 上傳的大頭貼

分析器、呈現器與課程大綱:Exercism 有什麼新東西?

@angelikatyborska
大約5年前
影片

2021 年 9 月初,Exercism v3 終於正式推出。 Angelika Tyborska 是協助我們順利完成的重要維護者之一。 除了是 Elixir 學習練習與課程大綱的共同創作者,Angelika 在 v3 的整個開發過程中也是關鍵的聲音,在建置過程中不斷提供想法與洞見。 她是 Exercism 的重要貢獻者。

在這部影片中,Angelika 帶我們了解 v3 想解決哪些問題、平台有哪些重要的新增功能,以及這一切如何環環相扣,並深入探索分析器、表示器與全新的學習練習。

逐字稿

Exercism 的歷史

Exercism 已經問世好一段時間了。它最早由 Katrina Owen 在 2013 年創立,原本是給她學生使用的工具。在 v1 時期,它只是蒐集了一些有趣的練習題。到了 v2,它成為一個提供免費程式碼引導的平台。

v3 🚀 01.09.2021

9 月 1 日,Exercism v3 正式發布。

在這部影片中,我會帶你了解 v3 的各項變更、說明為什麼要做這些變更,以及它們將如何改善你在 Exercism 上的體驗。

關於我

這是我 [0:38 顯示的照片]。我是 Angelika。我和我的共同維護者 Tim 一起為 Exercism v3 打造了 Elixir 學習軌道的工具,以及超過 30 個學習練習。我相信,Exercism 以全新的樣貌,有潛力成為學習新程式語言的最佳工具。

v3 有什麼新功能?

Exercism v3 有什麼新功能?簡短的答案:很多。

v3 引進的所有重大變更,都是為了處理大家在 v2 遇到的最大問題。

v2 的問題

v3 要解決三個關鍵問題。

第一:一開始的安裝設定很困難。第二:只練程式卻沒有學習。第三:導師回覆時間太長。

問題 1:一開始的安裝設定很困難

問題一:一開始的安裝設定很困難。要開始使用 Exercism,你得安裝 Exercism CLI、安裝你想嘗試的程式語言,還得能在終端機裡操作自如。你得設定編輯器,讓它為新語言做語法高亮,諸如此類。對進階開發者來說,這些設定只是浪費時間,很麻煩。但對初學者而言,這可能是道無法跨越的門檻。

解決方法:讓大家在瀏覽器裡寫程式。完全不需要一開始的安裝設定。

為了實現這點,Exercism 現在有了網頁編輯器,而每種程式語言都有自己的測試執行器,專門負責執行 Exercism 練習的測試。

網頁編輯器

這是網頁編輯器 [2:25 顯示的截圖]。它有兩個面板,左邊是原始碼,右邊是說明與測試套件。

它沒有任何花俏的功能,因為它的目標不是取代你最愛的工具。它的目標是讓你暫時不必安裝所有必要的工具與相依套件,直到你對這個新程式語言更熟悉、確定想繼續用它為止。

網頁編輯器完全是選用的。你可以繼續使用 CLI,在自己的電腦上用你最愛的工具。

測試執行器

要讓網頁編輯器可用,就必須有辦法對你在瀏覽器裡寫的解答執行測試。這就是測試執行器的工作。

Exercism 上每種語言都有自己的測試執行器。測試執行器負責回報測試結果,但不只如此。它還得取出測試的主體,讓你知道實際執行了哪些程式碼,以便你解讀失敗訊息;同時也要捕捉測試的輸出,讓你能在瀏覽器裡用 puts、print、console.log,或你的語言提供的任何輸出函式來除錯。

測試執行器對於在瀏覽器中解題至關重要,但透過 CLI 提交的解答也會用到它們。當你瀏覽某個練習的社群解答,或引導學生時,不必下載並在本機執行,就能看出這個解答是否通過測試。

問題 2:只練程式,沒有學習

問題二:Exercism 是一個練習寫程式的平台,卻沒有提供任何從零開始學習特定語言的資源。你得先在其他地方學好。

Exercism 上的練習題原本就設計得有趣又有挑戰性,但有時候連最簡單的題目,都太難作為進入一門新程式語言的起點。尤其當你想學的語言語法完全不同,甚至採用不同的程式設計範式時,更是如此。

解決方法:在練習之外也提供學習資源。

隨著課程大綱與學習練習的加入,Exercism 現在已成為深入一門新程式語言的絕佳工具。

課程大綱

什麼是課程大綱?課程大綱是由概念構成的樹狀結構,這些概念組成了每一門程式語言。Exercism 上每個學習軌道的課程大綱都是獨一無二的,因為每種程式語言都不一樣,有不同的概念。

概念之間彼此相依,形成樹狀結構的各種分支。你必須先學會分支中的前一個概念,才能解鎖下一個概念。

例如,這是 Elixir 課程大綱的開頭 [5:10 顯示的截圖]。它從一個叫做「basics」的概念開始,涵蓋:如何定義模組、如何定義具名函式,以及在哪裡找到標準函式庫的文件。這些知識是每個 Exercism 練習都需要的。你必須先學會 basics,才能解鎖任何其他概念。舉例來說,你可以學習布林值,而一旦你懂了布林值,就能接著學 cond 運算式,以此類推。

為了讓你更有概念,這是完整的 Elixir 課程大綱 [6:16 顯示的截圖]。目前它包含超過 50 個概念,但仍有待擴充。

在頂端,你會看到像字串、陣列、映射與元組這類概念。在中間,有 Enum模組、正規表達式、結構與撰寫型別規格。而在最後,有協定、行程與任務。

學習練習

你透過解學習練習來學會課程大綱中的概念。學習練習和練習題不同。它們是為了教導完全不懂這門程式語言、但至少懂另一種語言與基本程式設計概念的學生而設計的。

簡介

每個學習練習都從一段簡介開始。簡介會說明這個練習所教概念的基本資訊。大多數學習練習只教一個概念,但也有例外。

這個範例顯示的是關於 Elixir 映射的簡介 [7:12 顯示的截圖]。它會說明什麼是映射、如何定義映射、如何存取映射中的值等等。它包含一些程式碼範例來展示新語法,但數量不會太多,免得你只要複製貼上簡介就能解出練習。

說明

接著是說明。學習練習的說明會拆成幾個小任務。這些任務的設計,是要引導學生去使用某個概念中最關鍵的部分。

例如,教映射的學習練習會讓學生先建立一個映射,接著從映射讀取一個值,然後更新映射中的某個值,再取出映射中所有的鍵,以此類推。

每個學習練習都有一段故事,但故事並不那麼重要。它的存在只是為了讓你不必使用像「foo bar」和「1 2 3」這種毫無意義的值,但它不像練習題裡的故事那樣扮演重要角色。

提示

每個任務都附有一小串提示,以防學生卡住。提示通常會透露在特定任務中該用哪個函式,並帶你找到那個函式的文件。

練習概念

但光是解一個學習練習,並不足以真正精通那個概念。你也得實際練習。這就是為什麼我們檢視了 v2 中既有的所有練習題,並挑出幾個可以用來練習每個概念的題目。

這是單一概念在樹狀結構中的樣子 [9:01 顯示的截圖]。圓點代表練習。第一個帶燈泡圖示的圓點是學習練習,其他的圓點則是練習題。

這是某個概念在解完幾個練習後的樣子 [9:37 顯示的截圖]。注意,即使學習練習已經完成,這個概念的某些練習題仍然處於鎖定狀態。這是因為練習題並不限於只練習單一概念。在那些練習題解鎖之前,你可能得先學會比原子更多的概念 [截圖中顯示的概念]。

學習練習對已經精通某個語言的人來說,應該是輕而易舉。但別擔心,它們完全是選用的。你可以從學習模式切換到練習模式,這麼一來就能立即取用所有有趣的練習題,不必先走完課程大綱。

課程大綱 = 龐大的工程

有個重要細節我必須提一下,好讓你調整期待:開發課程大綱是一項超級龐大的工程。並非每個學習軌道都有足夠的活躍維護者,能馬上推出準備好的課程大綱。

在我錄這部影片的當下 [2021 年 9 月 4 日],學習練習只在這些語言提供:Common Lisp、C#、Elm、Elixir、F#、Go、Java、JavaScript、Python、Ruby、Rust 和 Swift。Julia 學習軌道很快就會推出它的課程大綱。

問題 3:導師回覆時間太長

問題三:導師回覆時間太長。並非每個學習軌道都有足夠的導師。有些學習軌道的導師少到引導的等待時間可能長達一個月。這一直讓學生非常沮喪。這是 Exercism 的核心問題,因此我們從三個不同角度來處理它。

自動化回饋

第一個解決方法是提供自動化回饋。導師寫給學生的許多回饋都是重複的。能夠自動偵測常見錯誤並直接回報給學生,徹底改變了局面。

取得關於常見錯誤的自動化回饋,能讓學生在尋求引導之前就先改進自己的解答,這也會讓導師的工作更輕鬆。它能讓導師不必再提像 snake_case 與 camelCase 這種瑣碎細節,而能專注在解答的核心。在某些情況下,自動化回饋就足以讓學生滿意,他們甚至根本不會申請引導。

在 v3 中,有兩類自動化回饋工具:分析器與表示器。

分析器

分析器是一種工具,會查看解答中的特定特徵,並回傳一份預先寫好、針對它發現內容的評語清單給學生。要檢查哪些特徵,完全取決於語言和特定的練習。

例如,Elixir 對函式和變數有非常特定的命名慣例。Elixir 分析器對每一個練習所做的其中一項檢查,就是檢查所有的變數名稱和函式名稱。如果它發現某個名稱不是用 snake_case 寫的,就會提醒學生命名慣例。

Elixir 分析器還能做的另一項檢查,是偵測某個特定模組的使用情形。例如,這個檢查 [13:20 顯示的截圖] 是關於「沒有使用 Enum 模組」,而且專門針對遞迴的學習練習。使用 Enum 模組就違背了這個學習練習的目的,所以分析器會提醒學生不要這麼做,改用遞迴。

表示器

第二個能幫我們在 Exercism 上提供自動化回饋的工具,是表示器。表示器會取出解答,並移除不重要的部分。它會將格式標準化、移除註解與文件,並把函式和變數名稱替換成佔位符。

表示器的輸出稱為表示形式。每個提交到 Exercism 的解答都會被送進表示器,而它的表示形式會連同解答一起儲存在平台上。

導師之後就能使用一個介面,瀏覽已提交解答的表示形式。針對每一種獨特的表示形式,導師可以留下回饋。接著,凡是提交的類似解答具有相同表示形式的學生,都會看到這份回饋。導師只需要寫一次回饋,這份回饋就能傳達給所有需要的人。

表示器本身已經為某些語言實作並部署完成,但在我錄這部影片的當下 [2021 年 9 月 4 日],平台上還缺少給導師用的介面,所以我們還得再等一陣子,這項功能才會完全開放。

避免不必要的引導時段

另一個解決漫長引導佇列的方法,是避免不必要的引導時段。在 v2 中,核心練習必須接受引導。提交核心練習就代表你自動申請了引導,而且沒有導師核可,就無法前進到下一個核心練習。許多學生會透過完成核心練習來學語言,因此他們需要引導來帶領他們走過學習歷程。

現在情況不同了。核心練習的教學角色與導師核可,已由學習練習與分析器接手。在 v3 中,引導一律是選用的,而且必須明確申請。

引導請求

要申請引導,你得回答兩個問題:你希望從這個學習軌道學到什麼?以及:導師能如何協助你完成解答?事先了解學生對引導時段的期待,導師就能挑選最符合自己知識與引導風格的引導請求,雙方也就更可能在引導時段結束後都感到滿意。

引導佇列與收藏

在新的引導佇列中,導師能看到學生引導紀錄的統計資料。他們能看出哪些學生從未被引導過、可能需要更仔細的審視,以及哪些學生已經接受過多次引導、了解整個運作方式。

導師也終於能找到自己以前引導過的學生,並與他們建立關係。導師甚至能把學生加入收藏,藉此優先引導那些過去合作愉快的學生。

封鎖清單

每次引導時段結束後,學生和導師都可以選擇封鎖對方。這裡有兩份封鎖清單:封鎖的學生與封鎖的導師。如果我以導師的身分封鎖了身為學生的你,你日後仍可能引導我。對方當然完全不會知道自己被封鎖,因此無法對你進行報復。

你可以因為任何理由選擇封鎖某人,但如果對方違反了行為準則,請務必另外明確檢舉他們,以保護其他使用者。

減輕漫長等待的負面影響

最後,處理漫長等待問題的最後一步,是確保即使你有時得等待,等待帶來的負面影響也能降到最低。在 v3 中,等待引導並不會阻止你解其他練習。你仍然能繼續在學習軌道中前進。

引導時段可以由任一方結束。如果你是學生,不喜歡某位導師對你採取的做法,你可以隨時要求換一種做法,也可以選擇退出這個時段。無論引導時段如何結束,學生都能針對同一份解答,向另一位導師申請新的引導時段。

引導名額

每個學習軌道可以有 1 到 4 個引導名額。當你想針對一個困難、比較不容易很快獲得引導的練習申請引導,同時又想在其他練習上取得引導時,多個引導名額就能幫上忙。

引導名額可以透過累積聲譽來解鎖。只要你發布解答供大家瀏覽、引導學生,或對 Exercism 的任何一個程式庫做出貢獻,就能獲得聲譽。這表示對平台貢獻越多的學生,能取得越多引導。

總結

以上就是 Exercism 在 2021 年 9 月 1 日改版的幾個主要方向。

我們加入了學習練習,讓你不必離開平台就能學習;加了網頁編輯器,讓你不用安裝任何東西就能寫程式;還有分析器與表示器,讓你能立即獲得自動化回饋。我們也移除了引導流程中許多令人挫折的障礙。

還有很多新東西等著你探索:我們的貢獻專區、徽章、全新的個人檔案、記錄你完整 Exercism 歷程的旅程頁面,還有更多更多。

快來 exercism.org 試試看吧。

謝謝你。

2021年09月11日 · 覺得有幫助嗎?