劉海橋,袁丹丹
(海軍工程大學電子工程學院,湖北武漢 430000)
隨著科技的發展,計算機成為各領域不可或缺的計算工具[1]。程序設計基礎是大學生了解計算機,學習算法,建立計算思維非常重要的通識課程[2]。由于Python語言具有簡單、高效、跨平臺等特點,逐漸成為相關專業的首選程序設計語言,學生可以不必拘泥于底層的實現,而是更好地關注問題本身,更高效地設計算法[3]。與此同時,學生的編程能力也將直接影響相關專業課程的開展,比如算法與數據結構、數據挖掘與機器學習、數據可視化等課程。
隨著大數據技術的應用,大數據工程專業要求學生掌握大數據技術原理、數據挖掘、數據可視化等方面的專業知識,涉及的專業課程包含數據挖掘與機器學習、人工智能、數據可視化等,而這些專業課程在實驗開展環節都需要借助程序設計語言,首選的便是Python 語言。所以學生的Python 編程能力一定程度上決定了專業課實驗能否高效地開展。
現有的Python 語言教學,主要圍繞語法、算法及簡單應用展開,與后繼專業課程結合度較低,脫離專業的應用背景。如何將通識課程與專業課程建設進行交叉融合,對培養綜合型人才具有重要意義[5-6],所以基于大數據工程專業人才培養目標對Python 語言教學方法進行探索很有必要。本文分析了Python 語言課程現狀,結合數據挖掘與機器學習專業課程教學,從教學內容、教學模式、評價指標三個方面對Python語言教學方法進行探索,以期專業課實驗的高效開展。
大數據工程專業首選的編程語言是Python語言,所學習的便是Python語言程序設計基礎,根據人才培養目標,后續會接觸很多和數據處理、挖掘、可視化等相關的專業課程。從教學效果看,學生對Python語言的掌握不透徹,不具備實現復雜算法的編程能力,從而影響專業課實驗的高效開展。下面結合專業本身和Python 語言教學,對這一現狀產生的原因進行梳理。
Python 語言程序設計基礎課程的教學總體目標是通過課程內容的學習,使得學生能夠掌握程序設計的基本方法,具備程序設計、編寫、維護的能力,使用Python語言解決實際問題的手段,同時具備基于生態的編程思維方式。鑒于此,課程明確三層目標:知識層、能力層和思維層。比如在能力層,要求學生掌握pyinstaller 庫、jieba 分詞庫的應用,同時要求學生能夠將Python語言運用在人機交互、網絡爬蟲等專業特色不明顯的應用場景。
課程的教學目標和教學內容的結構清晰,通過學生提交的作品,可以看出學生具備了利用Python語言解決簡單問題的能力。但是在專業課的教學過程中,可以發現學生缺乏對一些基礎的數據處理庫的掌握與應用,使得實驗開展過程中,需要花費大量時間講解這些基礎庫的用法,影響實驗的高效開展。
上述問題出現的原因在于Python 語言課程的內容設計上,沒有考慮到專業特色,沒有相關生態庫的介紹和鋪墊,沒有培養學生利用科學計算相關庫的編程習慣。
學生舉一反三的能力較弱,習慣于被動地接受知識,編程的主動性難以調動。此外,學生創新實踐能力較弱,現有的考核內容,很難檢驗學生編程的綜合能力。
現有的考核方式包含形成性考核和終結性考核。在考核內容方面,主要參考計算機等級考試二級的題型,比如在綜合應用方面,主要考核文本的分析及處理、簡單的算法設計、Turtle繪圖等。這些考核內容不能體現專業特色,比如缺乏對數據的預處理、對表格文件和圖片文件的讀取和分析等知識的考核,而這些專業知識在后續專業課程的教學中至關重要。
首先在教學內容上,重新梳理知識體系,保留基本語法、程序結構、綜合應用三層結構不變,并在原有課程內容的基礎上,思考如何與后繼專業課程相結合。為此,需要分析大數據工程專業課程的教學計劃,從中提煉出與專業知識關聯性不強,但在專業課實驗開展過程中不可或缺的Python編程知識,比如涉及的生態庫等知識,然后結合Python 課程的知識架構,將這些提煉出的知識點融入Python教學中。這樣不僅能夠加強Python教學的實踐性,還能為后續專業課實驗的開展做好鋪墊。
其次在教學方法上,注重任務驅動教學模式。根據教學目標,合理設計任務,激發學生解決問題的好奇心和內在動力,引導學生認真聽課,積極思考,主動編程。通過任務驅動的教學模式,學生能夠更好地掌握知識,發現問題并解決問題。
此外,為了提高學生編程的主動性,除了任務驅動的教學模式,合理的考核指標也相當重要。課程現有的形成性考核占比40%,主要包含學生的實驗、課堂表現、期中成績。現基于成果導向原則,可以將課堂表現的10%分值改為創新實踐,用于檢驗學生編程的綜合能力。教學過程、教學方法最終要通過學生的學習成果來檢驗,所以學生掌握知識的程度才是衡量教學效果最有力的指標。
為符合大數據工程專業人才培養目標,使得學生能夠很好地完成后續專業課程的高效開展,需要將專業課程中相關知識,進行合理劃分,對Python 課程教學內容進行有效融合。首先需要對大數據工程的專業課程進行分析。大數據工程專業的課程建設如圖1所示,主要分3層,可以看出程序設計基礎是眾多專業課程的核心通識課程。
以數據挖掘與機器學習課程為例,課程的內容包含模型評估、降維等數學理論知識,以及大量的機器學習算法,比如決策樹、神經網絡、支持向量機等。下面對數據挖掘與機器學習這門專業課程中的內容進行分析、提煉。
在模型評估章節,主要講解評估方法、性能度量等指標,這些內容更多的是涉及數值的計算,比如查全率、查準率、方差、標準差計算等,可以將其作為案例應用在Python 語言程序設計課程的“數值類型”章節;而錯誤率、精度是機器學習過程中計算最為頻繁的指標,可以應用在“組合數據類型”章節,從而有效地將專業課程與通識課程相結合。
在線性模型章節,主要講解線性回歸、線性判別分析等內容,這個章節需要使用numpy庫進行矩陣的運算。結合Python 課程教學內容,可以在“組合數據類型”章節中引入numpy庫,利用二元一次方程,凸顯numpy 庫的強大功能。需要注意的是,numpy 庫已經被列入計算機等級二級考試的提綱,對numpy庫的學習變得很有必要,尤其是大數據工程專業,更應具備使用numpy庫的編程實踐能力。

圖1 大數據工程專業的課程建設(部分)
在決策樹章節,主要講解如何構建決策樹。決策樹算法在數據預處理階段需要對數據進行讀取、去除無效數據等操作,而這些操作都需使用pandas 庫,那么對應的可以放在Python 課程的“二維文本文件處理”章節,通過和內置的open函數作比較,讓學生感受pandas處理數據的高效性,同時讓學生具備數據預處理的能力。
在神經網絡章節,主要講解感知機和簡單的BP神經網絡,這里采用手寫字體識別案例,涉及對圖片數據的處理,所以需要講解pillow庫,這個庫可以放在Python 語言程序設計課程的“二進制文件處理”章節講解,讓學生了解圖片數據的本質,以及如何將圖片數據轉換為numpy數據。
在支持向量機章節,主要講解支持向量機的推導過程及對偶問題。關于對偶問題的求解,需要利用SMO 算法,而SMO 算法本質上就是一個while 循環算法,可以作為案例應用在Python語言程序設計課程的“循環”章節。但是需要對問題進行簡化處理,目的是脫離SMO 算法本身,讓學生體會while 循環語句的應用場景。同樣的,在聚類章節,K-Means 算法也涉及while循環語句的思想,也可以引入到“循環”章節作為案例使用。
在機器學習算法求解過程中涉及的圖表,比如柱狀圖、協方差圖、AGNES 算法的樹狀圖等,需要利用matplotlib庫實現繪制,這個庫是科學計算中常見的可視化庫,可以引用在“計算生態”章節。
上述給出了數據挖掘與機器學習課程部分章節內容如何與Python 課程相融合。同樣在其他專業課程中,也會存在相應的需求,需要逐一梳理。這項跨團隊的工作,需要教師團隊深入到專業課程建設中,挖掘經典、高效的案例素材,切實做到通識課程和專業課程建設的連貫性,能夠讓學生很好地進行學科之間的遷移。
需要注意的是在案例的選取和講解過程中需避免過于生硬,不能為了引入而強行引入。要多用對比,比如在講解numpy 庫時,先利用list 列表,計算多元一次方程的求解問題,然后再引入numpy庫進行求解,通過對比讓學生感受numpy庫處理數據過程的高效性。再比如講解pandas庫時,可以先后利用open函數和pandas庫讀取csv文件,然后對數據進行處理,凸顯pandas庫的強大和高效。
引入新的知識點,就意味著有新的挑戰,如果案例的設計不夠吸引學生,反而會適得其反。下面將進一步提出采用任務驅動教學模式,旨在提高教學質量。
上一小節以數據挖掘與機器學習課程為例,給出專業課程與Python 程序設計基礎課程之間知識體系的融合方案。教學內容明確后,還需要設計好教學任務,從而驅動學生學習。好的任務設計,可以很好地激發學生內在學習動力,同時也能讓課程教學主線明確,結構清晰。良好的教學任務設計應該滿足以下幾點原則:
1)基于Python課程教學計劃
依據專業課程,在Python 知識架構中,構建新的案例,但是需要注意的是,這些案例知識點一定是依據原有的教學計劃,比如pillow、numpy 等第三方庫,不要為了結合專業課程,將教學內容復雜化,甚至超綱。Python課程內容的設計是依據課程教學計劃,結合專業課程的教學實際,構建合理的案例,并且能夠和現有的知識有機融合。
2)簡單到深入層層遞進
案例應該由淺入深,層層遞進,不要割裂知識結構,要抓住主線。比如,在組合數據類型章節中引入numpy,不是為了講解矩陣計算,而是為了引入一種全新的組合數據類型,這種類型不是Python內置的數據類型。先通過對list案例的設計,逐步引出numpy這種新的組合數據類型,結合案例,分析矩陣類型處理數據的特點,培養學生矩陣處理數據的思維方式。再比如,在講解pillow庫時,要明確pillow庫是為了處理二進制文件,而圖片是最常見的二進制文件。open函數可以讀取二進制文件,但是無法對里面的bit流進行高效解析,除非精通圖片的壓縮算法,否則需要借助第三方庫。總之,案例的引入,要抓住教學主線,由淺入深。
3)有對比有啟發
案例的設計要有對比,通過對比,學生能夠得到很好的啟發,理解為什么這么用,達到綜合創造的層次(布魯姆教育分類法的后兩層),也就是進一步地改進問題。比如numpy 庫可以和原有的list 對比,pillow處理后的圖片和處理前的圖片對比;pandas和原生的open函數對比等。
結合上述原則,對Python課程的教學案例進行設計,案例如表1 所示,這里篇幅原因,給出前3 章節的知識架構。通過對專業課程知識的梳理,引導程序設計課程案例的構建,將大數據工程專業領域的知識技能很好地融入Python課程教學中。

表1 任務驅動教學模式下案例設計
課程的評價如圖2 所示,包含期末成績和過程性成績,過程性成績中有實驗、期中等。為激發學生的學習動力,提出新的指標“創新實踐”。“創新實踐”指標的難點在于如何衡量“創新”,以及如何評價“創新”。

圖2 課程考核方式
編程的創新可以分為算法上的創新和應用創新。算法創新又可以進一步分為:
1)減少代碼量,比如100行的代碼用50行實現;
2)挖掘已有方法的新功能,比如sum 函數,可以設置第二個參數作為初始值;
3)降低算法復雜度,比如對素數求解問題,給出新的高效的算法。
應用上的創新,可以有:
1) 利用現有的知識解決實際問題,比如利用turtle庫設計一個倒計時;
2)挖掘新的有意思的第三方庫,比如二維碼生成庫、Office辦公類的庫、GUI開發庫等。
明確好創新類型后,梳理每個章節的知識點,給出可以創新的具體評價指標,并給出分值,如表2所示。
這些指標及內容可以在授課前,就給學生明確,這樣更有利于學生的主動思考。同時,需要積極反饋學生的成果,好的作品、好的思路需要作為模板共享給學生,這樣一方面能給學生明確創新方向,還能激發學生之間的競爭力。
在大數據工程專業教學過程中,學生對Python語言掌握不精,實驗內容不能高效開展,主要原因是課程內容脫離專業實踐、授課對象缺乏主觀能動以及考核評價沒有專業特色。針對上述問題,給出基于大數據工程專業人才培養目標的Python 語言教學方法的探索。在教學內容方面,結合專業背景,設計與數據處理相關的教學內容,以數據挖掘與機器學習專業課程為例,梳理出和程序設計相關的知識,設計出專業背景下的教學案例,融合到Python 教學內容中;在教學模式方面,采用任務驅動式的教學模式,旨在提高教學質量,在實驗課環節,分析教學目標,設計實驗任務,通過任務驅動,引導學生自主學習,激發學生學習的興趣;在評價指標方面,明確基于創新驅動的評價指標,旨在激發學生學習動力,通過構建創新指標,規定創新點,確定評價指標。通過對Python語言教學內容的設計,激發學生學習的主動性,提高教學質量,為后續專業課程中實驗內容的高效開展打下良好基礎。

表2 創新驅動評價指標