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

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

表1 任務(wù)驅(qū)動(dòng)教學(xué)模式下案例設(shè)計(jì)
課程的評(píng)價(jià)如圖2 所示,包含期末成績和過程性成績,過程性成績中有實(shí)驗(yàn)、期中等。為激發(fā)學(xué)生的學(xué)習(xí)動(dòng)力,提出新的指標(biāo)“創(chuàng)新實(shí)踐”。“創(chuàng)新實(shí)踐”指標(biāo)的難點(diǎn)在于如何衡量“創(chuàng)新”,以及如何評(píng)價(jià)“創(chuàng)新”。

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

表2 創(chuàng)新驅(qū)動(dòng)評(píng)價(jià)指標(biāo)