李凈++郭洪禹++袁紅春

摘 要: “數據結構與算法分析”在程序開發類課程群中有至關重要的作用。本文以課程群為背景,從教學、實踐等方面進行研究,提出課程群框架下的自主學習、合作學習相結合的課堂教學模式、項目驅動的分層實踐教學模式及分段管控的多元化實踐考核等改革措施,其研究對激發學生長久的學習動力和興趣有積極的作用。
關鍵詞: “數據結構與算法分析” 課程群 分層實踐 分段管控
課程群是對教學計劃中有相互影響、互動、有序、相互間可構成完整的教學內容體系的相關幾門課程組成一個課程間相互連接、相互配合、相互照應的課程群體[1]。2014年提出建設程序開發類課程群,包括C語言程序設計、C++程序設計、數據結構與算法分析、JAVA程序設計、web程序設計、組件開發技術、軟件設計模式七門課程。其中“數據結構與算法分析”課程在整個課程群具有承上啟下、舉足輕重的地位,決定程序開發類課程群的成效。
一、“數據結構與算法分析”課程的現狀
1.課程理論性強,難度大。
調研發現:非計算機專業近80%的學生都感覺課程難,即使計算機專業的有近50%的學生,感覺該課程難學,這種畏懼思想影響學習興趣。
2.先導課程掌握不扎實,課程推進困難。
教學計劃中C++程序設計、實踐和該課程分別安排在第2和第3個學期。暑假將兩門課割裂了,造成是否介紹先導課的困境。
3.學生動手水平參差不齊,單一的實踐安排難以滿足不同的需求。
目前,課程的實踐安排對所有的學生相同,對于動手強的學生可能在寢室就完成題目,而對編程能力不強的學生可能根本不知該如何下手,久而久之學生就失去開發熱情。
4.課程管控不足,課程考核不能反映學生的真實水平。
目前課程的評定以卷面成績為主,實踐證明有些學生根本不會寫代碼但他卻能拿到很高的分數。
二、教學改革措施
1.課程群中相關課程開課時間的精細化安排。
(1)開課時間安排。
C++程序設計包括64上課課時和16實踐課時,將C++課程實踐調整到第3學期第1周上,而數據結構與算法分析課程從第2周以后開始上,這樣就將兩門課緊密地銜接起來。這種一門課程一分為二的方法促進了C++課程,同時也保證“數據結構與算法分析”課程的順利進行。
(2)教學內容及學時分配。
為呼應課程群中的后續課程,該課程內容是貫穿程序設計、軟件設計模式的思想和觀點。該課程采用面向對象和抽象數據類型觀點介紹數據結構,集中體現分解、抽象和信息隱蔽的基本原則,抽象數據類型是中樞,展示信息結構轉換的三個重要階段:數學模型、抽象數據類型、數據結構與算法。其理論教學環節的安排為:數據結構的基本概念(2),表、棧和隊列(6),樹(8),散列(4),優先隊列(7),排序(12),不相交集(4),圖論算法(7),算法設計技巧(4),攤還分析(4),高級數據結構(6);課內實踐的安排:棧和隊列(2),表達式樹(2),散列、優先隊列(2),排序(2),不相交集(2),深度優先搜索應用(2),貪心、分治算法(2),AA樹、treap數(2)。
2.課堂教學模式改革
(1)注重啟發式教學,建立自主學習、合作學習相結合的教學模式。
為強調思維訓練,采用講、做穿插的授課方式,教師采用示例案例授課時學生采用自主學習模式,是教-做-答疑的互動、有反饋方式。它強調教中實踐、實踐中思考、交流中提升;自主學習完后各小組通過“以強帶弱、以老帶新”的方式合作完成綜合實踐作業。
具體講解時,(1)首先引入案例,然后給出C++實現的方法,最后詳細展開相應數據結構及操作實現;(2)一題多解、一題多語,如對同一問題采用不同的數據結構實現方法,對比講解,多語言實現為拓展作業;(3)難點分散,如將棧與非遞歸處理技術分別在棧、二叉樹非遞歸算法、快速排序與歸并排序的非遞歸算法等多處講解;(4)圖示講解和動畫展示相結合。
(2)標準化教學與微課程教學模式相結合。
為了確保課程的可持續發展,課程采用項目組集體備課、集體討論、分頭準備的方式。課程組骨干教師經過多次討論后修訂了課程教學大綱,形成了標準教案、PPT及算法演示視頻。為充分利用學生的課余時間,采用課程微課程化,微課視頻一般10分鐘左右[2],選擇與生活比較貼近的數據結構(比如棧、隊列等)和基礎實踐內容微課化。
3.項目驅動的分層實踐教學模式研究。
教育心理學家發現:學習是累積性的,較復雜、較高級的學習是建立在基礎性的學習基礎之上的[3]。因此,課程的實踐教學以貫穿課程群的項目進行驅動,提出“注重基礎、綜合應用、提高創新”的三層次實驗教學模式,以基礎、設計、綜合三個方面的實踐能力培養為中心,全方位地培養學生的動手能力和創新能力。
基礎類實踐通常是對教材上所涉及的數據結構及相關操作進行上機驗證,要求學生掌握相關數據結構,提高學生的軟件設計規范化能力。這類實踐通常在介紹完相關知識后以課程作業的方式發放,要求學生在規定時間內完成,教師以晚自習的形式進行個別指導;設計類實踐要求學生對給定的題目進行數據結構的設計及算法實現,題目是從貫穿課程群中的項目案例中切割出來的。實踐中我們鼓勵學生一題多解,并分析不同解的時、空代價。這類實驗通常是課程內實驗題目,要求每個學生獨自完成,教師全程指導、重點考核;綜合類實踐是對C++實踐課程中學生已完成題目的重新設計,以小組為完成單位,人員分組原則上是C++實踐的人員分組。該類實踐培養學生分析、設計實際項目的能力和創新能力。教師對有強烈要求的學生通過答疑的方式進行指導。各小組完成后需要進行結題答辯,答辯中教師會對完成情況進行評價,從而引出后續課程。
4.課程考核與過程控制。
我們采用分段控制的多元化實踐考核方式:期末機考30%+基礎實踐20%(程序代碼+報告+隨機面試)+設計實踐40%(課前準備材料+完成代碼+報告)+綜合實踐10%(報告+答辯)。考核方式強調對課程的過程監控,基礎實踐的每一次完成情況能夠給教師提供重點監控的學生名單,通過晚自習的重點指導確保學生弄懂相關知識點、順利進行實踐課任務,為保證設計實踐課的完成質量,要求學生在課前精心準備并提交準備材料。綜合實踐強調以強帶弱,最后通過總結引出下一門課程,從而保持學生長久的學習動力。
三、結語
數據結構與算法設計是程序開發類課程群中最重要的一門課程,其成敗直接決定整個課程群的成敗。在不影響其他課程下的課程群開課時間微調保證課程的順利進行;創新的教學課堂模式激發學生自主式、探索式學習;項目驅動的實踐模式將課程群中的課程更緊密地結合起來;分層的實踐教學滿足不同層次學生的需求;教學過程的管控進一步確保教學的順利推進。該課程改革對課程群中其他課程改革有積極的作用。
參考文獻:
[1]馬賽,李方能,吳正國,卜樂平.《信號與系統》課程群的建設與教學改革探索[J].高等教育研究學報,2010.3.
[2]梁樂明,曹俏俏,張寶輝.微課程設計模式研究—基于國內外微課程的對比分析[J].開放教育研究,2013,19(1).
[3]哈斯.《數據結構》課程中使用逐步演示法進行算法教學的實驗研究[D].呼和浩特:內蒙古師范大學,2007.
[4]李凈,多琦,袁小華.信息管理與信息系統專業“軟件工程”課程教學研究[J].計算機教育,2007,19.
項目:上海海洋大學《數據結構與算法分析》重點課程建設