都說去美國讀研壓力大,很多學生凌晨兩三點還在完成老師布置的作業,非常辛苦,而去美國大學讀計算機的同學非常之多,下面我們一起來看看網友在美國讀研期間的一些計算機課程作業,頗有些值得學習和借鑒的地方。
1.面向對象課程作業,通過完整項目學習應用面向對象和設計模式
第一學期有門課叫《Object-OrientedSoftware Development》,主要是講面向對象和設計模式,為了幫助同學們更好的理解面向對象和設計模式,老師精心設計了一個股票交易的系統,用面向對象思想來設計實現,并且應用像Factory、Flyweight、DataTransfer Object、Singleton、Observer等設計模式。當然如果你以為老師只是一個簡單的需求,就指望學生們能設計出一個很好的架構并且還能應用各個設計模式,你就太高估學生們的水平了。考慮到同學們的水平參次不齊,所以老師采取了一些措施來保證最終作業質量:
將學生分組,3個人一組,水平高的帶著水平低的
將作業分成4期,以保證每個階段有檢查點,不至于到期末突擊還完不成任務。
提供詳細設計文檔,細致到接口、類和方法,同學們只要按照說明實現方法即可,如下圖所示:
既然分成了四個階段來完成,而且每個階段都需要依賴前一個階段的結果,那么怎么保證每個階段的結果正確呢?老師幫助寫了很多單元測試代碼,要確認代碼沒有問題,先保證單元測試都能測試通過。
Tradable tradable1 =null;
Quote quote1 = null;
System.out.println("1)Create and print the content of a valid Order using Tradable reference:");
try {
tradable1 = newOrder("USER1", "GE",PriceFactory.makeLimitPrice("$21.59"), 250, "BUY");
System.out.println("Tradable'stoString: " + tradable1 + "\n");
} catch (Exception e){
System.out.println("Anunexpected exception occurred: " + e.getMessage());
e.printStackTrace();
}
System.out.println("2)Create and print the content of a TradableDTO:");
TradableDTO tDTO =new TradableDTO(tradable1.getProduct(), tradable1.getPrice(),tradable1.getOriginalVolume(), tradable1.getRemainingVolume(),
tradable1.getCancelledVolume(),tradable1.getUser(), tradable1.getSide(), tradable1.isQuote(),tradable1.getId());
System.out.println("TradableDTO'stoString: " + tDTO + "\n");... ...
這樣一個學期下來,一個股票交易系統就算是做好了,最終做出來效果還是挺不錯的。
另外,為了避免有些同學編程能力不足,或者前期發揮不好,老師還提供了額外的附加作業,這些作業可以提供附加分數,這樣努力一點也能有個不錯的分數。
2程序語言概念作業,通過Git提交作業,詳細的單元測試
這學期選了一門課《PROGRAMLANGUAGE CONCEPTS》,講各種程序語言概念的,編程語言以Scala為主,作業也是Scala語言,這門作業有幾點設計的蠻好:
統一使用git提交代碼,代碼托管在 Bitbucket 上面,開學初老師就讓每個同學注冊了一個Bitbucket賬號,然后給同學們初始化好作業相關的Repository,后面的作業都通過BitBucket來提交
每道題提供了詳細的注釋說明,什么該用什么不該用都寫的很清楚
提供完整單元測試代碼供測試。為了確保程序正確,老師針對每個方法寫了很多單元測試代碼,基本上單元測試能通過就表示程序沒什么問題。
每節課開始前點評講解上一次的作業。實際上能這么做的老師很少,但是對學生來講,及時的反饋和點評上一次的作業非常有幫助,這樣可以知道標準的做法是什么,自己為什么會錯。
3.iOS移動App開發,與時俱進,涵蓋各個知識點,考試是自主開發一個完整的App
這學期還選了一門iOS的課程,作為一個已經有多年iOS開發經驗的人來說,這門課對我沒什么難度,從老師的課程內容和作業設置來看,老師對iOS和swift語言的發展跟進非常及時,所有的內容都基于最新的iOS 9和Swift2.0展開,作業設置也比較合理。從簡單的HelloWorld到稍微復雜一點的計算器,再到復雜的TableView,最后考試是自主開發一個完整的App,綜合運用前面所學的知識。
每一次作業老師的要求都很明確,包括:
·截止日期和提交注意事項
·作業的目標
·詳細的需求說明
·難點提示
在作業的設計上,比較注意難易度的梯度,前后作業的關系,一學期的作業安排如下:
Hello World項目,沒什么難度,只要輸出一個HelloWorld即可,重點是搭建iOS開發所需要的環境
使用Playground寫幾個簡單的Swift算法,熟悉Swift語言
實現一個簡易的計算器,只要求實現加減法,進一步了解Swift語言,學會查文檔,使用基本控件
簡易電視遙控器界面,相對復雜的界面,需要和數據進行綁定
購物清單,學習文本輸入框的使用
基于第四次作業升級,實現DVR播放器界面,還要能在兩個界面之間切換。主要是熟悉界面動畫,應用對話框
實現對遙控器數據的配置,同時整合電視遙控器和DVR遙控器。熟悉UITabController的使用,以及多界面之間的數據共享
實現一個列表詳情的App,應用動態列表和導航
大作業,等于期末考試,自主命題,但是要求應用到所學的知識。
如果要對這些作業做個簡單的總結,我覺得主要還是在以下幾個方面:
1要求明確,目標清晰
以iOS作業為例,每次作業都會清楚的說明提交的要求,作業的目標,詳細的需求,還有難點的提示。
2難度適中
比如面向對象作業,雖然是一個很復雜的系統,但是通過組隊和詳細設計文檔,還是能保證同學們一起完成這些項目。像iOS的期末大作業,也可以讓能力比較強的同學有發揮的機會。
3及時反饋
有些作業,老師會提供單元測試代碼,我覺得這是一個非常好的反饋方式,通過單元測試,同學們可以養成良好的喜歡,另外也不至于寫出來的代碼有太大偏差。另外像程序語言概念這門課老師,每節課都會講解點評上一堂課的作業,這樣可以及時的直到問題所在,及時改正。
4嚴格要求
在美國,對于抄襲是0容忍的,經常能聽到有同學作弊被開除的新聞,所以基本上大家都不會有這樣的想法。另外對于規定好的截止日期,如果沒有按時交,當次作業的分數就會是0分。
同時,有些課程的老師還會提供一些附加題,讓犯了錯誤的同學也有彌補的機會。