Linux中國

在大學培養學生們參與開源代碼開發的十四個技巧

學術界是培養和塑造未來的開源開發者的最佳平台。研究中發現,我們偶爾會開源自己編寫的軟體。這樣做有兩個理由,一是為了推廣自己編寫的工具的使用,二是為了了解人們使用這些工具時會遇到哪些問題。在這樣一個編寫研究軟體的背景下,我的任務就是為 Bradford 大學重新設計二年級的本科軟體工程課程。

這是一個挑戰,因為我所面對的 80 個學生是來自不同專業的,包括 IT、商務計算和軟體工程,這些學生將要在一起上課。最有難度的是,需要和這些編程經驗差距很大的學生一起編寫代碼。按照傳統,該課程允許學生選擇自己的小組,然後給他們布置構建一個加油站資料庫系統的任務,最後提交報告作為評估的一部分。

而我決定重新設計課程,讓學生了解現實中的軟體團隊是如何協作的過程。根據學生的專業和編程技能,我將他們分為五、六個人一組。這是為了確保每個小組的整體水平相當,避免小組之間的不等。

核心課程

課程的形式改為講座和實踐課兩項結合在一起。然而實踐課作為指導過程,主要是老師監督各個小組的實踐進度以及他們如何處理客戶和產品之間的關係。而傳統的教學方式由項目管理、軟體測試、工程需求分析以及類似主題的講座組成,再輔以實踐和導師會議。這些會議可以很好的考核學生的水平以及檢測出他們是否可以跟得上我們在講座部分中的軟體工程方法。本年的教學主題包括以下內容:

  • 工程需求分析
  • 如何與客戶及其他團隊成員互動
  • 程序設計方法,如敏捷和極限編程方法
  • 如何通過學習不同的軟體工程方法進行短期的水平提高
  • 小組會議及文檔編寫
  • 項目管理及項目進展圖表(甘特圖)
  • UML 圖表及系統描述
  • 使用 Git 來進行代碼的版本控制
  • 軟體測試及 BUG 跟蹤
  • 使用開源庫
  • 開源代碼許可及其選擇
  • 軟體交付

在這些講座之後,會有一些來自世界各地的嘉賓為我們說說他們在軟體交付過程中的經驗。我們也設法請來大學裡知識產權律師談關於軟體在英國的知識產權問題,以及如何處理軟體的知識產權問題。

協作工具

為了讓上述教學內容的順利進行,我們將會引入一些工具,並訓練學生在他們的項目中使用這些工具。如下:

  • Google Drive:團隊與導師之間進行共享的工具,暫時存儲用於描述項目的文檔和圖表、需求收集、會議紀要以及項目時間跟蹤等信息。採取這樣一個方式來監控並提供直接反饋到每個團隊,是非常有效的。
  • Basecamp:同樣是用於分享文檔,在隨後的課程中,我們可能會考慮用它取代 Google Drive。
  • BUG 報告工具,如 Mantis:只能讓有限的用戶免費提交 BUG。稍後我們提到的 Git 可以讓小組內的所有人員用做 BUG 提交。
  • 遠程視頻會議工具:在人員不在校內,甚至去了其他城市的情況下使用。學生們可以定期通過 Skype 來交流並記錄會議內容或則進行錄音作為今後其他用處。
  • 同時,學生們的項目中還會用到大量的開源工具包。他們可以根據自己小組的項目需求來選擇自己使用的工具包和編程語言。唯一的條件是,這些項目必須開源,最後成果可以安裝到大學裡的實驗室,並且大多的研究人員都非常支持這個條件。
  • 最後,所有團隊必須向客戶交付他們的項目,包括完整的可以工作的軟體版本、文檔和他們自己選擇的開放源碼許可。大多數的團隊選擇了 GPLv3 許可證。

技巧和經驗教訓

在最後,這一年過的很愉快,並且所有學生的項目都做的非常棒。這裡有一些我學到的經驗教訓,可能有助於提高明年的課程質量:

  1. 提供各種各樣有趣的選擇項目給學生選擇。比如說,遊戲開發或者移動應用開發以及完成各種目標的項目等。建立普通的資料庫系統已經不能提起學生的興趣了,而參與到有趣的項目中去,學生本身就是自學者,同時可以幫助解決小組成員和小組之間的常見問題。再通過一個消息列表,學生們發表他們在測試中遇到的任何問題,以尋求其他人的幫助建議。然而,這種方法有一個缺點。外部考官建議我們使用統一種類型的項目和統一的編程語言以幫助縮小對學生的評估標準。
  2. 定期給學生在每一個階段的表現進行反饋。比方說,可以在和各個小組開指導會議的時候,或者每個階段進行反饋,以幫助他們在接下來的工作中自我改進。
  3. 學生更加願意與校外的客戶一起協作。他們期待著與外部公司代表或校外人員協作,不過是為了獲得新體驗而已。與導師進行交流時,他們都能夠表現得很專業,這樣使得老師非常放心。
  4. 很多團隊版將開發單元測試的部分放到項目結束之後,從極限編程方法的角度來說,這是一個嚴重的禁忌。也許測試應包括在不同階段的評估中,來提醒他們需要並行開展軟體開發和單元測試。
  5. 在這個班的 80 個人裡邊,僅有 4 個女生,每個女生都分在不同的小組裡邊。我觀察到,男生們總是充分準備好來承擔起領隊角色,並將最有趣的代碼部分留給他們自己來編寫,女生則多大遵循安排或者是編寫文檔。出於某種原因,女生選擇不出頭,即使在女性輔導員鼓勵下,她們也不願編寫代碼。這仍然是一個需要解決的主要問題。
  6. 允許不同風格項目文檔,比方說,UML 圖表、狀態圖或其他形式的。讓學生學習這些並與其他課程融匯貫通來提高他們的學習經驗。
  7. 學生裡邊,有些是很好的開發人員,有些做商務計算的則沒有多少編程經驗。我們要鼓勵團隊共同努力,避免開發人員做得比那些只做會議記錄或文檔的其他成員更好的錯誤認知。我們常在輔導課程中鼓勵角色轉換,讓每個人都有機會學習如何編程。
  8. 小組與導師每周見面溝通是非常重要的,可以有效監督各個小組進展情況,還可以了解是誰做了大部分工作。通常,沒來參加會議的小組成員基本就是沒有參與到他們的團隊工作中去的,並且通過其他成員所提交的工作報告也可以確定哪些人不活躍。
  9. 我們鼓勵學生們把許可證附加到項目中去,使用外部庫以及和客戶協作的時候要表明確切知識產權問題。 這樣可讓打破陳規,開拓思維,並了解真實的軟體交付問題。
  10. 給學生們自己選擇所用技術的空間。
  11. 助教是關鍵。同時管理 80 個學生顯然很有難度,特別是需要對他們進行評估的那幾周。明年我一定會找個助教來幫我一起管理各個小組。
  12. 實驗室的技術支持是非常重要的。大學裡的技術支持人員對於本課程是非常贊同的。他們正在考慮明年將虛擬機分配給每個團隊,這樣沒個團隊可以根據需要自行在虛擬機中安裝任何軟體。
  13. 團隊合作,相互幫助。大多數團隊自然而然的支持其他團隊成員,同時指導員在中間也幫助了不少。
  14. 來自其他同事的幫助會錦上添花。作為一名新的大學導師,我需要從經驗中學習,如果我想了解如何管理某些學生和團隊,或者對如何讓學生適應課程感到困惑時,我會通過多個方面來尋求建議。來自資深同事的支持對我來說是一種極大的鼓勵。

最後,對於作為導師的我以及所有的學生來說,這都是個有趣的課程。在學習目標和傳統評分方案上還有有一些問題需解決,以減少教師的工作量。明年,我計劃會保留這種教學模式,並希望能夠提出更好的評分方案以及引入更多的軟體來幫助監督項目和控制代碼版本。

via: http://opensource.com/education/15/9/teaching-open-source-development-undergraduates

作者:Mariam Kiran 譯者:GHLandy 校對:Caroline

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國