Python, Git, GitHub-Flow:大一計概助教課

Ya-Liang Allen Chang
5 min readDec 14, 2018

--

Frontend for the homework leaderboard

計概助教

這學期有幸擔當資工系大一計算機概論的助教,這是一個換算時薪大概150不到的苦差,大概每兩個禮拜花幾小時會出一次作業、幾小時改一次作業,加上期中期末考,相當扎實。

不過除了作業考試之外,這們課也給我一個有趣的機會 — — 教Python!

教什麼?

自從在高中當了一學期電算社的不專業講師以後,我已經很久沒有教Python了。隨著程式資歷的成長,對於寫程式這件事情的看法也跟高中時大不相同,對象也從懵懂無知的高中生,變成有點程式能力的資工系大一。如果只教Python語法,感覺有點太無聊了,我自己應該都會睡著。

所以,要教什麼呢?我掙扎了許久,最後還是決定:Linux、Python、Conda、coding style、Git、GitHub-Flow、frontend/backend、CI/CD … 我會的全部都教吧!

一堂課

一堂課,當然沒辦法教那麼多東西。實際上,我大概只帶完Python基礎跟Git基本操作,便在回答各種問題中結束了那堂課。

不過我還可以出一次作業!這才是我覺得好玩的地方XD

我覺得只有自己實作,才能會使用這些工具,所以我一開始不打算講解太多內容,而是藉由建立良好的環境、讓學生在實作中了解這些東西的重要。

由於時間有限,這次作業以熟悉Python+Git+GitHub-Flow為主要目標,其餘都只要照著指示做就好。

接下來讓我們一起看看這份作業的要求吧。

GitHub link: https://github.com/amjltc295/PythonHomework

PythonHomework

這份作業的主軸大概就是用GitHub-Flow繳交作業:

架設環境 -> 看懂code -> 完成八個基本的Python task -> 發PR -> TA review -> Merge -> Auto-grading

  • 整個repo是一個frontend/backend架構:frontend用簡單的React寫,架在Netlify上;backend用Flask,架在Heroku上。
  • Repo也包含簡單的CI/CD:PR會有自動測試,merge後就會deploy並批改成績,最後顯示在前端的leaderboard
  • 學生可以不用理解完整的架構,只要在src/students/ 建立自己的檔案就可以了。
  • 問題只能用issue問!
  • 用Windows有問題的話自己解決!

(其實我原本是想讓全班一起做一個project,每個人負責不同的部份,畢竟PR不是設計來教作業的,不過後來因為不好評分/怕同學做不出來,所以就打消這個念頭了。如果有誰有機會帶比較有經驗的學生,可以試試看XD)

Task 0: Environment Setup

這部份是要上課之前完成的環境設定。

  • 要求使用Linux/MacOS,強迫熟悉使用command line。
  • 辦GitHub帳號
  • 用Conda管理環境/套件版本
  • 使用Flake8做style/syntax檢查
  • (Optional)Oh-my-zsh/Vim/ALE/YouCompleteMe/Ack/Oh-my-tmux…各種好用的坑。看到來問問題的同學有裝Oh-my-zsh心情就覺得舒暢許多XD

Python Task 1–8

這部份主要是讓學生練習讀document、熟悉Python語法與一些常見用法。我寫了八個註解詳細的function(task),並留下一些 # TODO tag,學生只要填空就可以了,總共加起來需要寫的code大概30行。

  • Task 1: Basic Syntax and Flake8 Checker
  • Task 2: Data Types: String, Integer, Float, List, Dictionary
  • Task 3: Conditions
  • Task 4: For and While Loop
  • Task 5: I/O
  • Task 6: Function
  • Task 7: Class
  • Task 8: Modules

Grading

  • 完成PR流程(20%)
  • 通過8個task,包含public/private data(60%)
  • 通過Flake8 check (10%)
  • Coding style & commit message (10%)
  • (Bonus) Issue提問/回答/發現bug問題 (10%)
  • (Bonus) 發PR修bug (30%)

遇到的問題

  • Autograder不好寫,每個task需要的檢查不一樣,得寫不同種檢查方式,最後一題要在圖上寫學號還得review時人工檢查
  • Heroku的App boot time有60秒的限制,HTTP request也有30秒的限制,隨著繳交的學生越來越多,Heroku就超過時間crash了,server開不起來。最後只能off-line自動批改,dump結果後上傳,有點失去CI/CD的價值。這部份我還沒想到要怎麼解決
  • 要寫的code不多,抄襲不好抓,抓到也有點困擾
  • Commits最後變得很多,而且有人不小心寫很髒的東西(如把Miniconda的安裝檔加到commit再移除),最後整個repo變得很大,pull要很久
  • 評Coding style要一個一個review,還得把一個一個分數放在Netlify的環境變數裡面
  • 沒寫什麼unit test QQ

總結

覺得做了一個很有趣的Project,應該記錄一下。前後花了不少時間Review/回答問題,也額外開了兩個晚上的TA hours,不過比改作業跟考卷有趣多了~

我一個大一都不認識,只能從有限的feedback評估這次作業的效果。不少人說有學到東西啦,只是不知道他們寫這個作業有多崩潰XD,我想應該是滿多同學有互相討論的,希望有成功把他們引入寫好程式的門(?

對這個Project有興趣的歡迎討論、或者發PR修bug XD

--

--

No responses yet