劉海橋,袁丹丹
(海軍工程大學電子工程學院,湖北武漢 430000)
隨著科技的發(fā)展,計算機成為各領域不可或缺的計算工具[1]。程序設計基礎是大學生了解計算機,學習算法,建立計算思維非常重要的通識課程[2]。由于Python語言具有簡單、高效、跨平臺等特點,逐漸成為相關專業(yè)的首選程序設計語言,學生可以不必拘泥于底層的實現(xiàn),而是更好地關注問題本身,更高效地設計算法[3]。與此同時,學生的編程能力也將直接影響相關專業(yè)課程的開展,比如算法與數(shù)據(jù)結構、數(shù)據(jù)挖掘與機器學習、數(shù)據(jù)可視化等課程。
隨著大數(shù)據(jù)技術的應用,大數(shù)據(jù)工程專業(yè)要求學生掌握大數(shù)據(jù)技術原理、數(shù)據(jù)挖掘、數(shù)據(jù)可視化等方面的專業(yè)知識,涉及的專業(yè)課程包含數(shù)據(jù)挖掘與機器學習、人工智能、數(shù)據(jù)可視化等,而這些專業(yè)課程在實驗開展環(huán)節(jié)都需要借助程序設計語言,首選的便是Python 語言。所以學生的Python 編程能力一定程度上決定了專業(yè)課實驗能否高效地開展。
現(xiàn)有的Python 語言教學,主要圍繞語法、算法及簡單應用展開,與后繼專業(yè)課程結合度較低,脫離專業(yè)的應用背景。如何將通識課程與專業(yè)課程建設進行交叉融合,對培養(yǎng)綜合型人才具有重要意義[5-6],所以基于大數(shù)據(jù)工程專業(yè)人才培養(yǎng)目標對Python 語言教學方法進行探索很有必要。本文分析了Python 語言課程現(xiàn)狀,結合數(shù)據(jù)挖掘與機器學習專業(yè)課程教學,從教學內容、教學模式、評價指標三個方面對Python語言教學方法進行探索,以期專業(yè)課實驗的高效開展。
大數(shù)據(jù)工程專業(yè)首選的編程語言是Python語言,所學習的便是Python語言程序設計基礎,根據(jù)人才培養(yǎng)目標,后續(xù)會接觸很多和數(shù)據(jù)處理、挖掘、可視化等相關的專業(yè)課程。從教學效果看,學生對Python語言的掌握不透徹,不具備實現(xiàn)復雜算法的編程能力,從而影響專業(yè)課實驗的高效開展。下面結合專業(yè)本身和Python 語言教學,對這一現(xiàn)狀產生的原因進行梳理。
Python 語言程序設計基礎課程的教學總體目標是通過課程內容的學習,使得學生能夠掌握程序設計的基本方法,具備程序設計、編寫、維護的能力,使用Python語言解決實際問題的手段,同時具備基于生態(tài)的編程思維方式。鑒于此,課程明確三層目標:知識層、能力層和思維層。比如在能力層,要求學生掌握pyinstaller 庫、jieba 分詞庫的應用,同時要求學生能夠將Python語言運用在人機交互、網(wǎng)絡爬蟲等專業(yè)特色不明顯的應用場景。
課程的教學目標和教學內容的結構清晰,通過學生提交的作品,可以看出學生具備了利用Python語言解決簡單問題的能力。但是在專業(yè)課的教學過程中,可以發(fā)現(xiàn)學生缺乏對一些基礎的數(shù)據(jù)處理庫的掌握與應用,使得實驗開展過程中,需要花費大量時間講解這些基礎庫的用法,影響實驗的高效開展。
上述問題出現(xiàn)的原因在于Python 語言課程的內容設計上,沒有考慮到專業(yè)特色,沒有相關生態(tài)庫的介紹和鋪墊,沒有培養(yǎng)學生利用科學計算相關庫的編程習慣。
學生舉一反三的能力較弱,習慣于被動地接受知識,編程的主動性難以調動。此外,學生創(chuàng)新實踐能力較弱,現(xiàn)有的考核內容,很難檢驗學生編程的綜合能力。
現(xiàn)有的考核方式包含形成性考核和終結性考核。在考核內容方面,主要參考計算機等級考試二級的題型,比如在綜合應用方面,主要考核文本的分析及處理、簡單的算法設計、Turtle繪圖等。這些考核內容不能體現(xiàn)專業(yè)特色,比如缺乏對數(shù)據(jù)的預處理、對表格文件和圖片文件的讀取和分析等知識的考核,而這些專業(yè)知識在后續(xù)專業(yè)課程的教學中至關重要。
首先在教學內容上,重新梳理知識體系,保留基本語法、程序結構、綜合應用三層結構不變,并在原有課程內容的基礎上,思考如何與后繼專業(yè)課程相結合。為此,需要分析大數(shù)據(jù)工程專業(yè)課程的教學計劃,從中提煉出與專業(yè)知識關聯(lián)性不強,但在專業(yè)課實驗開展過程中不可或缺的Python編程知識,比如涉及的生態(tài)庫等知識,然后結合Python 課程的知識架構,將這些提煉出的知識點融入Python教學中。這樣不僅能夠加強Python教學的實踐性,還能為后續(xù)專業(yè)課實驗的開展做好鋪墊。
其次在教學方法上,注重任務驅動教學模式。根據(jù)教學目標,合理設計任務,激發(fā)學生解決問題的好奇心和內在動力,引導學生認真聽課,積極思考,主動編程。通過任務驅動的教學模式,學生能夠更好地掌握知識,發(fā)現(xiàn)問題并解決問題。
此外,為了提高學生編程的主動性,除了任務驅動的教學模式,合理的考核指標也相當重要。課程現(xiàn)有的形成性考核占比40%,主要包含學生的實驗、課堂表現(xiàn)、期中成績?,F(xiàn)基于成果導向原則,可以將課堂表現(xiàn)的10%分值改為創(chuàng)新實踐,用于檢驗學生編程的綜合能力。教學過程、教學方法最終要通過學生的學習成果來檢驗,所以學生掌握知識的程度才是衡量教學效果最有力的指標。
為符合大數(shù)據(jù)工程專業(yè)人才培養(yǎng)目標,使得學生能夠很好地完成后續(xù)專業(yè)課程的高效開展,需要將專業(yè)課程中相關知識,進行合理劃分,對Python 課程教學內容進行有效融合。首先需要對大數(shù)據(jù)工程的專業(yè)課程進行分析。大數(shù)據(jù)工程專業(yè)的課程建設如圖1所示,主要分3層,可以看出程序設計基礎是眾多專業(yè)課程的核心通識課程。
以數(shù)據(jù)挖掘與機器學習課程為例,課程的內容包含模型評估、降維等數(shù)學理論知識,以及大量的機器學習算法,比如決策樹、神經(jīng)網(wǎng)絡、支持向量機等。下面對數(shù)據(jù)挖掘與機器學習這門專業(yè)課程中的內容進行分析、提煉。
在模型評估章節(jié),主要講解評估方法、性能度量等指標,這些內容更多的是涉及數(shù)值的計算,比如查全率、查準率、方差、標準差計算等,可以將其作為案例應用在Python 語言程序設計課程的“數(shù)值類型”章節(jié);而錯誤率、精度是機器學習過程中計算最為頻繁的指標,可以應用在“組合數(shù)據(jù)類型”章節(jié),從而有效地將專業(yè)課程與通識課程相結合。
在線性模型章節(jié),主要講解線性回歸、線性判別分析等內容,這個章節(jié)需要使用numpy庫進行矩陣的運算。結合Python 課程教學內容,可以在“組合數(shù)據(jù)類型”章節(jié)中引入numpy庫,利用二元一次方程,凸顯numpy 庫的強大功能。需要注意的是,numpy 庫已經(jīng)被列入計算機等級二級考試的提綱,對numpy庫的學習變得很有必要,尤其是大數(shù)據(jù)工程專業(yè),更應具備使用numpy庫的編程實踐能力。
圖1 大數(shù)據(jù)工程專業(yè)的課程建設(部分)
在決策樹章節(jié),主要講解如何構建決策樹。決策樹算法在數(shù)據(jù)預處理階段需要對數(shù)據(jù)進行讀取、去除無效數(shù)據(jù)等操作,而這些操作都需使用pandas 庫,那么對應的可以放在Python 課程的“二維文本文件處理”章節(jié),通過和內置的open函數(shù)作比較,讓學生感受pandas處理數(shù)據(jù)的高效性,同時讓學生具備數(shù)據(jù)預處理的能力。
在神經(jīng)網(wǎng)絡章節(jié),主要講解感知機和簡單的BP神經(jīng)網(wǎng)絡,這里采用手寫字體識別案例,涉及對圖片數(shù)據(jù)的處理,所以需要講解pillow庫,這個庫可以放在Python 語言程序設計課程的“二進制文件處理”章節(jié)講解,讓學生了解圖片數(shù)據(jù)的本質,以及如何將圖片數(shù)據(jù)轉換為numpy數(shù)據(jù)。
在支持向量機章節(jié),主要講解支持向量機的推導過程及對偶問題。關于對偶問題的求解,需要利用SMO 算法,而SMO 算法本質上就是一個while 循環(huán)算法,可以作為案例應用在Python語言程序設計課程的“循環(huán)”章節(jié)。但是需要對問題進行簡化處理,目的是脫離SMO 算法本身,讓學生體會while 循環(huán)語句的應用場景。同樣的,在聚類章節(jié),K-Means 算法也涉及while循環(huán)語句的思想,也可以引入到“循環(huán)”章節(jié)作為案例使用。
在機器學習算法求解過程中涉及的圖表,比如柱狀圖、協(xié)方差圖、AGNES 算法的樹狀圖等,需要利用matplotlib庫實現(xiàn)繪制,這個庫是科學計算中常見的可視化庫,可以引用在“計算生態(tài)”章節(jié)。
上述給出了數(shù)據(jù)挖掘與機器學習課程部分章節(jié)內容如何與Python 課程相融合。同樣在其他專業(yè)課程中,也會存在相應的需求,需要逐一梳理。這項跨團隊的工作,需要教師團隊深入到專業(yè)課程建設中,挖掘經(jīng)典、高效的案例素材,切實做到通識課程和專業(yè)課程建設的連貫性,能夠讓學生很好地進行學科之間的遷移。
需要注意的是在案例的選取和講解過程中需避免過于生硬,不能為了引入而強行引入。要多用對比,比如在講解numpy 庫時,先利用list 列表,計算多元一次方程的求解問題,然后再引入numpy庫進行求解,通過對比讓學生感受numpy庫處理數(shù)據(jù)過程的高效性。再比如講解pandas庫時,可以先后利用open函數(shù)和pandas庫讀取csv文件,然后對數(shù)據(jù)進行處理,凸顯pandas庫的強大和高效。
引入新的知識點,就意味著有新的挑戰(zhàn),如果案例的設計不夠吸引學生,反而會適得其反。下面將進一步提出采用任務驅動教學模式,旨在提高教學質量。
上一小節(jié)以數(shù)據(jù)挖掘與機器學習課程為例,給出專業(yè)課程與Python 程序設計基礎課程之間知識體系的融合方案。教學內容明確后,還需要設計好教學任務,從而驅動學生學習。好的任務設計,可以很好地激發(fā)學生內在學習動力,同時也能讓課程教學主線明確,結構清晰。良好的教學任務設計應該滿足以下幾點原則:
1)基于Python課程教學計劃
依據(jù)專業(yè)課程,在Python 知識架構中,構建新的案例,但是需要注意的是,這些案例知識點一定是依據(jù)原有的教學計劃,比如pillow、numpy 等第三方庫,不要為了結合專業(yè)課程,將教學內容復雜化,甚至超綱。Python課程內容的設計是依據(jù)課程教學計劃,結合專業(yè)課程的教學實際,構建合理的案例,并且能夠和現(xiàn)有的知識有機融合。
2)簡單到深入層層遞進
案例應該由淺入深,層層遞進,不要割裂知識結構,要抓住主線。比如,在組合數(shù)據(jù)類型章節(jié)中引入numpy,不是為了講解矩陣計算,而是為了引入一種全新的組合數(shù)據(jù)類型,這種類型不是Python內置的數(shù)據(jù)類型。先通過對list案例的設計,逐步引出numpy這種新的組合數(shù)據(jù)類型,結合案例,分析矩陣類型處理數(shù)據(jù)的特點,培養(yǎng)學生矩陣處理數(shù)據(jù)的思維方式。再比如,在講解pillow庫時,要明確pillow庫是為了處理二進制文件,而圖片是最常見的二進制文件。open函數(shù)可以讀取二進制文件,但是無法對里面的bit流進行高效解析,除非精通圖片的壓縮算法,否則需要借助第三方庫。總之,案例的引入,要抓住教學主線,由淺入深。
3)有對比有啟發(fā)
案例的設計要有對比,通過對比,學生能夠得到很好的啟發(fā),理解為什么這么用,達到綜合創(chuàng)造的層次(布魯姆教育分類法的后兩層),也就是進一步地改進問題。比如numpy 庫可以和原有的list 對比,pillow處理后的圖片和處理前的圖片對比;pandas和原生的open函數(shù)對比等。
結合上述原則,對Python課程的教學案例進行設計,案例如表1 所示,這里篇幅原因,給出前3 章節(jié)的知識架構。通過對專業(yè)課程知識的梳理,引導程序設計課程案例的構建,將大數(shù)據(jù)工程專業(yè)領域的知識技能很好地融入Python課程教學中。
表1 任務驅動教學模式下案例設計
課程的評價如圖2 所示,包含期末成績和過程性成績,過程性成績中有實驗、期中等。為激發(fā)學生的學習動力,提出新的指標“創(chuàng)新實踐”。“創(chuàng)新實踐”指標的難點在于如何衡量“創(chuàng)新”,以及如何評價“創(chuàng)新”。
圖2 課程考核方式
編程的創(chuàng)新可以分為算法上的創(chuàng)新和應用創(chuàng)新。算法創(chuàng)新又可以進一步分為:
1)減少代碼量,比如100行的代碼用50行實現(xiàn);
2)挖掘已有方法的新功能,比如sum 函數(shù),可以設置第二個參數(shù)作為初始值;
3)降低算法復雜度,比如對素數(shù)求解問題,給出新的高效的算法。
應用上的創(chuàng)新,可以有:
1) 利用現(xiàn)有的知識解決實際問題,比如利用turtle庫設計一個倒計時;
2)挖掘新的有意思的第三方庫,比如二維碼生成庫、Office辦公類的庫、GUI開發(fā)庫等。
明確好創(chuàng)新類型后,梳理每個章節(jié)的知識點,給出可以創(chuàng)新的具體評價指標,并給出分值,如表2所示。
這些指標及內容可以在授課前,就給學生明確,這樣更有利于學生的主動思考。同時,需要積極反饋學生的成果,好的作品、好的思路需要作為模板共享給學生,這樣一方面能給學生明確創(chuàng)新方向,還能激發(fā)學生之間的競爭力。
在大數(shù)據(jù)工程專業(yè)教學過程中,學生對Python語言掌握不精,實驗內容不能高效開展,主要原因是課程內容脫離專業(yè)實踐、授課對象缺乏主觀能動以及考核評價沒有專業(yè)特色。針對上述問題,給出基于大數(shù)據(jù)工程專業(yè)人才培養(yǎng)目標的Python 語言教學方法的探索。在教學內容方面,結合專業(yè)背景,設計與數(shù)據(jù)處理相關的教學內容,以數(shù)據(jù)挖掘與機器學習專業(yè)課程為例,梳理出和程序設計相關的知識,設計出專業(yè)背景下的教學案例,融合到Python 教學內容中;在教學模式方面,采用任務驅動式的教學模式,旨在提高教學質量,在實驗課環(huán)節(jié),分析教學目標,設計實驗任務,通過任務驅動,引導學生自主學習,激發(fā)學生學習的興趣;在評價指標方面,明確基于創(chuàng)新驅動的評價指標,旨在激發(fā)學生學習動力,通過構建創(chuàng)新指標,規(guī)定創(chuàng)新點,確定評價指標。通過對Python語言教學內容的設計,激發(fā)學生學習的主動性,提高教學質量,為后續(xù)專業(yè)課程中實驗內容的高效開展打下良好基礎。
表2 創(chuàng)新驅動評價指標