2017-2018-1 《程序設計與數據結構》課程總結
有關課程的一些信息參考2016-2017-2 《程序設計與數據結構》課程總結.
為了這學期的課程,我記錄了選教材的過程,參考兩個月選一本理想教材,上文提到:
學習數據結構的概念不難,難點是:
如何實現從數據結構概念到程序設計實現的跨越(即如何實現一個數據結構)
如何實現從實際應用到數據結構抽象的跨越(即如何利用數據結構解決實際問題)
《程序設計與數據結構》並不是一學期講Java,一學期講數據結構這么簡單,而是把編程和數據結構有機的結合起來,上學期重點解決“如何實現從實際應用到數據結構抽象的跨越(即如何利用數據結構解決實際問題)”的問題,這學期重點解決“如何實現從數據結構概念到程序設計實現的跨越(即如何實現一個數據結構)”的問題。 這種方法是 C+數據結構不好解決的,我相信使用C++,Java,Python等有類STL庫、Collection API的語言講授數據結構會更好。
翻轉課堂
翻轉課堂采用優秀的SPOC平台藍墨雲班課和博客園的班級教育應用,我們也使用博客園課程管理,兼顧封閉與開放。

翻轉課堂不是老師讓學生自學就完了,學生要自學,老師也要做大量的工作,付出巨大的努力。
首先要安排好每周的學習內容,我們這學期的教學進程參見:2017-2018-1學期《程序設計與數據結構》教學進程:

每周都給出明確的學習目標,詳細的學習資源和有最后期限的學習任務:

雖然有些死板,但同學們缺的就是這些死板嚴格的要求,要求不明確,學生根本無法享受「靈活」帶來的好處,不少人隨便糊弄一下就過去了,這么細致的要求,也還是有同學糊弄的。
我們的主要學習資源有教材,課程內容配套的微課。教材學習指導是同學們學習的重要指導,相當於傳統課堂要講授的內容,用好了能大大減少學習時間,提高學習效率。教材學習指導初期幾乎是一頁一頁的指導,詳細到每段代碼如何閱讀,取得了良好的指導效果:

這樣還不夠,學生學習過程中還是會有問題的,多年實踐證明微信群,QQ群不適合答疑:問答很快被沖掉,一個問題要回答多遍,問答無法積累。后來在博客園建立了課程答疑論壇進行答疑,承諾同學們有問題24小時內回復。

與以往答疑時間無人提問不同,從以老師教為主轉變為學生學為主后,在每周的學習過程中同學們總能提出一些問題,有問題才說明學了。我們的課程答疑論壇應用效率很高的一個證明是,開課期間在博客園的排名一直是數一數二的。博客園承諾同學們的問題24小時內解決。問題數量,質量有了大大的提高。但還是不夠及時,同學們之間的交流才是最及時的。藍墨雲班課解決了這個問題,老師要做的大多是給提問和解答的同學都加分就可以了,很少需要回答問題了,大大激發了同學們學習的積極性:

我認為以上措施解決了以往同學們學習中的各種障礙,只要想學習的同學,就沒有什么學習上的障礙了,剩下的是自己的學習態度和努力程度的問題了。
過程化考核對每周的教學效果進行檢測,老師可以根據成績和出錯多的題目對教學內容,教學重點進行調整。如果沒有100分的限制,這學期學得好的同學可以拿150分,學得差的就只能50-60分。我經常讓同學們體會「學過」和「學會」的差別,我們老師也要體會「教過」和「教會」的差別。翻轉課堂以前我特別不理解,上課強調了那么多遍的重點內容,甚至有些題目和答案都講了,考試為什么還有學生不會。過程化考試讓我了解到,由於基礎和態度問題,很多同學根本沒聽或聽不懂,所以學生的結論是老師沒教。過程化考試讓老師很早就知道學生有那些該掌握的知識沒有掌握,可以通過反復講解和反復考核來解決重點,難點的學習問題。
每周我們都有考核,檢測本周學習的效果,,這是學習中非常重要的反饋,我希望同學們能對照答案,找出不足,查漏補缺,一些重點內容和錯得多的題目會多次考核。實踐中發現有了答案還有不少人看不懂,后面的課上增加了錯題講解的環節。我還是認為這一定程度上反映了學生的學習動力不足和學習積極性不高的問題。
使用了藍墨雲班課,效果更好,可以實時反饋,了解學生的學習盲點,讓課上的講解更具針對性:


最終成績情況:本學期30名同學,4個100分,90分以上的3人,80-89分的7人,70-79分 的5人,60-69分的10人,不及格2人。平均分78分,基本符合正態分布。
每周的排行榜對同學們的學習促進作用還是很明顯的,排在前面有獎勵,排在后面的有督促。
這學期繼續游戲化,每周獎勵一下總分排第一的同學,本學期獎勵有圖書和程序員茶杯:


一年的課程還是引入了 《構建之法》的做法:結對學習、團隊項目,30個同學分為五個小組,設計一個Android游戲:

藍墨雲班課
有了藍墨雲班課這個SPOC平台,翻轉課堂的控制更加方便了,解決了多年的平台問題。不到一年經驗值就超過全國98.53%的老師。

這里有人體會:學習一項技能,做一些事情,想超過90%的人,稍微努力一下就可以鶴立雞群了,但是想超過99%的人,那是要付出巨大努力的。那些考100分的同學太了不起了!!
就本門課程而言,發布博客教程,視頻,作業等資源91個,開展課堂提問,課堂考核,實驗檢查,課堂實踐等學習活動73次,設計包含300多道試題的題庫(一年總計上千道題目了)。


教學周報可以清晰地看到每周在教學上做的工作,包括為學生提供線上學習的資源,為學生在雲班課上設計的課堂活動。
教學資源分析
翻轉課堂要給學生提供合適的線上學習資源,實現必要的課前預習,保證課前學習效果。

以前使用微信群,QQ群發送資源時,老師不知道學生看了沒有,現在有了詳細的數據,老師提供的學習資源還是有30%左右的學生沒好好看,其實上課遇到的很多問題在學習資源里都有了解答。

老師提供的微課資源就是等價於傳統課堂的上課講解。微課的內容含量是傳統課堂的三倍左右,同學們可以根據自己的情況跳着聽,完整聽,多次聽直到掌握,從而做到了因材施教。微課的一個要義是基礎好的可以少聽或不聽,基礎差的要多次聽,可惜的是事實是基本上是基礎差的沒有好好看視頻學習,反而抱怨上課老師不講教材內容。當然也存在打開視頻不看的鑽空子現象。

教學活動分析
課堂上的教學活動是我在教學中最為關注的部分,也是要課堂效果的關鍵點,在每節課前我都會通過藍墨雲班課進行活動設計,雲班課的各種活動組件都能很好地滿足我的活動設計要求,而且非常方便簡易,用手機開展活動的課堂效果也很好。

頭腦風暴活動讓全班同學都參與到開放性問題的思考回答,隨堂測試能馬上得到學生知識點學習情況的數據反饋,點名簽到節省了傳統點名的時間,討論答疑突破了時間空間的限制讓我和學生隨時隨地交流學習問題,搖一搖選人增加了課堂的趣味性......
頭腦風暴活動是我用的最多的活動,我用它來向全班同學提問,設置實驗的檢查點,提交課上實踐的截圖..., 這些頭腦風暴活動大大提高了學生的教學參與度。
教學活動的參與度都很高:

學情分析
在過程性考核中,經驗值的獲得方式,也可以從下圖中看出來,其中參與課堂活動是最為關鍵的,課堂上是沒有逃課現象的,學生也基本沒有時間去玩手機了,因為手機被用來參與我的課堂活動了。
從下圖可以分析出,大部分同學非常努力,入門的3位有兩位是助教。學習感覺任務重的是成績好的同學,大約1/4的同學下的功夫還不到。
對學習資源進行分類,分成必學,選學是非常有必要的,這樣會提高學習效率。

學習過程中可以隨時查看學生的學習狀態,比如這名同學比較不適應翻轉課堂,老師提供的學習資源資源一半沒有學習,視頻才看了3個,了解了這些情況,老師和班主任對其嚴格要求,在本人的努力下,最后也及格了。

同學們的反饋
藍墨雲班課上的答疑討論比較實用,對我的學習有促進,可以隨時提出或者解決大家的問題,有時候參考大家的問題去學習也是一種不錯的方式,同時也方便了老師管理學生和教學,可以及時地上傳一些視頻或文件供大家下載。當然,藍墨雲班課也是有缺陷的,比如說我要時時刻刻關注老師是否發布了新的學習任務,因為只有打開了藍墨雲班課才知道,所以在一段時間里,我看手機的頻率很高,然而有時只是頻繁地翻來翻去,感覺有些不適應。
這個APP是非常好非常實用的,尤其是對我們樣的課程來說,因為所有的作業或是什么都是在網上完成的,對於群體信息的溝通來說這是非常方便的,老師每周下放任務,指定時間然后我們按時完成,既保證了速度也保證了效率,可以繼續實行!
對學習有很大促進,拉近了師生的距離,能夠很方便的得到一些資源
在這個平台上學習資料更加集中,便於我們查找,而且學習經驗排名也能提高我們的學習積極性。建議在這個平台上上傳更多的學習資料和參考文獻,這樣也有助於我們學習。
藍墨雲班課對我的學習很有幫助,希望老師能夠多加利用,並且加入更多的學習資料
藍墨雲班課有它獨特的教學管理系統,操作方便,相比較於博客園,藍墨雲班課能夠上傳的資源類型更多,所以對我的學習有很大得到促進作用。希望以后的課程也能夠用藍墨雲班課作為教學的輔助軟件。
助教機制
計算機系非常重視課程改革,為我們這們課程配了助教王志強老師,我備課,設計安排教學進程和教學內容,設計試題,設計實驗,作業點評,答疑等工作,王志強老師負責了改卷,答疑,日常輔導等大量工作,為教學效果的提升付出了很多。
王志強老師點評學生的博客以及交流了300多次:

王志強老師對學生每周的作業都進行了總結,寫了不少教學博客:

感謝王老師!!
全面走向開放
這幾年,從封閉的有道雲協作 全面開放走向博客園,老師和同學們都經歷了不適應到習慣的過程,現在也都嘗到了開放的好處。
實驗樓課堂提供了學習環境,對學生的學習時間有統計,是個好工具。
學生實踐的代碼都在碼雲git@OSC托管。實踐情況也都是公開的。
即使使用了藍墨雲班課這個SPOC平台,作業的布置,學習指導,學習進程也都是在博客園公開后再引用。
公開也就意味着更公正!
Git與代碼托管
課程實踐性強,動手實踐就非常重要,雖然有「代碼驅動的程序設計學習」的這么詳細的學習指導。學生踏踏實實使用GDB進行反饋,加點代碼,改點代碼的還是不多,排名前三分之一的同學問題不大,后面的還是要加強控制,如果老師一個一個的檢查,花費時間會非常多,通過git log --pretty=format:"%h - %an, %ar : %s截圖的結果,和`wc -l 'find src -name *.c``代碼量統計截圖,可以自動化檢查學生的實踐情況,然后重點抽查。
通過git log --pretty=format:"%h - %an, %ar : %s的截圖,誰在什么時候提交了代碼清清楚楚。
通過`wc -l 'find src -name *.java``的截圖,一學期的代碼量明明白白。

這學期同學們有了3000至10000行的代碼訓練,大多數同學超過了5000行的目標,使用git的好處顯現。
可是這樣有的同學還是沒有達到掌握Java基本編程技巧,用來解決簡單問題的目標,原因同學們的總結說的好:
通過這一學期的學習真的不難看出代碼行數與編程水平真的有一定關系,但也存在bug,所謂學而不思與思而不學,我班馬平川同學的代碼行數是最少的,但他的編程能力是最強的,同理,代碼行數最多的同學編程能力也不是最好的,敲代碼固然重要,但編程過程中的學習和思考也是十分重要的,沒有總結反思,再多的代碼也是別人的,自己學不到什么。
刻意練習,積極思考做的還不夠!!
這學期在動手上加強了不少,但促進同學們深度學習的效果還不理想,這方面的努力永遠在路上!
微信公眾號
本學期更多的使用了教學微信公眾號「rocedu」,發布教學,讀書學習的相關信息,與同行,同學們有了更多的交流。
也歡迎大家關注交流(手機上可以長按下面的二維碼關注):

課程總結
學生課程總結說明同學們的收獲還是很大的:
- 20162330 2017-2018-1《程序設計與數據結構》課程總結是最認真的一篇總結了,有前言,目錄,老師的要求都有了,學習態度值得大家學習,注意刻意訓練,我想他日后可以學得更好,這學期他的寫作已經超我不少了,我就擔心他以后不繼續寫了,和他溝通一下,發現擔心不是多余的,送了一本書,他也想繼續努力寫下去:
轉眼間一年過去了,在這一年間《程序設計與數據結構》這門課帶給我們的有痛苦,也有歡樂,有疲憊,也有收獲。不論我們收獲了多少,我們都是在不斷嘗試,老師在不斷嘗試新的教學方法,我們也在嘗試着不斷接受。這個學期我們主要針對數據結構的內容進行學習。在結對互助的基礎上,還開設了團隊項目,雖然總體效果不太理想,但是不論怎樣我們嘗試了一次團隊合作,留下了較為深刻的印象。總之,作為信管專業的學生,能夠有幸接觸了解到一些軟件工程的相關內容,也算是一筆額外的財富吧
首先談談課程收獲,學到了數據結構的知識,也了解了一些數據結構在各個領域的運用。數據結構的代碼實現是個體力活,更是個腦力活,不論怎樣我也掌握了一部分。對於本學期講到的各種算法,二分查找和線性查找和一些基礎的排序算法算是比較熟悉了,團隊的合作項目讓我了解到一個軟件的發布流程原來這么麻煩,卻又這么充實。
其次說說其他方面的收獲,因為團隊博客有涉及到一些工具軟件的使用,我在使用一些工具時也收獲了一些經驗和使用技巧,在和團隊協作的過程中也有從團隊的其他成員那里學到一些優秀的品質。他們的那種做任何事都一鼓作氣的氛圍感染了我,也偶爾帶動着整個團隊,不論我們的項目做得怎么樣,我們都盡力了。並且我可以保證我們團隊是累積貢獻量和收獲量最多的團隊。
除此之外,我體驗了一年的“做中學”,在代碼上的感觸之前有提及, 泛型類-Bag 練習 這篇博客足以說明“做中學”的價值。在不斷查找資料的過程中,我的“搜商”也有提高。除了將一些 做的時間 運用在代碼上之外,我還將較多的時間運用在了博客上,為了使博客盡可能地呈現出精美的效果並且要與選擇的模板相映襯,每次有時間逛博客園時,我都會去額外地了解其他的一些語言(比較基礎),並做出各種嘗試,每次看別人的博客時,總是不忘看看排版格式。現在,我可以自己設計markdown三級標題的效果了。有的博客側邊欄也很豐富,我的側邊欄原來也挺豐富,現在覺得寫博客有時不應該太分心,所以只留下了一個,其他的都去掉了。
- 20162308馬平川同學方法得當,是學得相當明白的同學,基本能夠舉一反三了,代碼量並不多,有效代碼量應該是數一數二的了:
這個課程比較大的收獲是老師提供了很多方向,能夠讓我去接觸很多技術,這個是非常大的收獲。另外一個是對設計模式和OOP原則的講解,能夠初步地體會和理解大型軟件工程項目中的設計方法。
他的學習建議是非常有效的,大家應該多讀讀:
積極主動敲代碼。程序設計課如果連代碼都懶得敲,那這么課程就是紙上談兵,什么都學不會。積極主動的更進一步就是自我驅動地學習知識,因為程序設計課程的覆蓋面太廣,很多知識都是淺嘗輒止,可以選取課上感興趣的、沒聽明白的地方去深入。
遇到問題,先自己想辦法解決。可以去百度、查書等等,推薦看stackoverflow上其他優秀程序員的解決思路,或者用英文在這個平台上提問,找同學解決固然是一種方法,但是看看其他業界程序員的解決方案可能會給你提供更多思路。
充分利用Git工具。利用Git不止可以用於自己的項目的版本控制,也可以去看其他的優秀開源項目的代碼,去學習別人的編程思路。
最后一點,知易行難。很多人聽了很多道理,依然過不好這一生,上面三點建議,關鍵在於做的過程。
在上學期的課程總結中,我提到了自己比較遺憾學習中沒有做到積極主動敲代碼。這一學期,在自己比較主動的逼迫下,我覺得這個問題有所改善。第一學期覺得敲代碼是一件比較痛苦的事情,這學期慢慢感受到了其中的樂趣,特別是自己解決了一個問題以后,那種成就感很強烈。我們所用的教材上,每一章節的代碼比較詳細,例如很多排序算法都是已經有的,我們只要會用就可以了。雖然對我們學習的時候覺得很方便很輕松,但我覺得少了一部分思考的過程。到了后面圖的那一部分,代碼不再是完整的給出來,而是給了一部分思路讓自己寫,這個時候感覺很痛苦。所以教訓就是,書上的代碼不能一味的抄過來,而是要嘗試自己還原,這樣效果更好,能學習到的東西也更多
說實話,這學期收獲蠻大的,我能夠自己獨立編寫一些小程序,還自學了Android開發的基礎知識(作為團隊開發的副代碼手)。這學期在Java方面的投入是巨大的,收獲可以說是滿意的,效率相比上學期還是有很大提升,但總體還是不高。不過在大量的投入下效果還是不錯的,可以說是真正地是在認真搞學習。
希望結對學習這種方式繼續延續下去而不是結對編程,因為對於新人來說結對學習比直接進入結對編程要好得多,至少我是這么認為。結對編程太需要考慮結對對象的時間等各方面的需求,並且在提交代碼上有諸多不便。而結對學習則是兩人在學習方面的困惑共同解決共同提問,比較方便又有效率。
課程前幾周我和劉先潤的結對學習倒是很認真。在項目沖刺中,我們小組其實沖刺了十天,每天晚上我們四個人都很認真在一堆討論游戲代碼,游戲界面,BUG等。感覺還是很不錯的。
關於結對的建議:我覺得可以講一次課堂實踐用作結對編程,在課堂上結對的兩人用一台電腦編寫程序,同樣抽調部分同學的代碼做示例來做分析和講解。(這個想想如何做)
課程結束了大家都嘆了口氣說“噩夢終於結束了”,然而我並沒有這種感覺,並不是因為噩夢沒有結束,而是感覺噩夢並沒有到來過,雖然每周的博客寫得很難受,每次的實踐感覺很難,但是每次完成了它們所帶來的驚喜感是無可替代的,在這門課程中好像一切都很自然, 什么時候學什么,什么時候做什么,不知道接下來沒有了課程的約束我們還會不會這么有規律。
在這一學年的程序設計課程中我從一個對編程一無所知的小白,成長為現在可以獨立解決一定編程問題的編程菜鳥,雖然水平並不很高,但成長是巨大的,不僅提高了我的編程能力,也提高了我的邏輯思維能力和獨立思考的能力。
對改進教學提出的建議
同學們提出不少好建議,這些建議我在后面的課程中落實:
- 加強課堂時間
- 課后PP的講解
- 內容拓展,內容深化上可以多做工作
- 進行小組項目的實踐
- 與更多人的交流(學得好的提這個,實際是不少同學不願交流,我只能輪詢改中斷)
- 待及格定在70分,好多及格的同學其實做的並不好而只是剛剛及格,並不見得好好學了
- 每周選5篇同學博客要求所有人點評,促進學習交流,對交流多的同學獎勵
- 督促學生做課堂筆記,結合有道雲筆記電子化,並作為一個考核點
- 學習博客中加入每周考試錯題更正情況
- 實踐考核這塊要求代碼加注
教學過程中的好措施
老師教學方法中得到大多同學認可的做法有:
0. 藍墨雲班課的引入,應用
- 結對學習
- 通過博客,git交作業
- 內容串講,錯題講解
- 課堂實踐
- 寫學習指導,督促同學們多理解、運行代碼
- 各種學習資料的提供
- 做中學
- 過程化考核
教學反思
同學們提出來的問題有:
- 加強課堂控制,利用好課堂時間:后面要充分安排好每一節的內容
- 博客互評的參與度不高: 采納前面學生的建議,試驗了並不好,后面只讓結對互評
- 英語出題: 工具安裝錯誤,編譯器錯誤即使很簡單,不少同學還不看,后面加強英語的學習指導和應用
- 代碼量與有效代碼量:繼續刻意練習的指導
我自己感到要加強的地方有:
- 進度條的作用沒發揮好: 時間管理,效率提升,學習過程效率提高的過程參考《構建之法》監控
- 項目,應用上多下功夫,引入大課建設內容:吸收其他學校項目管理經驗
- 指導學生掌握學習方法,提高學習效率,引入PSP的做法
- 加強英語的應用:基礎試題,解答使用英語
- 刻意練習
- 鼓勵多思考
- 教學視頻的學習指導
致謝
感謝北京航空航天大學 的羅傑老師(博客),福州大學的張棟老師(博客),東北師范大學的楊貴福老師(博客),教學中跟你們學了不少方法,有你們這些負責的老師做榜樣,我教學更有積極性了,看到你們的教學效果,也給我了不少壓力。希望后面能越來越好!
在此,對博客園表示衷心的感謝,特別感謝園主杜勇和工程師阿春,有什么問題基本都是當天解決。
感謝賀利堅老師(博客園博客,CSDN博客,新浪博客)。賀老師向我推薦了藍墨雲班課讓我的教學有如虎添翼的感覺!
感謝同學們的大力配合,與你們一起體會教學相長是一件幸福的事情!
歡迎關注“rocedu”微信公眾號(手機上長按二維碼)
做中教,做中學,實踐中共同進步!

-
版權聲明:自由轉載-非商用-非衍生-保持署名| Creative Commons BY-NC-ND 3.0
如果你覺得本文對你有幫助,請點一下左下角的“好文要頂”和“收藏該文”
