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