KUASxSECS 從無到有

KUASxSECS Icon

回頭看自己的 Bitbucket,這份專案從 2017-06 開始,一路寫來、休耕、再加點新東西不知不覺就來到了 2018 年,也終於稍微能像個「成熟」的專案。這篇僅是稍微紀錄一下自己寫過來的感想,順便抒發一些現在的心情。

關於 KUASxSECS,你可以從 HackMD 上取得較為詳細的訊息。

Where are “YOU” from ?

其實理由很簡單,一步步來看的話…

  • 為什麼要寫教學評量?
    • 以教師面來說了解自己的教學方式、品質是否恰當、以學生面來說為了評斷教師是否適任嘛
  • 那教學評量改變了什麼嗎?
    • 笑死,評價再爛還不是留在學校,說好的退場機制呢?
  • 好吧,那起碼教學評量有公開數據讓大家了解教師的教學狀況或其他資訊吧?
    • ㄏㄏ

也就基於上述理由,所以我想打造一個公平、公正、公開的教學評量系統。由學生填寫教學評量,資訊完全公開透明,以數據化的方式讓大家快速了解教師的教學內容、教學方式或其他資訊。綜合上述,專案的主要訴求大概就是這四項:

  1. 一目瞭然的畫面
  2. 簡單易懂的操作
  3. 詳細完整的內容
  4. 匿名互饋的平台

比較多人會提到的問題是:

  • 就算由學生填寫,內容也不一定公正,有可能會有挾怨報復的回饋,也有可能會有過度吹捧的回饋
    • 數據的確會有極端情況出現,且是好是壞每個人心中的那把尺都不一樣。但當數據量一多便可以解決這個問題(以量制價)。因此學生的回饋量是非常重要的,當然內容也是必須捫心自問。
  • 即使內容真的公正,受於現實,必修不會因為課程評價過低所以學生就可以不選
    • 的確,學生並不會因為這份專案而多了選擇權,但選修課可以。再者,但這份專案的結果將公開、一目瞭然地攤在陽光底下供所有學生、甚至所有人檢視,因此教師的教學品質是可受公評的,我是希望藉由這樣的壓力來讓教師開始有對自己課程品質上的要求。

Step 1. 從開始到放棄

第一次動要做這份專案的念頭大概是三下,當時修了一門資管的爽課「C#應用程式開發與設計」,仔細想想當時竟然有能耐每個禮拜從建功跑到燕巢去,真的是瘋了 XD。當然重點不是修了什麼課,但我打岔一下這門課大概在做什麼:就是很基礎的 C# WinForm 設計。所以其實是滿爽的,因為都會了,當時只是為了湊學分順便去看一下妹子大概在教什麼才選的。

在修課之前其實就已經認識一位資管的朋友,當時原本計畫找他和另外一位他的朋友來合作寫這個專案。由於我還不熟稔網頁設計,只能說對 WinForm、WPF 還略有研究,所以想找他來負責 Web 的部分,我再透過介接或是直接處理來打造 WPF 的介面,但最後因為理念不合所以就僅只到討論而已。

我的理念就如同上面所提到的,那他呢?由於年代久遠我又記性不好,所以我對那時候的談話有點模糊了,但總結地來說,應該是怕專案會導致學生與教師的對立?或許吧。

Step 2. 從放棄到繼續

無疾而終一段時間後,我找了三兩好友(電子&企管),問他們對這份專案有沒有興趣。在我闡述了我的理念後,很開心他們深表認同,但我們還是都不會寫網頁啊 lol,所以我決定依原定計畫:我還是先寫 WPF 好了(?)。

於是,專案終於開始向前邁步了。耶比。

根據原訂的計畫,邁步的順序是:

  1. 設計問卷內容
  2. 依問卷內容設計應用程式的畫面
  3. 等有足夠的能力再設計網頁介面

問卷內容大概花費了 3-5 天的時間,畢竟一個在建功、一個在燕巢,要討論光透過語音還是稍嫌不足,所以才花費了比較多的時間。

問卷的設計方向主要是根據學生會比較感興趣的主軸去發展,因此可以歸納出這四點:

  1. 教學方式/類型
  2. 考試方式/類型
  3. 作業方式/類型
  4. 可汲取到的知識

雖然這份問卷在最後並不是百分之百的套用,但對於專案而言,我可以很不客氣的說這的確是最重要的墊腳石 XD。

在問卷結束後,我也接著著手開始設計 WPF 的應用程式。BUT!人生就是會有這麼一個 BUT!系上竟然開了一門網頁設計的課 XD。

Step 3. 從繼續回歸放棄再努力

人生在這個 BUT 之後開啟了我的網頁設計之路(?)。當時課程的名稱是「軟體工程」,聽起來就很煞氣,多煞氣?大概就跟我 ID 取 乂煞氣a齁哩乂 一樣的煞氣。

課程請的是業界講師兼畢業校友,第一周大概了解課程內容是 ASP.NET MVC 佐以部分的 MSSQL Server 與 GitHub。講師的教學方式是課程中逐步帶我們完成一個小專案,並將每周的進度上傳到 GitHub 上供我們查閱,也因為這樣我大概第三周後就沒去過學校了

主要是因為 ASP.NET MVC 的語法就是 C#,加上我對網頁已有一些基礎,因此我把重心放在其他的部份上,如 ASP.NET MVC 的設計流程、架構等。我自認我的學習能力算高,因此給我起個頭後,在資源足夠的情況下後面我是能夠自己學習的。

於是在了解,並逐步掉坑、落海、爬了不少文章後,兩個禮拜左右也就完成了第一份 ASP.NET MVC 專案─不知道幹嘛用的 Iwant2EAT

在此容我簡單介紹一下這份專案,也是一份基於「共享互饋」的美食地圖。任何人都可以透過網站來檢視、搜尋目前已被登錄的店家(包含店名、地址、營業時間等資訊),而會員則有新增店家、評論店家(按 ☆ 或留言)、蒐藏店家的功能。

雖然這份專案在現在的我看來實在是做得非常爛 XD”,但它也是 KUASxSECS 的網頁雛形,KUASxSECS 中的許多架構與樣式都是參考 Iwant2EAT 而來的(講到這連我都忍不住對它致敬啊)。

在專案完成後當然也是會越看越不順眼,所以隨著日子的增加,程式碼也是不停的在修改。到了期末專案也告一段落,並開始著手進行打造─KUASxSEOT。

…欸不是,KUASxSEOT 是什麼啦,這篇文章不是在講 KUASxSECS 嘛?!

KUASxSECS Final

其實在 KUASxSECS 之前還有好多個名字(我就是那種取個 ID 要花半天的人 QQ)。一開始是 KUASxSEOT,過了一個月後變 KUASxSETS,最後才變成 KUASxSECS,其簡寫與完整名稱如下:

  • KUASxSEOT:KUAS - Student Evaluations of Teaching (SEoT)
  • KUASxSETS:KUAS - Student Evaluations of Teaching (SETs)
  • KUASxSECS:KUAS - Student Evaluations of Courses (SECs)

我不清楚我的設計流程是否遵循著標準或是業界做法,但我還是分享一下:

首要確定功能,並依需求設計 SQL 資料表。以 KUASxSECS 為例,在最初我先確定了必須具備的功能:

  1. 評論相關操作
    • 課程排行榜
    • 建立、修改、刪除課程評論
    • 查詢課程評論
    • 分析課程評論(課程概要)
  2. 學期課表查詢
  3. 學期成績查詢

由於評論會需要課程資訊,因此我將它獨立出來,變成 Classes 與 Comments 兩張資料表。

Classes 專門儲存課程資訊:

  • SubjectChineseName
  • Teachers
  • ClassShortName
  • Guid

Comments 儲存學生評論:

  • ClassGuid
  • IsBlackboard
  • IsBook
  • …(約省略 17 項左右)…
  • RecordTime
  • Guid

兩張資料表中的 Guid 表示該筆資料的唯一識別碼。而 Comments 的 ClassGuid 資料行關聯著 Classes 的 Guid,也就是說我將課程資料獨立出來儲存,這樣的好處有二:

  1. 避免冗餘資料
    假設有 10 筆課程 A 的評論資料,每筆課程資料大小為 100 單位,那 10 筆就有 1000 單位。但我將課程獨立出來並透過 GUID 建立關聯,假設每筆 GUID 資料大小為 40 單位,那我就省下了 (100 - 40) * 10 - 100 = 500 單位的空間。

  2. 由於課程排行榜僅需要課程資訊與分數,因此我只需要讓 Class 附帶分數欄位就可以,不需要把所有 Comments 送出去,避免傳遞過多的冗餘資訊。

或許會有人認為我這樣的資料庫設計不夠正規化。的確,就結構上的確不到非常嚴謹,但每筆 Comments 中的的資料是緊密需求的,設計上並不會頻繁地只需要某部分,若再次正規化雖然對資料關係具有更好的約束性,但也導致資料關係表增加而令資料庫IO更易繁忙,原來交由資料庫處理的關係約束現更多在資料庫使用程式中完成,基於這個理由我認為這樣的資料庫模型是最適合的。

另外要提一下的點應該是,存取資料庫並非相對多見(?)的 Entity Framework,而是用短小精悍的 .NET ORM 神器── Dapper。關於 Dapper 的介紹,可以參考其他前輩的文章,這邊就不贅述:

我簡單列幾個 Dapper 的優點:

  • 操作簡單、方便、直覺,可搭配 LINQ 做使用
  • 強調效能,在部分情況下效能勝於其他 ORM 架構

至於其他追加的功能:

  • 學期缺曠查詢
  • 學分試算
  • 期中預警資料
  • 歷年成績報表
  • 畢業預審查調
  • 畢業預審報表
  • 教學評量自動填寫

其實就是我在 2015 年所寫的 KUASxSecretary 功能 XD,這是基於 WinForm 的應用程式,當時沒有把它推出去讓大家認識,所以除了我自己的朋友外應該都不認識。不過當時 KUASxSecretary 是以 VB.NET 寫的,因此將它轉成 C# 還是有些困難點。例如當時 HTTP 操作的部分是用我自己寫的 Module 而非 RestSharp,轉換過來踩了些雷外,也是覺得以前有些地方寫的糟所以邊改邊重寫。

不過提到 KUASxSecretary,當時我真對他下了些苦心。除了將它從 GetSelectedCourseList 這個俗俗的名字變成 KUAS_MultiFunctional 這個更俗的名字外,還有剛剛所提到的功能,以及免驗證線上選課、自動選課、自動搶停車證等。身為 KUASxSecretary,我私心認為它的確對得起高應小秘書這個名稱 XD。

總結

人生就是不斷的衝刺跟跌倒!
如果你覺得你的人生一直都在跌倒,別難過,你只是很擅長跌倒!

就平台──KUASxSECS──而言,越多的評論才能越顯出它的價值。然而,可能是因為我對於平台的設計不良,或是設計的問卷內容存在缺陷,亦可能是缺乏宣傳或學生並不想反饋,導致目前評論數不多。若大多數的學生抱持著與我相同的想法,也就是讓課程資訊更公開透明化,那我想若是因為我所建立的平台不甚完善導致使用者不想使用,那我應該會收到些建議或回饋。但至目前為止,我只收到了一封寶貴的回饋 XD。在這樣的思考後,我想,既然平台已經建立了,那是否要改變這樣的環境,決定權就交由學生了。

由於原始碼含有一些較為敏感的資訊,所以目前不便透漏,之後若我有時間,我會將這些敏感資訊抹除掉後再 Open Source。在這之前,我能先提供一些我使用的第三方套件與相關的Q&A文章給各位參考:

  1. 3rd-party Packages
  2. 相關Q&A