李晉麗 孫春娟 張學波
摘要:算法設計與分析是計算機學科中的基礎課程,但在實際教學中,存在學生基礎不一、理論與技術難以平衡、難以培養計算思維等問題,針對課程教學中容易出現的這些問題,對可采取的解決方案進行探討,從制定合理目標、科學設置教學內容、合理應用多種教學手段、突出計算思維的培養、將競賽引入課堂、建立教學輔助平臺、改進考核方式七個方面進行分析,旨在突出以學生為中心、以應用為目的,從而促進課程教學質量的提高。
關鍵詞:算法設計與分析;實踐教學;輔助平臺;計算思維
中圖分類號:G642 文獻標識碼:A
文章編號:1009-3044(2019)10-0111-03
開放科學(資源服務)標識碼(OSID):
1 引言
《算法設計與分析》課程是一門面向設計的計算機專業基礎課程,處于計算機學科的核心地位,其先修課程包括離散數學、數據結構、高級語言程序設計等,為計算機系統結構、計算機軟件與理論、計算機應用技術等學科提供廣泛扎實的計算機算法知識基礎,也可為其他非計算機專業研究生學生提供相關知識。作為一門基礎課程,學生的學習質量至關重要,但在實際教學實施過程中,由于學生的差異性、本門課程自身的特征,存在各種問題,因此有必要研究教學改進方案,持續提升教學質量。
2 教學中容易出現的問題
2.1學生來自各個專業,基礎水平差異明顯
該門課程是計算機技術、軟件工程專業學位碩士研究生必修課程,同時作為其他專業的研究生選修課程。學生來自不同專業,先修課程不同,有的學生具備數據結構、程序設計基礎知識,而有的學生則比較薄弱,尤其在程序設計方面欠缺;有的學生沒有接觸過算法相關內容,而有的學生參加過算法相關競賽,對算法比較熟悉;有的學生是應屆生,具有較強的專業基礎,但缺乏實踐經歷,有的學生是在職干部,工作多年,專業基礎薄弱,但具有較多的實踐經驗;這些各方面的問題都給教學帶來一定的難度,需要在整個過程中既兼顧薄弱者,又要讓能力強的學生有更多收獲。
2.2重應試、輕實踐,教學內容缺乏針對性
高等教育重在培養應用型人才,算法設計與分析是一門實踐性較強的課程,課程學習中一方面要培養學生學習知識的系統性和完整性,而在應用方面,則要求學生能夠學會使用算法解決實際問題,即要培養學生解決實際問題的能力。在教學過程中,教學內容缺乏針對性,更多的是通過對經典算法的實踐來加強應用。而要把算法真正應用于解決實際問題,針對不同的問題,如何設計算法,這在本門課程的教學中是一個重難點。
2.3學生缺乏對理論知識的學習興趣
算法設計與分析課程中需要理論知識的支撐,但學生往往反映理論枯燥,缺乏學習興趣,教師為了讓學生掌握系統的知識,容易出現“滿堂灌”的現象。如何平衡好理論與技術的關系,保證學生充足的時間上機實踐的同時,又要讓學生樂于學習理論知識,這也是教學中需要關注的問題。
2.4計算思維的培養是難點
計算思維是當前計算機領域教學中比較關注的一個問題,即了解計算機是如何思考的,學習和計算機溝通,讓它幫我們高效地處理事情。具體來說,就是利用計算機科學的基礎概念和方法對問題進行描述、建模、求解[1]。計算思維無處不在,是解決問題的有效工具,應該在本門課程教學過程中,融入計算思維的培養,這也是教學實施的一個挑戰。學生往往反映可以學習和理解現有的算法,但遇到一個要求解的問題,卻難以分析,不知如何將具體問題抽象成計算機可以理解的模型,不知如何一步步推理設計出解決問題的方法。
2.5缺乏支撐教學的實例庫
本門課程實踐性強,學生在了解算法思想的基礎上,需要加強對問題求解的算法實踐。目前主要是以選定教材為基礎,要求學生參照教材、課件及課后習題,動手完成相關算法的驗證與設計。但由于學生基礎不一,需要建設層次不同的實例庫,供學生練習,這就需要教師投入一定的精力,從大量的算法實例中進行精選,設置層次類別,以便于學生階梯式學習。
3 教學中可采取的解決方案
3.1制定合理的目標
要想提高教學質量,必須確立明確的學習目標。學習目標包括知識技能目標、思維意識目標和情感價值目標。學生普遍反映本門課程難,這是因為本門課程的綜合性強,不僅要讓學生掌握算法設計的基本理論和主要方法,初步具備對算法復雜性進行正確分析的能力,并能舉一反三,將所學內容應用到算法設計實踐中去,為后續課程的學習、課題研究奠定必要的算法設計基礎。要提高學生對計算機課程的學習興趣和熱情,引導學生注重將創造性思維活動與科學嚴密性論證緊密結合,在學習、實踐中逐步養成善于思考、肯于鉆研的良好習慣,激發自覺投入科學研究的熱忱。
3.2科學設置教學內容
課程內容既要包含基礎,又要突出重點,還要設置進階內容。本門課程共設了九章內容,旨在讓學生掌握各類算法的基本思想:第一章重點講述算法復雜性分析所用的數學方法;第二至八章為本課程的重點,其內容為算法設計的主要方法,包括排序算法、遞歸與分治策略、貪心算法、動態規劃算法、回溯算法、分支與限界算法等,該部分要注重理論學習與設計實踐相結合;第九章隨機化算法與NP完全性理論是當前計算機算法領域的熱點研究課題,設置為本課程的擴展內容。對于基礎比較差的學生補充數據結構等基礎知識的講解。總體來說,內容設置科學合理。
在教學過程中,應該把握重點,算法的設計與分析思想應該貫穿整門課程的教學中,如第一章重點講解算法分析的數學符號和方法,但在后續章節的講授中,應該把第一章算法的分析方法貫穿于其中;如講解0-1背包問題的回溯法時,應該與動態規劃求解法進行比較,突出不同算法的設計思想。
由于學生基礎水平不同,可以用算法來屏蔽專業差距,拋開編程語言的細節,重在掌握算法的核心思想,不限制學生所用的編程語言,讓學生選擇自己熟悉的語言實現。還可讓編程能力比較低的學生預先熟悉環境,自學程序設計相關知識;而對于專業技能比較高的學生,設置比較有難度的題目,開創其思維;也可結合學生研究課題,提供前沿文章供研究。
3.3合理應用多種教學手段
該門課程是一門理論與實踐結合的課程,遵循素質教育、創新教育和研究式教育的基本原則,以計算機算法設計與分析的理論和方法為重點,按照理論與實踐相結合的教學模式,采用“精講、自學、研討、編程實踐”多種手段結合的方式,調動學生學習的積極性,增強學生的學習自主性。
教學方式上可以結合翻轉課堂,應突出以學生為中心,適當地選擇部分內容讓學生來當“教師”,如講述動態規劃算法的基本思想及實例后,讓學生對另外的實例應用進行分析,并比較動態規劃與分治法區別,動態規劃算法與貪心算法的共同點等。還可采用研討式教學方法,選擇學生感興趣的內容,學生為主角,討論交流自己的觀點;教師進行主持,引導學生提問或回答問題,并適當糾正或補充學生的觀點,最后進行評價總結。學生自己當教師和研討式教學都可以提高學生的學習興趣,提高上課的聽課效率,也鍛煉了學生的膽量和表達能力。
該門課程應用面廣、操作性強,只靠課堂學時是不夠的,學生的自學也尤為重要,尤其對于基礎水平較差的學生,教師應鼓勵其充分利用課外時間進行自學。教師可以給學生提供參考書籍等資源,以利于學生自學;也可以讓學生搜索與算法相關的前沿文章,進行分析研究。
3.4突出學生實踐、培養計算思維
針對本課程所體現的創造性思維活動與科學嚴密性論證結合緊密的特點,注重理論學習與實際問題結合,強調學生動手實踐,突出課程的設計性。對于特定算法設計策略,通過生活中的例子引入,然后介紹其基本思想、主要特點,再講解計算機科學和應用中的經典實例問題解決方法。教學過程中,注意實例由簡到繁,對每個實例算法所需的時間和空間進行分析,使學生在學到常用精巧算法的同時,又能通過對算法設計策略的反復應用,牢固掌握這些基本策略。對某些經典問題(如背包問題、TSP問題等)選擇用不同的策略求解,比較分析各種策略的優缺點,使學生理解各種算法策略的特點、適用場合,并能融會貫通,即在求解實際問題中,合理地選擇所需要的策略[2]。要求學生動手實現經典問題的解決,并設置一定數量的算法設計題目,在打牢算法設計與分析的理論基礎的同時,引導學生對問題進行多角度思考,突出解決實際問題,培訓學生的計算思維。
在教學中突出任務驅動、以問題為中心、應用實例教學法,讓學生隨時反映學習中存在的問題,并及時解決;對于每種算法,多講與實際應用結合的實例,通過實例加強理解。在學生實踐方面,需要設置不同難度類型的題目,包括:對經典算法的驗證型、對已有算法的分析改進、綜合性問題解決。由于學生水平不同,可針對不同學生設置不同題目,既要保證學生基礎知識的掌握,又要鼓勵表現突出的學生大膽創新,全面提高學生的編程實踐、算法設計、創新思維能力。
3.5合理將競賽引入課堂
算法設計問題千變萬化,必須有大量的實踐才能真正掌握算法。目前每年都會舉辦程序設計競賽,較著名的有:ACM-ICPC、TopCoderOpen、藍橋杯、華為軟件精英挑戰賽、微軟編程之美等,如果學生積極參加此類競賽,既能提高學習興趣,又能通過競賽掌握更多的知識;如果有幸能從競賽中脫穎而出,對學生學習是更大的激勵。教師應鼓勵學生積極參加競賽,也可以選擇ACM競賽中的題目進行課堂講解和分析,提高學生將算法應用于工程實踐的能力。
教師可以參照ACM競賽的方式和內容,對學生分組,選取合適的題目,舉辦班級內競賽,促進學生的學習動力。競賽內容可以選擇算法分析題、算法改進題、算法設計題,對于每類題目,教師需要預先研讀,能夠正確分析學生的解答,教師還可以選出優秀的學生作品讓學生討論分析。[3]
3.6建立教學輔助平臺
教學輔助平臺可以給學生提供資源,包括課件、課后練習、參考代碼、視頻等輔助資料,同時可以提供交流互動功能,讓學生與教師實時交流、在線答疑等,也可以進行在線考核,完成教師給定的題目,并上傳作業等,這些是傳統的教學輔助平臺所具備的功能。
為了更好地輔助學生學習,將傳統教學平臺改進:一是建設答題闖關式的系統,平時測驗均可通關闖關完成,教師可以通過平臺查看學生的任務完成情況;二是參照ACM競賽的在線評判模式,學生的任務完成情況由系統自動判閱,教師可以根據學生完成任務運行時間的統計進行評價分析。這不僅提高了教師的教學效率,由于富有挑戰性,還會促進學生學習的積極性和有效性。[4]
教學輔助平臺中還要重視實例庫的建設,教師收集實例并進行分類,區分類型和難度,實例庫可以用于支撐教師測試或學生自學。實例庫中應該至少覆蓋算法的五種基本策略:遞歸與分治、貪心法、動態規劃法、回溯法、分支限界法,對于隨機化算法等可設為擴展內容;在類型上,設置分析性、設計性兩大類,以設計類為主,設計類分為經典驗證型、必選設計型、可選設計型,實例分層推進,學生根據自身的需求,在實例庫中選擇實現,從而加強了根據學生特點的針對性教學。[5]
3.7改進考核方式
考核的目的一方面是檢驗學生掌握知識的程度,另一方面是督促學生學習的積極性。由于本門課程理論與實踐結合緊密,因此,不能單純地以閉卷考試作為考核的方式,而應加入對算法設計能力的考核。可設置多種、多階段的考核方式:一是可以布置不同難度、有針對性的作業進行階段性測試,主要通過上機實驗課來完成,要求在規定的時間內完成給定任務;二是設置期中測試和期末測試,期中測試要求學生解決難度適中的綜合性問題,期末考試則需要測試知識掌握的系統性、全面性,采用閉卷考試方式。學生綜合成績則由平時測試成績和考試成績綜合判定,既要測試學生基礎知識的掌握程度,又要測試對問題的解決能力。
4 總結
本文探討了算法設計與分析課程教學中存在的主要問題,并從解決這些問題著手,結合教學經驗,從教學內容、教學手段、考核方式等多方面進行了探討,重在突出以學生為中心、以任務為驅動、培養創造思維的教學方式,從而增強學生學習的積極性,提高課程教學質量。在以后的教學工作中,將會對各種改進措施分別研究,制定更細化的實施方案。
參考文獻:
[1] 孫亞紅. 《算法設計與分析》課程教學中計算思維的培養研究[J] . 電腦知識與技術,2012(16):3910-3911.
[2] 朱曉勇.《算法設計與分析》教學大綱[EB/OL]. 2018.11.20. https://wenku.baidu.com/view/c3c21d3c3a3567ec102de2bd960590c69ec3d8b8.html.
[3] 李華,趙建平,等. 基于ACM-ICPC的算法設計與分析課程改革[J]. 計算機教育,2013(7):88-91.
[4] 何克晶,張星明,鄭運平. 算法設計與分析課程全方位實踐教學改革探索[J]. 計算機教育,2017(2):45-49.
[5] 陳媛,盧玲. 專業學位碩士算法設計課程立體案例庫設計與實踐[J]. 計算機教育,2017(5):79-81.
【通聯編輯:王力】