駱劍平 鄭能恒 鄒文斌 何志權(quán)
摘 ?要:Matlab和Python程序設(shè)計課程包含兩門編程語言。這門課的授課對象主要是大二大三的學(xué)生,授課對象已在大一大二學(xué)習(xí)過C語言程序設(shè)計以及面向?qū)ο蟪绦蛟O(shè)計(C++程序設(shè)計),因此學(xué)生需要面對Matlab、Python、C以及C++等多門編程語言所構(gòu)成的知識編織網(wǎng),存在類似知識相互糾纏的困惑難題。針對該特點,文章對該課程的教學(xué)做大膽探索,精心設(shè)計課程教學(xué)內(nèi)容,提出“比較式教學(xué)、案例式培養(yǎng)、對象式傳授、深入式鞏固”為主線的Matlab與Python課程教學(xué)模式。通過比較式教學(xué)解決相似知識之間模糊糾纏的困惑;案例式培養(yǎng)根據(jù)問題培養(yǎng)學(xué)生的整體編程思維;對象式傳授和互動式提高措施因材施教,激活學(xué)生學(xué)習(xí)熱情,培養(yǎng)編程興趣,提高教學(xué)效率;深入式鞏固進(jìn)一步加固學(xué)生課堂學(xué)習(xí)到的內(nèi)容。
關(guān)鍵詞:Python;Matlab;教學(xué)探索
中圖分類號:G640 ? ? ?文獻(xiàn)標(biāo)志碼:A ? ? ? ? ?文章編號:2096-000X(2022)18-0135-04
Abstract: The programming course of Matlab and Python contains 2 programming languages. This course is mainly taught to sophomore and junior students, who have already learned C language programming and object-oriented programming (C programming) in the sophomore year. Therefore, students need to face the knowledge weaving web formed by Matlab, Python, C and C++, which has the confusion problem of similar knowledge entanglement. In view of this characteristic, this paper makes a bold exploration of the teaching of this course, carefully designs the course teaching content, and puts forward the Matlab and Python course teaching mode of "comparative teaching, case training, object teaching, in-depth consolidation" as the main line to solve the confusion of similar knowledge through comparative teaching; case training cultivates students' overall programming thinking according to problems; object teaching and interactive improvement measures are used to teach students in accordance with their aptitude, activate students' learning enthusiasm, cultivate programming interest, improve teaching efficiency; and further strengthen the content that students learn in class.
Keywords: Python; Matlab; teaching and exploration
Matlab與Python程序設(shè)計課程是深圳大學(xué)電子與信息工程學(xué)院面向全校相關(guān)專業(yè)開設(shè)的一門專業(yè)基礎(chǔ)課程。本課程與深圳大學(xué)電子與信息工程學(xué)院相關(guān)專業(yè)具有很好的融合性,是實現(xiàn)計算機專業(yè)信息化的主要工具之一。在人工智能為代表的高新技術(shù)蓬勃發(fā)展的今天,由于Python和Matlab廣泛應(yīng)用于相關(guān)領(lǐng)域的程序開發(fā)和構(gòu)建過程(比如目前深度學(xué)習(xí)框架中廣泛采用Python編程),這門課程的開設(shè)具有特殊的意義。通過學(xué)習(xí)使用Matlab與Python程序設(shè)計語言編寫程序,使學(xué)生理解相關(guān)編程語言的核心知識,掌握正確的程序設(shè)計方法,養(yǎng)成良好的程序設(shè)計思維;結(jié)合案例上機實踐,培養(yǎng)學(xué)生從整個案例工程的角度審視和思考程序整體構(gòu)建和運行方式的能力,進(jìn)一步提升動手編程能力,并能夠運用這些思想、方法和技巧,開發(fā)和使用Matlab與Python應(yīng)用程序,解決一些實際工作中的問題,從而使學(xué)生具備應(yīng)用編程知識解決相關(guān)實際工程應(yīng)用問題的能力。
Matlab編程語言是集數(shù)值計算、符號計算和可視化計算于一體的大型科學(xué)與工程計算綜合軟件。它是一款腳本解釋型語言,具有良好的人機交互編程界面。Matlab編程語言最典型的特征是它包含眾多的計算資源庫,其中包括各類數(shù)值計算、圖形圖像處理、機器學(xué)習(xí)、智能仿真等。用戶只需要編寫非常簡單的代碼即可調(diào)用底層極其復(fù)雜的各類庫函數(shù),極大提升用戶的開發(fā)和仿真效率。雖然它在運行速度上相較于傳統(tǒng)C、C++語言要慢,但目前它已經(jīng)支持和C、C++代碼之間的轉(zhuǎn)換功能,具有良好的拓展性和通用性。Python編程語言是一種面向?qū)ο缶幊痰哪_本型語言,它具有非常簡潔和高效的編程結(jié)構(gòu)邏輯。目前有眾多科學(xué)計算庫如NumPy、matplotlib都提供了Python調(diào)用的接口,使得Python編程語言逐漸流行。近些年,機器學(xué)習(xí)領(lǐng)域幾個大的平臺,如torch,tensorflow都建議首選Python接口編程,使得Python課程語言在人工智能領(lǐng)域成為使用最廣泛的語言。Matlab與Python程序設(shè)計這門課程同時包含了兩門主流編程語言,受到學(xué)生廣泛的認(rèn)可和歡迎??梢灶A(yù)見未來這門混合型課程將會在越來越多的高校工科專業(yè)課程中開設(shè)。
Matlab與Python兩種編程語言受到工程技術(shù)人員和專家學(xué)者的廣泛青睞[1-3],眾多高等院校相續(xù)開設(shè)了相關(guān)課程。目前深圳大學(xué)電子與信息工程學(xué)院開設(shè)此課程教學(xué)中仍存在幾個主要缺點:(1)這門課程授課對象學(xué)生在大一大二已經(jīng)學(xué)習(xí)過C和C++語言,因此他們處于由Matlab、Python、C以及C++等多門語言所構(gòu)成的混合編織網(wǎng)之中,不同編程語言存在相通之處,也存在明顯不同,學(xué)生學(xué)習(xí)過程容易在其中產(chǎn)生記憶模糊和混淆;(2)相對于分配的課時,教學(xué)內(nèi)容偏多且紛雜,學(xué)生很難在有限時間內(nèi)掌握核心內(nèi)容;(3)學(xué)生學(xué)習(xí)目標(biāo)不明確,學(xué)習(xí)態(tài)度消極;(4)教學(xué)的方式方法使學(xué)生缺少獨立思考的機會;(5)教學(xué)內(nèi)容和實際案例脫節(jié),很難做到內(nèi)容聯(lián)系實際。因此,這門課程面臨多門編程語言混合、理論課和實踐課混合、內(nèi)容多、課時緊等這些問題,若采用傳統(tǒng)的教學(xué)方法進(jìn)行教學(xué),學(xué)生不容易甄別重點知識內(nèi)容之間的區(qū)別和聯(lián)系,從而容易陷入由相似知識組成的知識旋渦而不能自拔。學(xué)生學(xué)習(xí)效率低下,從而導(dǎo)致學(xué)習(xí)意愿低下、厭學(xué),而這又進(jìn)一步加劇學(xué)習(xí)效果的下降[4-5]。針對這些問題,作者在該課程的教學(xué)方面積極探索,精心挑選和設(shè)計課程教學(xué)內(nèi)容,提出以“比較式教學(xué)、案例式培養(yǎng)、對象式傳授、深入式鞏固”為主線的Matlab與Python課程教學(xué)模式。
一、編排課程核心教學(xué)內(nèi)容
(一)以數(shù)據(jù)結(jié)構(gòu)和過程設(shè)計組織課堂內(nèi)容
目前Matlab與Python兩門編程語言有兩本教材,內(nèi)容眾多,而課時卻每周僅有2個學(xué)時。因此,需要在教材的基礎(chǔ)上挑選和組織兩門語言最重要的核心內(nèi)容作為主要內(nèi)容。圍繞挑選的主要內(nèi)容組織相關(guān)的教學(xué)學(xué)習(xí)和案例教學(xué),讓學(xué)生根據(jù)主要內(nèi)容掌握這兩門編程語言的編程精髓和使用方法,培養(yǎng)對這兩門語言的興趣。由于這門課的授課對象已有一定編程基礎(chǔ),因此,挑選組織內(nèi)容的主要策略是:淡化語法基礎(chǔ)、加強數(shù)據(jù)結(jié)構(gòu)、強化過程設(shè)計這三方面。每個編程語言的核心就是數(shù)據(jù)結(jié)構(gòu)和過程設(shè)計這兩方面,要圍繞這兩個核心安排章節(jié)內(nèi)容和講授內(nèi)容。數(shù)據(jù)結(jié)構(gòu)主要是關(guān)于數(shù)據(jù)的組織形式和表達(dá)方法在編程語言中的具體實現(xiàn),不同的編程語言有不同的形式、要義和特點,也有共通的地方,這是理解和掌握編程語言的第一個核心。過程設(shè)計是利用數(shù)據(jù)結(jié)構(gòu)和語法基礎(chǔ)實現(xiàn)程序框架,這是程序的具體功能實現(xiàn)過程,也是理解和掌握編程語言的第二個核心。抓住這兩個核心對Matlab與Python各組織兩章內(nèi)容分別重點講授這兩個核心。經(jīng)過一個教學(xué)學(xué)年的檢驗,該課程內(nèi)容設(shè)計能讓學(xué)生有效抓住課程的核心內(nèi)容,圍繞核心內(nèi)容展開學(xué)習(xí)并掌握核心知識。
(二)從科研活動中抽取組織實驗課內(nèi)容
由于這門課的授課對象主要是大二大三的學(xué)生,他們在大一大二已經(jīng)學(xué)習(xí)過C語言程序設(shè)計以及面向?qū)ο蟪绦蛟O(shè)計(C++程序設(shè)計),已經(jīng)對編程基本原理和過程有一定理解和掌握,因此實驗課應(yīng)該重點提升學(xué)生程序設(shè)計的綜合能力和實際解決問題能力。目前的實驗課內(nèi)容都是一些非常小的程序針對某個函數(shù)或功能的實現(xiàn),知識碎片化、重復(fù)性表現(xiàn)突出,不利于培養(yǎng)學(xué)生宏觀思考程序設(shè)計的思維,因此需要對實驗課重新設(shè)計實驗編程的內(nèi)容。本課程主要從目前本人相關(guān)科研活動中抽取和組織一些實際案例和題目供學(xué)生實驗,比如對于Python組織了模式識別(人臉識別、手寫體識別、車牌識別等)相關(guān)的Python編程實驗;Matlab部分也組織類似的實驗,比如五層卷積神經(jīng)網(wǎng)絡(luò)的構(gòu)建、殘差網(wǎng)絡(luò)的實現(xiàn)等相關(guān)內(nèi)容。課后總結(jié)發(fā)現(xiàn)學(xué)生可以很好地根據(jù)這些實驗掌握相關(guān)的實驗內(nèi)容,提升了學(xué)生實際動手編程能力。
二、設(shè)計科學(xué)合理的教學(xué)方法
(一)比較式教學(xué)
這門課程授課對象處于由Matlab、Python、C以及C++等多門編程語言所構(gòu)成的內(nèi)容編織網(wǎng)之中。有些人還學(xué)習(xí)過其他編程語言,那么這個編織網(wǎng)可能更大更復(fù)雜。如何讓學(xué)生從復(fù)雜容易出錯的編織網(wǎng)糾纏中解脫出來是這門課程面臨的教學(xué)難題。本課程設(shè)計了比較式教學(xué)方法,即對類似的內(nèi)容用不同編程語言的角度進(jìn)行講授和闡述,以甄別它們之間的特點和差異,讓學(xué)生學(xué)習(xí)通過比較來提高記憶辨識度,從而達(dá)到擺脫對不同語言記憶糾纏不清的困惑,提升對它們之間共性的了解,進(jìn)一步對各種語言達(dá)到融會貫通的水平。比如在講函數(shù)參數(shù)傳遞這個知識點時,C、Matlab和Python三門語言有相同的地方,也有各自不同之處。參數(shù)都是基于拷貝機制,但拷貝的內(nèi)容卻有本質(zhì)區(qū)別。有的傳遞地址信息,有的傳遞數(shù)據(jù)本身,有的傳送容器。通過比較式教學(xué),學(xué)生可以很好地體會其中的關(guān)鍵本質(zhì)。由于作者之前講授過C語言程序設(shè)計和C++程序設(shè)計這些課程,因此對比較式教學(xué)的過程組織和實施效果較好。
(二)案例式培養(yǎng)
Matlab與Python程序設(shè)計課程授課的核心任務(wù)是讓學(xué)生掌握這兩門課程的核心編程知識,從而可以編程解決實際工程問題。我們這門課程是案例式培養(yǎng),即是致力于解決精心挑選的實際工程應(yīng)用問題來編排和設(shè)計課程內(nèi)容。讓學(xué)生直接建立編程知識和實際問題之間的聯(lián)系,這有利于讓學(xué)生了解學(xué)習(xí)編程的目的,提升他們的學(xué)習(xí)興趣,從而建立有的放矢的良性反饋學(xué)習(xí)機制,提高學(xué)生的學(xué)習(xí)效率。本課程采用案例式培養(yǎng),有意識引入與當(dāng)前社會發(fā)展以及日常生活密切相關(guān)的一些實際待解決的工程問題,使學(xué)生有效地對要解決的問題和需要學(xué)習(xí)的知識建立初步直觀的認(rèn)識。比如在講Python機器學(xué)習(xí)編程部分,我們以車牌識別作為案例。分析了普通車牌識別技術(shù)在不同天氣狀況、照明情況下存在的識別困難。為提高識別率,需要更深的卷積網(wǎng)絡(luò)來提取車牌的特征,做到更深層次的內(nèi)容獲取與識別,而構(gòu)建深度卷積網(wǎng)絡(luò)可以方便通過Python編程來實現(xiàn)。由于學(xué)生是有目的地帶著疑問進(jìn)行聽課,因此更能理解老師講授內(nèi)容的重點與難點,學(xué)習(xí)積極性提高了,課堂的學(xué)習(xí)氛圍也得到加強。另外我們課程組也鼓勵學(xué)生通過參加各類競賽、挑戰(zhàn)賽把課程和實踐結(jié)合起來。這些挑戰(zhàn)賽通常會提供一些基礎(chǔ)案例Demon,同學(xué)們可以結(jié)合這些基礎(chǔ)案例進(jìn)行入門學(xué)習(xí)和知識學(xué)習(xí)。本課程結(jié)合實例進(jìn)行講解,提高學(xué)生對問題的認(rèn)識能力,并且使所學(xué)知識用于解決實際問題,有效鍛煉學(xué)生的實際編程動手能力。
(三)對象式傳授
對象式傳授,即是需要針對不同的學(xué)生群體在一些特色教學(xué)環(huán)節(jié)選擇不一樣的教學(xué)內(nèi)容和教學(xué)手段。本課程授課對象大體可以分為電子工程專業(yè)、通信專業(yè)、微電子專業(yè)和集成電路四個專業(yè)的學(xué)生。前兩個專業(yè)以后的就業(yè)方向可能更多偏向軟件,而微電子和集成電路專業(yè)的學(xué)生可能更偏向硬件多一些。對于前兩個專業(yè)學(xué)生需要在整體程序設(shè)計方面要求更高,學(xué)習(xí)主要目標(biāo)是利用Matlab與Python進(jìn)行專業(yè)綜合設(shè)計及應(yīng)用。因此,對于這類學(xué)生在授課內(nèi)容的選擇上除了基礎(chǔ)的編程知識之外,更需要注意選擇綜合性更強的系統(tǒng)設(shè)計類內(nèi)容。在教學(xué)方法上也更強調(diào)對整體問題的認(rèn)識,注重鍛煉培養(yǎng)他們系統(tǒng)綜合設(shè)計能力。對他們的考核也是以系統(tǒng)性問題解決為抓手,突出問題綜合解決能力的考核。對于微電子和集成電路專業(yè)的學(xué)生,學(xué)習(xí)主要目標(biāo)在于對一些局部問題的優(yōu)化和解決,拓寬學(xué)生的知識面。因此,對這部分專業(yè)的學(xué)生在組織授課內(nèi)容時以較小的工程應(yīng)用問題為主,有意識培養(yǎng)他們對于某個問題的優(yōu)化和求解方面的能力。在教學(xué)方法上也更強調(diào)學(xué)生局部優(yōu)化能力的培養(yǎng),注重學(xué)生對某個問題精益求精的解決思路。在考核時以基礎(chǔ)編程知識為主,突出對知識面的了解和對小型化問題的求解能力。對象式傳授有利于針對不同層次的學(xué)生準(zhǔn)確匹配合適的教學(xué)內(nèi)容和教學(xué)方法,使學(xué)生的學(xué)習(xí)效果收益最大化。
(四)互動式提高
互動式提高教學(xué),即是在教學(xué)過程中讓學(xué)生充分參與到具體教學(xué)過程的教學(xué)方式。Matlab與Python編程這門課程由理論課學(xué)時和實驗課學(xué)時相結(jié)合,課上學(xué)習(xí)和課后鞏固相結(jié)合,每個步驟都需要師生互動參與才能發(fā)揮最好的學(xué)習(xí)效果。課堂上的互動式學(xué)習(xí),主要是需要有針對性地設(shè)計課堂提問和回答環(huán)節(jié)讓學(xué)生融入到課堂。這門課程眾多知識點相互關(guān)聯(lián)又各有特點,我們重點針對容易混淆的知識點來設(shè)計提問環(huán)節(jié)。這不僅讓學(xué)生精力可以更好地聚焦在課堂上,通過提問還可以讓學(xué)生對重點知識起到重點理解和掌握的效果。實驗課的互動式學(xué)習(xí),主要是在實驗過程中老師參與到學(xué)生編寫代碼的過程之中。針對具體的實驗任務(wù),學(xué)生在編程實踐過程中有問題隨時向老師提問。這要求實驗課時老師不能在講臺被動等待,需要不斷游走在學(xué)生實驗電腦臺前回答學(xué)生問題,同時不斷發(fā)現(xiàn)問題,及時糾正并給予指導(dǎo)。通過師生之間互動交流共同完成實踐任務(wù)。課后的互動式學(xué)習(xí),我們主要是通過班級微信群來開展,老師根據(jù)教學(xué)內(nèi)容布置學(xué)習(xí)任務(wù)、作業(yè);學(xué)生有問題隨時在平臺提問,老師也留意學(xué)生意見反饋,第一時間回答問題。通過互動式學(xué)習(xí),讓師生一起全程高效率參與到教學(xué)過程中。
(五)深入式鞏固
深入式鞏固主要是對上課學(xué)習(xí)到的知識進(jìn)一步提升和鞏固的過程。本課程主要通過布置項目作業(yè)的方式開展。結(jié)合Matlab與Python編程的特點以及深圳大學(xué)電子與信息工程學(xué)院學(xué)生的將來就業(yè)情況,主要在人工智能、機器學(xué)習(xí)和智能仿真這幾個領(lǐng)域布置課后案例作業(yè),讓他們用所學(xué)的知識進(jìn)行實際編程來解決問題。程序設(shè)計課程和其他課程最顯著的區(qū)別是一定要實際動手編程才會掌握牢固,才能達(dá)到期望的收獲。因此深入式鞏固這個環(huán)節(jié)在這門課程的教學(xué)必不可少。比如其中的一個題目是“用Matlab和Python分別設(shè)計十層神經(jīng)卷積+殘差網(wǎng)絡(luò)實現(xiàn)Cifar數(shù)據(jù)庫的自動識別”。課程作業(yè)布置下去后,經(jīng)過在線答疑等環(huán)節(jié),一周后班上絕大多數(shù)同學(xué)都能獨立完成該作業(yè),寫出對應(yīng)的代碼并完成調(diào)試和測試,掌握了開發(fā)深度學(xué)習(xí)網(wǎng)絡(luò)的全流程。在完成較大作業(yè)時有些同學(xué)往往會有困難,這時老師提供的答疑通道非常重要。通過班級微信群來建立答疑平臺。本課程通過類似的深入鞏固式題目和教學(xué)方法,讓學(xué)生在實踐動手編程中對課程內(nèi)容達(dá)到熟練掌握的目的。
三、結(jié)束語
本課程圍繞:(1)如何在有限的教學(xué)時間內(nèi)設(shè)計難度適中、抓住核心重點的案例教學(xué)內(nèi)容;(2)如何在比較式教學(xué)中把握內(nèi)容的橫向比較而不會引起知識的混淆副作用;(3)如何設(shè)計合理的對象式教學(xué)方法等幾個核心問題,在以下方面給出了具體措施并付諸實際教學(xué),取得了很好效果。
精心設(shè)計課堂教學(xué)內(nèi)容,壓縮旁枝末節(jié),提煉核心內(nèi)容,抓住數(shù)據(jù)結(jié)構(gòu)和過程設(shè)計這兩門編程語言的精髓精心編排內(nèi)容,使得教學(xué)有的放矢;組織實驗課內(nèi)容解決目前實驗課內(nèi)容知識碎片化、重復(fù)性突出、不利于培養(yǎng)學(xué)生宏觀思考程序設(shè)計的思維的不足。
比較式教學(xué)通過對類似的內(nèi)容用不同編程語言的視角(Matlab、Python、C、以及C++)進(jìn)行講授和闡述,以甄別它們之間的特點和差異,讓學(xué)生學(xué)習(xí)通過比較來提高記憶辨識度,從而達(dá)到擺脫對不同語言記憶糾纏不清的困惑,提升對它們之間共性的了解,進(jìn)一步對各種語言達(dá)到融會貫通的水平。
案例式培養(yǎng)使得學(xué)生程序設(shè)計不再糾結(jié)于語法繁瑣的記憶,而是從整個案例工程的角度審視和思考程序的整體構(gòu)建和運行方式,培養(yǎng)用程序設(shè)計解決問題的整體思維。
對象式傳授措施因材施教,達(dá)到激活學(xué)生學(xué)習(xí)熱情、培養(yǎng)編程興趣、提高教學(xué)效率的目的。
參考文獻(xiàn):
[1]王穎杰,劉海媛.虛擬仿真軟件在電氣專業(yè)教學(xué)中的應(yīng)用與實踐[J].科技導(dǎo)刊,2020(33):37-38.
[2]王新良,馬耀博.基于Python語言的“人工智能”課程教學(xué)改革研究[J].科技導(dǎo)刊,2020(2):145-146.
[3]馬文秀,李焱.Python程序設(shè)計從知識型課程向能力培養(yǎng)型課程的改革實踐[J].電腦知識與技術(shù),2019,15(28):162-163+187.
[4]REMINGTON T L,BLESKE B E, BARTHOLOMEW T, et al. Qualitative analysis of student perceptions comparing team-based learning and traditional lecture in a pharmacotherapeutics course [J]. American Journal of Pharmaceutical Education,2017,81(3):1-9.
[5]SHIEH D. Theses lectures are gone in 60 seconds[J]. The Chronicle of Higher Education,2009(26):1-13.