去年,為了處理課堂上的分組與同儕互評(Peer Evaluation),我自己用簡單的 Google Apps Script(GAS)寫了一套小工具。那時候我對它還算滿意:學生登入後登記組別、填寫組員名單,到了互評階段再依序替同學打分數,評分結果直接寫入 Google Sheets,打開試算表就能繼續整理。雖然沒有啥技術門檻,也談不上多嚴謹的系統設計,但應付一門課幾十個學生,坦白講已經相當順手。
GAS 最迷人的地方就在於敏捷:腦中浮現一個需求,敲幾行程式碼串上一張試算表,系統轉眼就能動起來。只是隨著系統服役的時間拉長,當初貪圖方便留下的「反正先這樣」,最後全成了回頭找麻煩的技術債。
第一個遇上的麻煩是權限管理。誰可以填寫?誰能查看?學生退選、換班或重新分組該如何處理?多門課能否共用同一張表?老師跟學生看到的介面是否該有所區隔?這些細節在只有幾十個人的小班級裡,靠手動調整還撐得過去;但修課人數一多、學期一拉長,維護起來就讓我心累。
第二個麻煩則是學生無窮無盡的輸入錯誤。舉凡自行鍵入組員學號、姓名,或是互評時手動挑選評分對象,只要有人漏打一碼、多按一個空白,甚至完全誤解欄位意圖,原本單純的資料整理,瞬間就會演變成需要通靈的解謎難題。有好幾次,我盯著試算表裡的某一行資料,心中充滿困惑:這位同學,你到底是在評誰?
最根本的瓶頸在於資料累積。Google Sheets 拿來即時收集與快速檢視資料確實方便,但當我想跨學期、跨課程追蹤資料時,試算表的限制就浮現了。假設有位學生學期中換過組,我真正需要的往往不是「他現在隸屬哪一組」,而是他在某個時間區段究竟跟誰合作、當時互評的對象是誰,以及換組前的紀錄能否完整留存。半年後回頭檢視時,如果還想把當時發生的脈絡說清楚,試算表格狀儲存的方式就顯得捉襟見肘了。
於是我心一橫,決定不再替 GAS 打補丁,直接改用 Supabase 打掉重練。一開始的想法很單純,以為只是把試算表搬到關聯式資料庫而已;結果一跳進去才發現,從課程、學期、班級名冊、分組用途、組員關係的有效期限、異動歷程、互評名單,一路擴展到權限驗證與登入機制,該處理的架構一個都沒少。
開發過程中,我甚至得面對一個以前根本沒認真想過的問題:如果學生在中途調組,那些已經送出的互評紀錄,評分對象到底要不要跟著連動變更?答案顯然不行。畢竟今天螢幕上顯示的組員,未必就是兩週前熬夜跟你一起趕報告的夥伴。因此系統必須在互評啟動前,將「本輪評分對象」凍結成一份獨立的快照(snapshot);就算日後人員再怎麼異動,過去發生的合作關係還是能原封不動地保存下來。原本看似單純的資料庫移轉,就這麼一路膨脹成一個完整專案。
不過這次開發過程中,最讓我感到驚豔的倒不是 Supabase 或資料模型本身,而是拿來搭配 AI 的一個小巧思。我讓 AI 來扮演審查員(reviewer)。平時我們找 AI 當 reviewer,多半是請它檢查程式碼有沒有 bug、SQL 有沒有寫錯,或是功能有沒有遺漏;這次我反其道而行,給它設定了一個全新的角色。
我跟它說:「你現在是一位第一次進到這個系統的大一新生。你不知道我在想什麼,對後台資料庫長什麼樣子也一無所知。你就照著眼前看到的介面操作,只要哪裡看不懂,就毫不留情地提出來。」
結果它立刻化身成一個超級難搞的新生,連珠炮似地丟出一連串質疑:「『待核定』是什麼意思?」、「所以我現在要做什麼?」、「選錯組員可以重選嗎?」、「老師看得到我寫的內容嗎?同學看得到嗎?」、「這個期限是指分組截止,還是互評截止?」、「手機打開之後,下一步的按鈕到底在哪裡?」、「這一頁是要我填寫內容,還是純粹通知?」
這些提問看似直白基礎,卻恰恰是系統開發者最容易忽略的盲區。身為設計者,我們太清楚「待核定」對應到後台的哪一種狀態代碼,也明白按鈕按下去會呼叫哪一支後端函式;但對使用者來說,他根本不必也不想理解這些底層細節。學生真正在意的永遠只有四件事:我現在在哪裡?我要做什麼?什麼時候以前要完成?如果我按錯了,該怎麼辦?
這一輪測試逼得我回頭大幅修改:把工程思維的狀態換成學生聽得懂的話、補上清楚的「下一步」導引、明講老師與同學各自看得到什麼、將截止時限標註清楚,並加上選錯後的補救路徑,順便重新梳理手機版的操作流程。這段經驗刷新了我對「AI reviewer」的用法想像。它不一定要比我們更懂技術,有時候反而要刻意讓它一無所知,讓它扮演第一次來上課的學生、第一次接觸系統的使用者,去衝撞我們自以為理所當然的設計。
很多時候,系統真正致命的缺陷並不是程式報錯。按鈕按得下去、資料順利寫入資料庫、主控台(console)乾乾淨淨沒有任何紅字錯誤,但坐在螢幕前的使用者,卻壓根不知道自己剛剛做了什麼。這種認知斷層,在教學現場往往才是最棘手的災難。
目前這套系統的核心架構總算整理到可以先在小班級試跑的水準。至於學生實際上線後會不會乖乖照著我預期的方式走?老實說,我還沒有信心。只要在講台上待得夠久,每位老師都有這種深刻體會:哪怕自認說明已經寫得再清楚,學生永遠有辦法找到一種你做夢都想不到的解讀方式。接下來就等正式上線,到時候才能驗證,這群 AI 學生 reviewer 到底有沒有替我先擋下真實世界的混亂。
