陳翔
摘要:以算法設計與分析課程為例,結合翻轉課堂的教學理念,提出一種翻轉課堂教學模式框架。說明具體的教學內容安排,并總結教學改革中的經驗。
關鍵詞:算法設計與分析;翻轉課堂;教學模式
1 背景
算法設計與分析課程是計算機專業的核心必修課程。當前無論是計算科學還是在計算實踐,算法都在其中扮演著重要角色。本課程在教學過程中重點講授計算機應用中經常遇到的實際問題的解法,講授設計和分析各種算法的基本原理、方法和技術,培養學生對算法時間和空間復雜度進行正確分析的能力。學好算法設計與分析這門課程,一方面有助于學生進一步鞏固已經學習過的知識,例如高級程序設計語言和數據結構;另一方面也有助于學生學好一些后續專業課程,例如軟件測試技術、編譯原理、數據庫原理及應用等,因為這些課程中的一些較難知識點均與算法密切相關。
但在實際的教學過程中,筆者發現學生在學習該門課程的時候面臨很多的問題:①課程教學內容的難度較高,很多知識點的抽象層次高,需要學生具備一定的數學分析能力。在算法的實現過程中,學生編程經驗較為匱乏,很多時候難以將偽代碼轉化為實際可運行的代碼;②學生知識應用能力較弱,雖然能夠理解課堂上講授的知識,但面對新的問題時,難以將學到的知識進行靈活應用;③學生普遍存在課前不預習、課后不復習的問題,自學意識淡薄。
麥可思公司曾對2013屆本科畢業生就“你認為母校的教學需要改進的地方”這一問題進行了調研,調研的最終匯總結果如圖1所示。數據表明有49%的學生認為已有的教學“無法調動學生學習興趣”,31%的學生認為“課堂讓學生參與不夠”。
筆者嘗試將翻轉課堂教學模式引入到算法設計與分析課程的教學中。翻轉課堂相對于傳統教學具有如下優點:①在傳統教學中,教師主要是課堂的主導者和知識的傳授者,而基于翻轉課堂教學模式后,教師更多成為學生學習的引導者和協助者。由于引入了授課視頻,教師節省了重復知識傳授的時間,可以將更多的時間投入到學生作業的講解、教學案例的設計等環節;②學生成為教學過程中的主動參與者。學生在課前階段通過觀看視頻,構建了相關專業知識的基礎,隨后在課中階段和課后階段可以積極思考和討論相關知識點的應用,這使得學習效果得到了大幅度的提升。因此翻轉課堂的引入能夠在一定程度上緩解傳統教學中難以解決的一些問題。
2 翻轉課堂教學模式在算法課程中的應用
以高等院校計算機專業權威教改期刊《計算機教育》為例,將翻轉課堂、翻轉教學或反轉課堂設置為關鍵詞,并在CNKI數據庫搜索后,得到了相關文獻數量統計結果:近3年國內教師對翻轉課堂這一教學模式愈加關注,在2013年僅有2篇文獻,而到2015年相關文獻已經大幅度增長到35篇。
通過分析已有文獻,不難看出,翻轉課堂模式能夠成功執行需要具備2個因素:①小班授課;②高質量的教學資源。
翻轉課堂需要教師與學生之間積極互動,若學生數量太多,其互動效果很難保證,因此小班授課是成功實施翻轉課堂教學的前提。目前南通大學計算機科學與技術學院專業碩士每年的招生規模為15人左右,而算法設計與分析課程又是研究生課程體系中的必修專業課程,這為筆者的教學改革實踐提供了實驗對象。
高質量的教學資源是成功實施翻轉課堂的關鍵。隨著慕課(MOOC)的蓬勃發展,很多優質教學資源實現了共享。在教學改革實踐中,筆者充分利用了北京大學屈婉玲教授在Coursera上開設的慕課“算法設計與分析”,并以屈婉玲教授編寫的教材《算法設計與分析》作為上課的指定教材。除此之外,筆者在教學過程中,如果發現有更易于學生接受的講解方式,也會額外錄制一些教學視頻并用于下一輪的教學中。
在教學改革過程中,筆者總結了圖2所示的基于算法課程的翻轉課堂教學模式框架圖。
為更好地支持翻轉課堂教學,在授課開始的時候,筆者會在QQ上搭建一個課程討論群,用以加強教師與學生之間以及學生與學生之間的交流與協作。通過討論群,可以對學生的學習狀態、答疑解惑、作業提交、師生互動等情況進行跟蹤并提供輔助。
目前南通大學針對這門課程的教學安排是13周,每周安排3個課時。筆者基于翻轉課堂教學模式對這門課程的具體教學內容進行了重新安排,最終如表1所示。由于課時比較少,因此在算法的基本概念介紹和遞推方程的求解中并不安排翻轉課堂。其中在算法的基本概念中,重點介紹計算復雜性、時間復雜度、常用函數(對數函數、指數函數、階乘函數、取整函數等)的階及其性質。在遞推方程的求解方法中,重點講解差消法、遞歸樹法、迭代法以及主定理等。
在隨后的分治法、動態規劃法、貪心法和回溯法這4個單元中,則安排翻轉課堂,具體來說:
1)分治法單元。
該單元介紹分治法的設計與分析,一般來說該策略首先將原始問題劃分為規模更小的子問題,隨后遞歸或迭代求解每個子問題,最后將子問題的解綜合得到原問題的解。
在課前階段,讓學生借助2個經典問題(二分搜索和歸并排序)來掌握分治法的設計與分析過程。
在課中階段,通過依次分析芯片測試、快速排序、選第k小元素等問題來加強學生對知識點的理解和應用。
在分治法單元的最后一周,安排一次團隊答辯。安排2個團隊分別對提高分治法效率的2種途徑(即減少子問題的數量和在分治法執行之前進行必要的預處理操作),結合具體問題進行講解。
2)動態規劃法單元。
該單元介紹動態規劃法的設計與分析。動態規劃法的求解過程是一個多階段決策過程,每一步處理一個子問題,可用于求解組合優化問題。
在課前階段,讓學生借助矩陣鏈相乘問題來掌握其中的目標函數設置、子問題邊界的確定、遞推方程的設定和最優子結構性質的證明等。
在課中階段,進一步通過最長公共子序列問題、投資問題、最大子段和等問題來加強學生對知識點的理解和應用。
在動態規劃法單元的最后一周,安排一次團隊答辯。針對2個具體問題,對基于動態規劃法的求解方案進行講解。
3)貪心法單元。
該單元介紹貪心法的設計與分析。貪心法在對問題求解時,總是做出在當前看來是最好的選擇。
在課前階段,首先借助活動選擇問題,讓學生了解貪心算法的設計過程。隨后借助該問題,進一步讓學生掌握按步驟歸納的證明技巧。最后借助另一個經典問題(裝載問題),讓學生掌握按規模歸納的證明技巧。
在課中階段,進一步通過最小生成樹的Prime算法和哈夫曼算法來加強學生對知識點的理解和應用。
在貪心法單元的最后一周,安排一次團隊答辯。要求2個團隊分別講解最小生成樹的另一個經典算法Kruskal算法以及單源最短路徑Dijkstra算法等。
4)回溯法單元。
該單元首先介紹回溯法的設計與分析。回溯法是在搜索嘗試過程中尋找問題的解,當發現已不滿足求解約束條件時,就回溯返回,嘗試別的路徑。隨后介紹分支限界法,該方法通過引入代價函數,對傳統的回溯法進行了改進。
針對回溯法,在課前階段,通過3個經典的問題(n皇后問題、0-1背包問題和旅行商問題),讓學生掌握搜索空間的3種表示(n叉樹、子集樹和排列樹),并掌握常見的搜索策略(例如深度優先、廣度優先等)。隨后在課中階段,通過圖的著色等問題來加深學生對知識點的理解和應用。
針對分支限界法,在課前階段,通過背包問題讓學生了解分支限界法,掌握代價函數和界的概念、設定方法和搜索策略。隨后在課中階段:通過最大團問題、旅行商問題、園排列問題等來加深學生對知識點的理解和應用。
由于教學時間的限制,在該單元的實際教學過程中,并未安排團隊答辯環節。
在實施上述翻轉課堂教學模式的過程中,總結了如下經驗:
(1)課前階段的主要目的是讓學生完成知識的初步學習。教師需要針對本周的教學知識點指定學生需要預先學習的教材章節、教學課件和教學視頻,同時為一些學有余力的學生指定擴展閱讀資料。對于發布的教學視頻來說,要求每一段視頻的時間要控制在10~20分鐘,并且僅僅是圍繞一個知識點或者一個具體問題來進行講解。
(2)課前階段要求學生借助自己熟悉的高級編程語言(C++、Java或者C≠≠),對視頻中重點分析的1-2個經典問題進行編程實現,并提交實驗報告。要求學生在實驗報告中記錄下自己在學習過程和編碼過程中遇到的問題和解決方法。
(3)課中階段的主要目的是讓學生完成知識的深化和內化。教師首先會針對課前階段布置的預先學習內容進行串講,重點分析這些算法設計與分析背后的核心思想。隨后對學生提出的疑問進行現場解答。最后通過引人新的問題,借助課堂討論方式,來提高學生對課前階段所學知識的理解和應用。
(4)課后階段則為每一個單元設計一些課程實踐項目,讓學生以團隊(每個團隊的成員限定為2-3人)的方式進行完成。筆者在上課剛開始的時候會要求學生在2周內完成團隊的組建,并預先選好自己需要完成的實踐項目。在完成實踐項目后,需要提交實踐報告,內容包括問題分析、解決方案的細節和性能分析等,并要求編碼實現,并對其中的核心代碼進行說明。除此之外,在每個單元的最后團隊答辯階段,需要完成現場答辯。在答辯過程中,教師應充分發揮引導者和組織者的作用,避免學生在學習交流過程中出現沖突和討論方向產生偏差;同時答辯團隊需要在答辯前一天將答辯幻燈片發送到教師郵箱,讓老師能夠對答辯內容預先有一個大致的了解。最后對團隊答辯時間和討論時間進行限制,對一些性質的證明建議答辯時借助板書方式進行現場證明,要求每個團隊必須至少問一個問題。
(5)對于教師來講,在每一單元完成后,都需要及時進行教學總結、優化教學方案和優化教學資源等。例如:基于團隊的答辯表現,將一些特別難或者特別容易的課程實踐項目從教學資源庫中移除掉,同時注重從程序競賽、教材和科研中搜集優秀的課程實踐項目并補充到教學資源庫中。
(6)翻轉課堂可以將考核過程更多貫穿于整個學習階段。其特色是增加了平時的考核次數,讓學生在平時也能感受到學習的壓力,以此提高學生的學習主動性,確保翻轉課堂能夠取得良好的教學效果。在該模式中,日常考核的內容包括課前階段的實驗報告、課中階段學生的課堂表現,以及團隊答辯階段的實踐報告和現場答辯表現等。
3 翻轉課堂教學模式實施效果
為了充分了解上述翻轉課堂教學的實施效果,筆者在教學完成后,對2015級專碩的14名學生進行了調查,結果表明:
(1)翻轉課堂需要學生投入更多的時間。為了完成課前階段的算法實現和團隊答辯階段的實踐項目,需要學生查閱大量的資料和花費大量的時間來完成代碼的編寫和調試。
(2)翻轉課堂能夠激發學生的學習激情。以討論為主的教學方式,以及新穎有趣的課程實踐項目,可以極大地激發學生的學習興趣和熱情。
(3)翻轉課堂能夠培養學生的研究和創新能力。在傳統的填鴨式教學方式中,學生僅通過閱讀教材,很難在學習的過程中發現問題,而在翻轉課堂教學中,學生為了完成課前階段的算法實現和團隊答辯階段的實踐項目,必須去上網查找資料,和同學進行討論,這樣就逐漸培養了學生的研究和創新能力。
(4)翻轉課堂可以培養學生的交流、合作和表達能力。團隊答辯階段中,為了完成實踐項目,需要學生組建團隊、分配職能、協作完成、提交項目實踐報告和答辯幻燈片,并最終完成現場答辯。該階段為學生提供了一個很好的機會和途徑,強化了學生的參與意識,對于培養學生的交流、合作和表達能力起到了積極的作用。
4 結語
算法設計與分析課程是計算機專業體系中的一門重要課程。筆者在之前的教學改革中,發現學生之間水平參差不齊是教學過程中面臨的最大問題,即學生之間在基礎知識、智力水平、興趣愛好、學習動機和學習方法上存在較大的差異,因此提出了一系列教學改革措施來緩解上述問題,主要包括突出學習重要性、優化教學內容、引導學生自主學習、建設算法題庫、成立程序競賽協會、組織習題研討課和采用板書為主的教學手段等。在這次教學改革中,進一步引入翻轉課堂教學模式,可以認為是對之前教學改革的一種縱向拓展,實踐結果也證實了這種新穎的教學模式可以有效提高學生的學習主動性和學習興趣。
為進一步提高翻轉課堂的教學效果,今后可以從以下幾個角度去嘗試:①在翻轉課堂的實踐過程中,還可以結合地方院校學生的特點,注重自身教學資源(包括教學視頻、教學課件、課程實踐項目等)的積累和建設;②可以考慮加強自身網絡教學平臺的建設。雖然存在一些比較成熟的慕課平臺(例如Coursera、學堂在線、愛課程等),但通過自身網絡教學平臺的建設,可以更加靈活地搜集學生的學習行為數據,不僅可以支持翻轉課堂教學模式,還可以為隨后的SPOC(small private online course)模式提供支持。該模式可以根據學生入學基礎的差異以及學生專業的差異,對教學過程進行差異化。除此之外,自身網絡教學平臺的運行也可以為今后的教育大數據挖掘研究提供原始的數據積累。
(見習編輯:張勛)