更新:我們很開心宣布,Mozilla 因為這個專案頒給了我們一座 Open Source Support Award。你可以在這裡閱讀更多。
這篇文章標誌著 Exercism 的自動化引導支援專案正式展開。我們會在這個專案中開發一套框架,用程式自動分析使用者的解答,改善學習者的回饋循環,同時減輕導師的負擔。短期目標是自動核准符合既定驗收標準的解答,並針對常見的改進項目提供回饋。
本文的目的是說明我們想解決的問題,以及接下來幾個月處理這個問題的整體計畫。後續我們會再發表更多文章,深入介紹問題的背景、Exercism 上自動化分析的歷史,以及更多關於實作策略的細節。
為什麼需要自動化導師支援?
Exercism 最重大的障礙,就是如何應付規模的成長。
我們的志工導師是 Exercism 成功的關鍵。他們負責審閱學習者的解答、分析這些解答是否符合練習的通過標準或還需要改進、同理地理解學習者的思考過程、提供鼓勵又有幫助的回饋,並引導學習者掌握語言的慣用寫法。目前我們勉強還能跟上引導的需求。但如果想繼續成長,我們需要比「增加更多導師」更好的策略。
對構成 Exercism 語言軌道骨幹的核心練習來說,我們估計大約 25% 的提交第一次就夠好,可以直接標記為完成。另外 55% 的提交則有落入常見類別的問題,只要複製貼上既有的回饋片段就能引導處理。只有大約 20% 的解答需要導師發揮創意、用心思考才能給出回饋。
這 80% 不需要導師真正動腦的解答,對願意付出時間幫助他人的人來說,既令人挫折又白白浪費時間,也無法充分發揮他們的專業。
同樣地,學習者可能得等上一天到一週才能收到回饋,在這段期間也無法在軌道上繼續前進。對那些提交的解答剛好屬於這 25% 完全正確解答的人來說,這段等待格外令人挫折;對其他人來說,這頂多也只能算是差強人意。學習者常常因為這段等待而失去動力,並對整個流程感到挫折。
如果我們開發一套系統,能自動分析解答,並決定要直接核准,或是針對已知問題提供制式回饋,我們估計就能藉由去除「無聊」的部分大幅減輕導師的工作負擔,同時明顯改善學習者的體驗。額外的好處是,在結構與風格這類問題上,大家會收到更一致的回饋,也更容易針對那些界線較不明確的主題展開更有意思的討論。
這要怎麼運作?
我們的長期目標是開發深度學習演算法,用來分析 Exercism 自 2013 年推出以來將近一百萬筆提交內容的抽象語法樹(AST)。這樣的工具或許能找出常見的模式,以及導師相關的留言。短期目標則是運用靜態分析,根據導師最常看到的重複錯誤,判斷可以給出什麼回饋。
這個專案大致可分為以下幾個部分:
- 產品調整: 我們需要釐清這套自動分析要如何與現有的引導介面整合、回饋要用什麼方式傳達(系統訊息、「機器人」等),然後在 Exercism 網站上實作。
- 基礎架構: 我們會設計並建置能有效支援跨多種語言執行靜態分析的基礎架構。
- 靜態分析原型: 開發一個範例分析器,能自動核准 Ruby / Two-fer 的良好解答,並記錄這個過程,讓更廣大的社群也能參與貢獻。
我們的目標是在 2019 年年中推出初版原型。等基礎打好之後,我們預計會把這套機制延伸到 Ruby 以外的語言,以及 Two Fer 以外的練習。雖然在原型有進展之前,我們還不會有現成的框架能把其他語言和練習整合進網站,但如果你想開始為自己喜歡的語言和練習撰寫分析器,那就沒有理由再等了!到這個專案的 GitHub 儲存庫開一個 issue,告訴我們你想做些什麼。
我們非常期待能與 Exercism 社群中早已運用靜態分析協助引導的夥伴合作,例如 tehsphinx 和 bitfield,他們為 Go 軌道上的導師開發了一套靜態分析工具。這套工具讓這個軌道從積壓了大量待處理項目,蛻變成 Exercism 上回應最迅速的語言軌道之一,正說明了自動化導師支援能帶來多大的影響。
接下來幾週,我們會進一步說明這些最初關鍵步驟的內容,以及整體會怎麼運作。
我們很樂意在下方留言區回答你的任何問題!:)