2016-2017-2 《Java程式設計》預備作業2總結
古希臘學者普羅塔戈說過:「頭腦不是一個要被填滿的容器,而是一束需要被點燃的火把。」
在對計算機系的學生情況的調查中,我說:
最近幾年,我有一個深刻的體會:了解學生是上好課的一個基礎。如果老師不了解學生的基礎,每周的學習情況,學習狀态,學習效果,那麼,不少同學從第三周就開始跟不上學習進度了,然後就放棄學習了,等着期末背背就過關了。這樣四年的學習效果就像大學生上課為什麼一定要認真聽講?所說的 有很多人上完了大學,思考方式還是那種「原生态」的模式:
所謂的原生态就沒有經過系統刻意地訓練,沒有經過斧正,而是任由随機事件随機沖擊産生随機結果的狀态。如果你從大學畢業的時候,你的大腦裡沒有留下任何你的專業領域帶給你的精神、信念、理論和體系,隻是比走進大學的時候老了四歲,那你的思考方式很可能就是原生态的。
與個别老師憑感覺說「我們的學生一年不如一年,或某屆學學生不行」不同,我收集不少教學資料,我的結論是:我們學生的素質是逐年提高的。從2013年起,資料說明,上我課的學生總體上一屆比一屆學生強,教學效果一年比一年好。
說我們的學生素質高,一方面是我們的學生的入學成績總體一年比一年高,除了上課,其他的就隻能從一些學科競賽,運動會,辯論賽,四大歌手,畢業晚會上零星的感受到部分同學的優秀。
為下學期《Java程式設計》課程做準備,我設計了三次預備作業來了解學生,督促學生:
- 預備作業01:你期望的師生關系是什麼?: 讓同學們了解「Trainer/Trainee」是最好的師生關系,讓同學們對即将到來的翻轉課堂有個心理準備,讓同學們對即将到來學習任務,學習壓力有個心理準備,副作用是讓同學們學會了Markdown。
- 預備作業02 : 體會做中學(Learning By Doing):讓同學們了解「做中學(Learing By Doing)」的學習方法與刻意訓練在技能擷取中的重要性,進一步了解有學習壓力的必要性,副作用是讓同學們展示自己,老師了解學生,同學們之間加深交流了解。
- 預備作業03:課程基礎:利用搜商,打下課程的Linux基礎,初步體會什麼叫學習上的舉一反三,融會貫通。老師教十個你會六個就及格了?不,應該是老師教十個,你會一百個個乃至更多,至少具備這樣的潛能。
預備作業02 : 體會做中學(Learning By Doing)的内容如下圖所示:
這周的學生作業,福州大學的張棟老師(部落格)對作業評論說:
婁老師這個部落格作業的題目,我覺得出的真心好。一般我們都是在課程開篇作業:「對課程了解多少,對課堂有什麼期待。」 學生沒上過課,也很難說出有什麼了解和期待,似是而非的應付了。而且是以課程為中心的視角。婁老師這個題目,以學生為中心的視角,開篇作業應該是學生展示自己,老師了解學生的過程和目的。完全活躍和打開了學生的心扉,認識了不一樣的學生和不一樣的武藝。還蘊含了 增強學生自己體會能力之不易的意識。 之前就默默想引用到 下學期課程在寒假裡的開篇作業了。
JUSTPUB的周筠老師(知乎,微網誌,豆瓣)說:
我看了你的學生的多篇部落格,被這麼富有啟發性的問題引出的自述吸引了,真棒!
微軟的鄒欣老師(部落格,微網誌,豆瓣)建議說:
标準如果稍微低點,「超過60%的人」,可能就會有更多的學生敢于表達自己的優點了...
即使這麼高的标準,結果都令我大出意外。以超過周圍90%的人為标準,信安系15級的同學們各種了不得,各種高手湧現:
- 145209: 系四大歌手冠軍
- 155201: 多才多藝
- 155202:踢毽子
- 155205:多才多藝
- 155207:鋼琴
- 155208:乒乓球
- 155210:遊戲,五子栱
- 155211:滑雪,古筝
- 155212:學習能力
- 155213:雙截棍
- 155214:足球
- 155215:演講與辯論
- 155216:彈跳的爆發力
- 155219:琵琶
- 155220:乒乓球
- 155222:足球
- 155223:羽毛球
- 155224:羽毛球,刻章
- 155225:書法
- 155226:唱歌,軟體使用
- 155227:轉筆
- 155228:長跑,多才多藝
- 155229:舞蹈,鋼琴
- 155230:遊戲
- 155231:葫蘆絲
- 155232:跑步
- 155233:動手實踐能力
- 155236: 遊戲
- 155237: 多才多藝
- 155238:羽毛球,書法,遊戲
- 155239:音樂,吉它
- 155301:乒乓球,遊戲
- 155302:心算能力
- 155303:二胡
- 155304:排球
- 155305:鋼琴
- 155306:主持
- 155307:英語,遊戲
- 155308:水彩畫,體育運動
- 155309:球類,手遊
- 155310:素描
- 155311:羽毛球
- 155312:遊泳
- 155313:鋼琴
- 155315:英語
- 155316:柔韌性
- 155317:中醫
- 155318:了解力
- 155320:葫蘆絲
- 155321:長笛,英語聽力
- 155322:太極,多才多藝
- 155323:遊戲
- 155324:遊戲
- 155325:繪畫
- 155326:繪畫
- 155327:繪畫
- 155328:電子琴,英語
- 155329:銷售
- 155330:攝影
- 155331:電子競技
- 155332:書法
- 155333:曆史
- 155335:方向感
- 155336:足球
- 155337:曳步舞
- 155338:鋼琴
同學們分享了他們擷取這些技能的學習經驗:
- 堅持,毅力
- 壓力競争促進學習
- 主動思考,多方比對驗證
- 興趣
- 刻意練習
- 做中學
- 要總結
- 回報
- 量變引起質變
- 嚴師出高徒
- ......
這一次我系統了解到了信安系同學的優秀,感覺不努力教好他們,任由他們上完了大學,思考方式還是原生态模式,作為老師真是對不起良心。同學們掌握了做好一件事情的正确方法,學好專業課中的程式設計不是一件難事。
我相信這次作業不但讓老師了解了學生,也讓同學們有了更深入的了解。自我感覺良好一下,我認為老師當教練是實作「以學生為主體,以老師為主導」的最好的方法,這次作業是一個很好的範例。
我們學校要建設「特色突出,水準一流」的學校,我們就要教出「特色突出,水準一流」的學生。這幾年我一直身體力行實踐「做中學」,在以下幾個方面進行刻意訓練:
- 五筆:要求學生會五筆,老師先學會
- 減肥:五個月減肥30多斤
- 乒乓:刻意訓練在技能擷取上的重要性
- 背單詞:學好英語,多一個世界
同學們通過自己的技能獲與老師有了共鳴,那麼問題來了,《Java程式設計》要怎麼學?一定了解程式設計是用來解決實際問題的,可以從解決小問題開始,不停的用,最後好成績隻是個副作用。
鄒欣老師(部落格,微網誌,豆瓣)在軟體開發不是閉卷考試一文中說:
實際的項目中的問題,都是有解的,而且大多數是多項式時間内有解。
我們在現實項目中的 「解題能力」,取決于下面這些因素:
- 對問題的了解
- 對技術的了解
- 估計任務的能力
- 溝通和管理風險的能力
- 拒絕的能力
我希望通過我們課程的訓練讓大多同學掌握Java技術,學會了解問題,通過PSP方法掌握估計任務的技能,通過團隊增強溝通和管理風險的能力以及學會拒絕。
鄒欣老師(部落格,微網誌,豆瓣)在技能的反面 - 魔方和模仿中說:
Bill 說技能的反面是 ”Problem Solving” – “解決問題”, 這個聽起來有點繞, 我們看看IT 人士熟悉的一個例子吧。 一個IT 專業的大學生來面試, 履歷上寫 “技能: 精通 Visual Studio C# 程式設計”。 于是面試官請他實際用VS IDE 寫一段程式 (冒泡排序)。 一個 “不精通”的面試者的程式設計過程實際上就是一個“解決問題”的過程。 例如:
- 嗯, 怎麼開始一個C# 的指令行程式呢?
- 定義數組是怎麼弄的? 是 “int [] arr” 還是 “int arr[]”, 還是 ArrayList, 還是 Array 。 哦, 我平時都是上網查的. 哦, 我不知道還有 MSDN 網站。
- 嗯, 為什麼編譯沒過呢, 哦, 這裡少一個分号。
- 嗯, 怎麼設斷點? 怎麼定義指令行參數? 額, 我要查一查…
你發現他把時間都花在「解決 (低層次) 問題」上了, 你想考察的「算法技能」、 「C# 程式設計技能」 都無暇顧及。注意,這是在他認為非常精通的程式設計工具和程式設計語言中出現這樣的問題。 你要這樣的員工麼?
通過身體力行實踐「做中學」,我深刻了解了「刻意訓練」在技能擷取中的作用,同學們的技能擷取經驗也展現了「刻意訓練」。
鄒欣老師(部落格,微網誌,豆瓣)下面的一句話,有沒有「刻意訓練」的經曆的人體會是不一樣的:
那怎麼提高技能呢? 答案很簡單, 通過不斷的練習, 把那些低層次的問題都解決了, 變成不用經過大腦的自動操作, 然後才有時間和腦力來解決較高層次的問題。

對于程式設計技能,我對我的前驅課程《程式設計基礎(C語言程式設計)》做了個調查。我不得不說,非常感謝徐小青老師給我打下了良好的基礎。我們的同學大多在《程式設計基礎(C語言程式設計)》中有了4000行到5000行的代碼經曆。我想在《Java程式設計》中再有5000行以上的刻意訓練,實踐提高,解決同學們在資訊安全專業的學習中程式設計能力不達标的問題。這樣資訊安全專業的學習才有可能做到時水準一流。
當然,我提了幾個《程式設計基礎(C語言程式設計)》學習中我認為必須掌握但同學們覺得較難的問題:
- 學過了C語言,你分的清數組指針,指針數組;函數指針,指針函數這些概念嗎?
了解複雜聲明非常重要,數組指針,指針數組;函數指針,指針函數的概念是基礎,其他的複雜聲明都是這四個的組合。後面的課程中有這樣的聲明:
void (signal (int signo, void (func)(int))) (int);
signal是個什麼東東?以前我在課上提問,能正确回答的幾乎沒有。
考研中也常有這樣的考題:
((x[4])())[4]這個聲明中的x是什麼東東?
- 學過了C語言,你明白檔案和流的差別和聯系嗎?如何區分文本檔案和二進制檔案?如何程式設計操作這兩種檔案?
int main(){
printf("Hello World");
while(1);
}
不了解流與檔案的差別,不知道緩沖區,這個代碼的結果大多學過C的回答不對。我們後續專業課程需要的基礎沒打好。通過fopen/fread/fwrite/fclose掌握C程式設計中「初始化,完成業務,清理工作」的模式非常重要,文本檔案和二進制檔案的差別以及如何用I/O函數讀取是最常用的,我監考過李曉東老師的C語言課程,有這方面的考題,我相信老師是講過的,學生的基礎還是不夠好,後面我會寫一篇C語言與Java對檔案處理的對比的部落格對學生指導。
- 學過了C語言,你知道什麼叫面向過程程式設計嗎?它解決問題的方法是什麼?
- 在C語言裡面,什麼是子產品?你寫過多個源檔案的程式嗎?
- 學過了C語言,你知道什麼是「高内聚,低耦合」嗎?這個原則如何應用到高品質程式設計中?
C語言解決問題的基本方法大多同學沒有掌握,比較主動同學搜尋一下,但了解不深。同學們幾乎所有的代碼都在一個main函數中,不知道一個XXX.c就是一個子產品,沒有多子產品程式設計的經曆,更不用什麼「高内聚,低耦合」以及如何實作了。我建議同學們抽空讀讀王垠的程式設計的智慧。感謝迅雷的範飛龍博士(部落格,微網誌)的推薦和對我們學生的悉心指導。
- 學過了C語言,你如何把數組A的内容複制到數組B中?如何查找整數數組A中有沒有數字5?如何對整數數組A進行排序(從小到大,從大到小)?寫出相應的程式。
學過Java的同學都知道,Java水準的高低和對Java API的熟悉和應用能力緊密相關,在《Java程式設計》課程中我專門寫了學習指導部落格積極主動敲代碼,使用Junit學習Java程式設計。
C語言是一個比較簡單的程式設計語言,其标準庫函數我全部測試過,掌握了用法,這是我學習的衆多程式設計語言中唯一的。《Java程式設計》課程上了十多年,Java也用了十多年,不少API我都沒用過。
「不要重複造輪子 Stop Trying to Reinvent the Wheel」可能是每個程式員入行被告知的第一條準則。這八十多個學生隻有一個在拷貝數組是調用了一下strcpy。可以用qsort排序,用 bsearch查找,大多同學是不知道的,告訴他們有這些函數,函數的聲明不少是看不懂的,更不用說是應用了。
- 你知道什麼是斷點嗎?給出自己調試程式的例子。
每年畢業設計驗收,大創項目驗收都有學生找我,不少問題單步跟蹤一下就出來了。調試器不光用來除錯,還是很好的學習工具,我在課上寫過一篇代碼驅動的程式設計學習來教同學們如何用gdb來學C語言,基本的調試技能半小時就能學會,參考一下我編寫的Linux下C程式設計實驗指導, 舉一反三在四年的學習中都受益,學會對自己Debug将終身受益。
為了考查學生的實際情況,我留了這個作業:
- 寫一個程式,統計自己C語言共寫了多少行代碼。
統計代碼行數,行數不包括空行 (一行中沒有字元或隻有tab,空格), 注釋行 (沒有代碼, 隻有注釋),不少同學說代碼都丢了,那麼可以試試統計這裡的單檔案c c++庫
我們也要培養專門人才,我留了這個作業:
- 畢業後大多數人從事的工作的要求是“提筆能寫,開口能說,問策能對,遇事能辦”,非常重要的技能是公文寫作能力,你覺得自己寫作能力如何?要怎麼提高?
公文寫作的重要性,同學們也許參加工作後才能體會,畢業生調研,不少人後悔沒選姬瑞環老師的課,說在學校聽說姬老師要求嚴格。很多人畢業了才能感受到要求嚴格的老師才是好老師。
寫作技能也要訓練,我們課上要求每周至少交一篇學習部落格,如果能把作業按公文的要求來做,我相信同學們畢業時收獲會不一般。
歡迎關注“rocedu”微信公衆号(手機上長按二維碼)
做中教,做中學,實踐中共同進步!
- 原文位址:http://www.cnblogs.com/rocedu/p/6228084.html
- 推薦網站:部落格園、新浪微網誌、扇貝背單詞、DKY背單詞小組、有道雲筆記、豆瓣讀書
- 版權聲明:自由轉載-非商用-非衍生-保持署名| Creative Commons BY-NC-ND 3.0
如果你覺得本文對你有幫助,請點一下左下角的“好文要頂”和“收藏該文”