都說去美國讀研壓力大,很多學(xué)生凌晨兩三點還在完成老師布置的作業(yè),非常辛苦,而去美國大學(xué)讀計算機的同學(xué)非常之多,下面我們一起來看看網(wǎng)友在美國讀研期間的一些計算機課程作業(yè),頗有些值得學(xué)習(xí)和借鑒的地方。
1.面向?qū)ο笳n程作業(yè),通過完整項目學(xué)習(xí)應(yīng)用面向?qū)ο蠛驮O(shè)計模式
第一學(xué)期有門課叫《Object-OrientedSoftware Development》,主要是講面向?qū)ο蠛驮O(shè)計模式,為了幫助同學(xué)們更好的理解面向?qū)ο蠛驮O(shè)計模式,老師精心設(shè)計了一個股票交易的系統(tǒng),用面向?qū)ο笏枷雭碓O(shè)計實現(xiàn),并且應(yīng)用像Factory、Flyweight、DataTransfer Object、Singleton、Observer等設(shè)計模式。當(dāng)然如果你以為老師只是一個簡單的需求,就指望學(xué)生們能設(shè)計出一個很好的架構(gòu)并且還能應(yīng)用各個設(shè)計模式,你就太高估學(xué)生們的水平了。考慮到同學(xué)們的水平參次不齊,所以老師采取了一些措施來保證最終作業(yè)質(zhì)量:
將學(xué)生分組,3個人一組,水平高的帶著水平低的
將作業(yè)分成4期,以保證每個階段有檢查點,不至于到期末突擊還完不成任務(wù)。
提供詳細(xì)設(shè)計文檔,細(xì)致到接口、類和方法,同學(xué)們只要按照說明實現(xiàn)方法即可,如下圖所示:
既然分成了四個階段來完成,而且每個階段都需要依賴前一個階段的結(jié)果,那么怎么保證每個階段的結(jié)果正確呢?老師幫助寫了很多單元測試代碼,要確認(rèn)代碼沒有問題,先保證單元測試都能測試通過。
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");... ...
這樣一個學(xué)期下來,一個股票交易系統(tǒng)就算是做好了,最終做出來效果還是挺不錯的。
另外,為了避免有些同學(xué)編程能力不足,或者前期發(fā)揮不好,老師還提供了額外的附加作業(yè),這些作業(yè)可以提供附加分?jǐn)?shù),這樣努力一點也能有個不錯的分?jǐn)?shù)。
2程序語言概念作業(yè),通過Git提交作業(yè),詳細(xì)的單元測試
這學(xué)期選了一門課《PROGRAMLANGUAGE CONCEPTS》,講各種程序語言概念的,編程語言以Scala為主,作業(yè)也是Scala語言,這門作業(yè)有幾點設(shè)計的蠻好:
統(tǒng)一使用git提交代碼,代碼托管在 Bitbucket 上面,開學(xué)初老師就讓每個同學(xué)注冊了一個Bitbucket賬號,然后給同學(xué)們初始化好作業(yè)相關(guān)的Repository,后面的作業(yè)都通過BitBucket來提交
每道題提供了詳細(xì)的注釋說明,什么該用什么不該用都寫的很清楚
提供完整單元測試代碼供測試。為了確保程序正確,老師針對每個方法寫了很多單元測試代碼,基本上單元測試能通過就表示程序沒什么問題。
每節(jié)課開始前點評講解上一次的作業(yè)。實際上能這么做的老師很少,但是對學(xué)生來講,及時的反饋和點評上一次的作業(yè)非常有幫助,這樣可以知道標(biāo)準(zhǔn)的做法是什么,自己為什么會錯。
3.iOS移動App開發(fā),與時俱進,涵蓋各個知識點,考試是自主開發(fā)一個完整的App
這學(xué)期還選了一門iOS的課程,作為一個已經(jīng)有多年iOS開發(fā)經(jīng)驗的人來說,這門課對我沒什么難度,從老師的課程內(nèi)容和作業(yè)設(shè)置來看,老師對iOS和swift語言的發(fā)展跟進非常及時,所有的內(nèi)容都基于最新的iOS 9和Swift2.0展開,作業(yè)設(shè)置也比較合理。從簡單的HelloWorld到稍微復(fù)雜一點的計算器,再到復(fù)雜的TableView,最后考試是自主開發(fā)一個完整的App,綜合運用前面所學(xué)的知識。
每一次作業(yè)老師的要求都很明確,包括:
·截止日期和提交注意事項
·作業(yè)的目標(biāo)
·詳細(xì)的需求說明
·難點提示
在作業(yè)的設(shè)計上,比較注意難易度的梯度,前后作業(yè)的關(guān)系,一學(xué)期的作業(yè)安排如下:
Hello World項目,沒什么難度,只要輸出一個HelloWorld即可,重點是搭建iOS開發(fā)所需要的環(huán)境
使用Playground寫幾個簡單的Swift算法,熟悉Swift語言
實現(xiàn)一個簡易的計算器,只要求實現(xiàn)加減法,進一步了解Swift語言,學(xué)會查文檔,使用基本控件
簡易電視遙控器界面,相對復(fù)雜的界面,需要和數(shù)據(jù)進行綁定
購物清單,學(xué)習(xí)文本輸入框的使用
基于第四次作業(yè)升級,實現(xiàn)DVR播放器界面,還要能在兩個界面之間切換。主要是熟悉界面動畫,應(yīng)用對話框
實現(xiàn)對遙控器數(shù)據(jù)的配置,同時整合電視遙控器和DVR遙控器。熟悉UITabController的使用,以及多界面之間的數(shù)據(jù)共享
實現(xiàn)一個列表詳情的App,應(yīng)用動態(tài)列表和導(dǎo)航
大作業(yè),等于期末考試,自主命題,但是要求應(yīng)用到所學(xué)的知識。
如果要對這些作業(yè)做個簡單的總結(jié),我覺得主要還是在以下幾個方面:
1要求明確,目標(biāo)清晰
以iOS作業(yè)為例,每次作業(yè)都會清楚的說明提交的要求,作業(yè)的目標(biāo),詳細(xì)的需求,還有難點的提示。
2難度適中
比如面向?qū)ο笞鳂I(yè),雖然是一個很復(fù)雜的系統(tǒng),但是通過組隊和詳細(xì)設(shè)計文檔,還是能保證同學(xué)們一起完成這些項目。像iOS的期末大作業(yè),也可以讓能力比較強的同學(xué)有發(fā)揮的機會。
3及時反饋
有些作業(yè),老師會提供單元測試代碼,我覺得這是一個非常好的反饋方式,通過單元測試,同學(xué)們可以養(yǎng)成良好的喜歡,另外也不至于寫出來的代碼有太大偏差。另外像程序語言概念這門課老師,每節(jié)課都會講解點評上一堂課的作業(yè),這樣可以及時的直到問題所在,及時改正。
4嚴(yán)格要求
在美國,對于抄襲是0容忍的,經(jīng)常能聽到有同學(xué)作弊被開除的新聞,所以基本上大家都不會有這樣的想法。另外對于規(guī)定好的截止日期,如果沒有按時交,當(dāng)次作業(yè)的分?jǐn)?shù)就會是0分。
同時,有些課程的老師還會提供一些附加題,讓犯了錯誤的同學(xué)也有彌補的機會。