杜蘭 陳琳琳 劉紅英 季曉君



摘 要:針對目前Python語言程序設計教學中學生興趣不高、參與度不足的問題,基于Python語言程序設計教學實際,引入項目驅動教學法,提出以抽簽系統作為一個連貫的實驗項目驅動教學改革思路,以點成線、以線鋪面、激發興趣、培養實踐、引導創新。實踐證明,這種教學方式能激發學生學習熱情,提高主觀能動性,提升應用能力,培養團隊協作能力,對程序設計課程改革有一定指導意義。
關鍵詞:Python語言;項目驅動;綜合應用能力
DOI:10. 11907/rjdk. 201738??????????????????????????????????????????????????????????????????????????????????????????????????????? 開放科學(資源服務)標識碼(OSID):
中圖分類號:G434 ?? 文獻標識碼:A?????????????????????????????? 文章編號:1672-7800(2020)011-0268-04
Research on Project-driven Python Course
DU Lan, CHEN Lin-lin, LIU Hong-ying, JI Xiao-jun
(School of Computer, Nanjing University of Science and Technology Zijin College, Nanjing 210023,China)
Abstract: Aiming at the problems of students low interest and insufficient participation in the course teaching of Python language programming, based on the teaching practice of Python language programming this paper introduces, the project driven teaching method, and prepeses the reform idea of taking the lottery system as a coherent example experiment project. The idea is to form a line with points, pave the way with lines, stimulate interest, cultivate practice and guide innovation. This kind of curriculum reform can stimulate students enthusiasm for learning and improve their application ability.
Key Words: Python; project driven; comprehensive application ability
0 引言
隨著人工智能、大數據、物聯網、移動計算的迅速發展,社會各界對軟件技術的需求不斷加深,高校紛紛開設Python語言課程, Python教學改革研究成為熱點[1-8]。嵩天等[1-2]以開展非計算機專業本科生Python語言教學為契機,建立完整的教學體系,積累豐富的線上線下教學資源;董付國等[3-4]針對軟件工程專業制定課程體系結構,建設大量的課外資源;車萬翔等[5]開展計算機專業高級語言程序設計課程改革;張莉等[6-7]基于MOOC翻轉課堂建設“用Python玩轉數據”課程,探討如何在同一課堂克服不同專業差異,提升學生問題求解能力;趙廣輝等[8]以賦能為目標對非計算機專業程序設計公共課進行重構,按照“二性一度”的金課標準建設課程。
上述研究雖然提升了教學效果,但主要側重于教學內容、教學設計及課程資源建設等方面,對實驗環節鮮有研究。筆者學校辦學定位是應用型本科院校,一直致力于尋求適合自身辦學特點的教學模式。應用型本科教學強調“應用”二字,對于實踐性較強的程序設計語言課程,實驗教學顯得尤其重要。實驗教學設計質量決定學生的實踐能力。一個好的實驗設計,一方面能很好地幫助學生理解理論知識點,另一方面能培養學生的動手能力。博雷泊在1979年首次將項目驅動教學法應用于語言教學實踐,之后國內教師紛紛在教學實踐中引用該方法,雖然實施方案各有不同,但總體都是以學生為中心、以教師為引導、以項目為載體、以小組協作為基礎,在“做中學”,培養學生應用能力。因此,本文對Python語言程序設計教學進行改革,提出基于項目驅動的教學模式,圍繞學生喜聞樂見的抽簽程序,精心設計模擬項目展開Python程序設計課程教學改革,激發學生學習興趣,提高學生應用能力。
1 教學現狀分析
Python語言程序設計課程要求學生掌握如下知識:①Python語言程序設計基本理論與方法;②Python組合數據類型與操作;③Python文件操作;④運用第三方庫解決實際問題。Python課程實踐性強,要求學生掌握的知識點多而雜,學生能融會貫通所學知識并不容易。筆者分析教學效果后發現, Python課程“教師講授,學生模仿”的教學方式不能滿足需求,應圍繞教學對象、教學方式、教學內容和教學評價4個中心展開教學。
(1)教學對象。教學對象是自動化專業大三學生,學生在此之前已經先修過C語言,掌握基本數據類型、流程控制結構、函數和文件操作等概念,如果還按傳統的教學方式開展教學,學生很容易陷入到語法中去,不能體會到“Python輕語法,重應用”的特點,容易產生疲倦心理,提不起興趣。
(2)教學方式。通過分析文獻[1-8],并對周邊高校走訪調研發現,現有教學方式以“教本位”的“教師講授,學生模仿”開展,學生依賴教師“依葫蘆畫瓢”,只能完成簡單的小程序,對于較復雜的實際應用問題束手無策,不能提出有效的解決方案。
(3)教學內容。現有Python語言程序設計以教材章節為主線,以“流水線”式簡單羅列知識點,上機實驗以驗證經典算法為主,實驗內容不連貫且遠離學生實際生活,趣味性低,學習效率低,難以將程序設計知識學習升華到程序設計能力。
(4)教學評價。傳統方式下的課程考核以考試卷面成績作為主要評價依據。因為試卷篇幅和時長有限,編程題能寫的代碼行數有限,因此不是綜合性項目,往往只是一些經典算法題。許多學生為了應考提前背誦一些編程題目,雖然死記硬背下來了,但是不能將這些經典算法靈活應用到實際場景。這種不完善的考核機制不僅不能準確評價學生,而且造成“要想成績好,多背算法題”的錯誤認識,不利于培養學生編程解決復雜應用問題的能力。
2 項目驅動教學模式
項目驅動教學是在建構主義理論基礎上發展起來的教學模式,其核心理念是教師精心設計一個完整項目,把該課程的基本知識點與實驗項目融合,在項目操作中開展教學活動,學生根據項目需求有目的地習得知識,并將所習得的知識應用于實踐。具體實施方案是:首先引導學生自由形成團隊,引入產業界的項目管理辦法,引導全班同學一起討論項目的需求分析、概要設計、詳細設計與測試驗收,讓學生充分了解項目進度要求;然后師生一起將大項目細化分解為一系列小項目,從最小的項目開始實施。在教學過程中教師將項目要求掌握的知識點從簡單到復雜展開講解,鼓勵學生在課堂上思考討論。在實驗課上學生以項目為驅動帶著問題做實驗,團隊成員共同完成任務,學生之間相互學習,充分發揮主觀能動性;最后將一個個單一項目向上組合形成最終的綜合性項目。
項目驅動教學模式是將知識點貫穿到整個項目運作過程中,學生要求掌握的知識點和技能內容如下:
(1)專業基礎知識。掌握Python基礎,包括基本數據類型、組合數據類型、控制結構和文件操作;掌握Python進階,能夠應用第三方庫解決較復雜問題。
(2)專業能力與職業素質。培養計算思維,培養代碼調試能力,形成基本編程規范意識,培養工程實踐能力。
(3)主動學習能力與科研精神。培養學生主動學習能力,樹立科研求索精神。
(4)團隊協作能力。強調以團隊為單位,考核按照團隊分工和整體表現來評價,要求學生重視合作,共同進步。形成團隊以后,學生按項目管理規范分工合作,嚴格按項目開發進度進行工作,各個過程都要輸出該階段要求的文檔。
3 項目設計與實施
3.1 項目設計
項目選取要滿足如下條件:①與課程知識點息息相關;②難度適中、容易實現、貼近生活的小型應用項目。為此筆者采用學生熟悉的抽簽程序作為教學案例,激發學生興趣;按教學章節邊講邊練,學生分組合作完成項目,從簡單程序逐步完成復雜程序。學生自己設計開發出來的抽簽程序應用在課堂隨機點名和隨機提問等場景,不僅讓課堂更加有趣,而且學生有成就感。教學項目如表1所示。
Python語言程序設計課程中,以“基于人臉識別的抽簽程序”為模擬項目按知識點從簡單到復雜實施:①使用基本數據類型和random數據庫隨機抽取一個數字;②在學習了列表、集合和字典等復雜數據類型后,使用字典存儲學生學號姓名,然后使用隨機函數抽取學生學號和姓名;③在學習了文件操作相關知識后,從教務處的花名冊直接進行抽簽;④在學習了圖像處理后按學生照片抽簽;⑤使用人臉識別技術進行實時動態的人臉抽簽。
完成這一階段功能以后,要求學生基線化,也就是要求學生將代碼和文檔全部提交到服務器上,將較優秀的作品在課堂上應用。學生作為用戶進行現場測試,提出改進點,進一步完善作品。此外,在課堂上可以尋求幫助,以 “我們團隊做過了XX工作” “我們計劃做XX”和“我們需要XX幫助”來展開討論,大家積極提供幫助,同時思考自己是否也存在類似問題,要怎么解決。
3.2 項目改革實踐
3.2.1 項目立項,團隊分工合作制定項目計劃
Python語言程序設計課程共48個學時,其中理論課24學時,實驗課24學時。每周理論課2學時,實驗課2學時。在第一次上課的課間休息時間分好小組,按小組重新就坐,全班一起編寫進度計劃表,合理安排各階段任務,如表2所示。
3.2.2 項目實施,團隊群策群力完成開發任務
項目1:使用random庫按序號抽簽。
理論課目標:(1)數字(int整數、float浮點數、bool布爾值、complex復數)的運算及操作;(2)string字符串的基本操作(索引、切片等);(3)random庫(隨機庫)的使用。
實驗課目標:使用random庫編寫最簡單的抽簽程序。先把學生按學號排序,然后隨機抽取一個序號,核心代碼如下:
student_num = 80? #班級總人數80人
lucky = random.randint(1,student_num)
print(lucky)
項目2:使用random庫按學號姓名抽簽。
理論課目標:組合數據類型(列表(list)、元組(tuple)、集合(set)、字典(dict))及各種基本操作(增刪查改等)。
實驗課目標:按學號姓名抽簽。先把學號姓名存儲在字典中,考慮到有重名的可能性,隨機抽取唯一的學號,然后顯示被抽中者的學號、姓名。核心程序代碼如下:
student? = {“170310106”:“李和”,“170310138”:“冉虹”,“170310143”:“李德偉”,“170310144”:“李佳”}
lt = list(student.keys())
lucky = random.choice(lt)
print(lucky,student[lucky])
項目3:使用簽到表抽簽。
理論課目標:文件的操作(文件打開關閉和文件讀寫)。
實驗課目標:從學生簽到表中抽取學生姓名學號。核心程序代碼如下:
names = []
excel = xlrd.open_workbook(u“C:/Users/dl/Desktop/Python/2019/check_in.xlsx”)
sheet = excel.sheet_by_index(0)
nrows = sheet.nrows
for i in range(2, nrows):
no = sheet.cell(i, 1)。value
nos.append(no)
lucky = random.sample(nos, 1)
print(“\n抽中名單:”,lucky)
項目4:使用照片隨機抽簽???????? 。
理論課目標:PIL庫的使用
實驗課目標:為避免學生冒名頂替,從學生圖片庫中抽簽,實現的重點是從n個文件夾中分別隨機抽取m張圖片,剪切到新的文件夾中,然后打開文件夾里的圖片。核心程序代碼如下:
def copyFile(fileDir, tarDir ,m):
pathDir = os.listdir(fileDir)
sample = random.sample(pathDir, m)
print(sample)
for name in sample:
shutil.move(fileDir + name, tarDir + name)
項目5:基于人臉識別技術進行抽簽。
理論課目標:人臉識別常用算法及三方庫的應用,重點介紹FaceNet庫。
實驗課目標:基于人臉識別進行抽簽。充分利用教室和實驗室攝像頭,自動捕捉到課學生人臉,通過人臉識別實現無感點名。對到課的學生基于人臉進行提問、分組或實驗題目抽簽。在人工智能大環境下,結合本校應用型本科人才培養目標,本實驗更側重于實際應用領域,使用GitHub上現有成熟的算法,避免學生花費大量時間在人工智能算法細節。通過指導學生從https://github.com/davidsandberg/facenet.git下載的FaceNet [10](Google研發的人臉識別系統)開源工程代碼設計與實現人臉抽簽軟件,包括從攝像頭讀取視頻、檢測人臉、識別人臉、人臉抽簽等功能。①使用opencv2從攝像頭讀取視頻幀,轉換為灰度圖像;②對讀取視頻幀使用MTCNN進行人臉檢測并對齊與裁剪;③使用預訓練FaceNet對MTCNN檢測的人臉進行embedding(映射),得到128維度的特征向量;④對人臉embedding的特征向量使用歐式距離衡量兩張人臉圖片之間的相似度。
3.2.3 項目結項,團隊共同復盤整理提交成果
在完成所有項目設計后,團隊一起復盤,大家一起回顧當初制定的目標,分析亮點及其形成的原因并記錄下來;分析不足及原因,討論如何采取舉措避免;整理提交所有代碼及所有文檔。
3.3 項目量化評價
課程考核采用多元評價體系,最終成績由平時成績、實驗項目階段考核成績、大作業項目階段考核成績3部分組成。項目階段考核以小組形式答辯,先對小組綜合定級,綜合小組成員自評和對小組成員提問表現,根據學生在系統設計中的貢獻率和Python語言掌握情況給予客觀的綜合成績。經過本課程實驗教學,學生掌握較大項目的設計與實現方法。最后2次實驗課以小組大作業方式進行,學生團隊自主設計一個自己感興趣的新系統。選題不作限制,鼓勵學生充分發揮主觀能動性,盡可能創新。基于人工智能的物體識別機器人設計與實現的團隊大作業,使用電子小車作為移動載體,搭載配置了圖像識別系統的樹莓派,設計一個能夠進行圖像識別、自動尋物的機器人。同時,為了便于外部直接指揮機器人運行,在PC端設計服務器,通過路由器的局域網向機器人傳入指令。基于人工智能的物體識別機器人由配置物體識別系統的樹莓派、攝像頭、超聲波模塊、Arduino板、配置編碼器的電機驅動模塊和局域網終端組成,實物如圖1—圖4所示。
4 教學效果
Python語言程序設計課程應用項目驅動教學,優化了學習內容,成功構建 “以學生為中心、以教師為引導、以項目為載體、以小組協作為基礎”的良性教學秩序,培養學生應用Python語言程序解決實際問題的工程實踐能力,鍛煉學生的創新能力,幫助學生在各類競賽和科研項目中取得一定的成績:①積極參加全國性比賽,在中國機器人大賽和全國計算機設計大賽等比賽中獲得國家級和省級多個獎項。競賽獲獎成績證明學生具備了應用Python分析解決問題的能力和創新能力;②教師將科研項目引入課堂,以研促教,訓練學生科研能力。學生積極申報江蘇省大創項目和校大創項目,多個項目成功立項和結題,證明學生具備應用Python開展科研的能力。
教改后,學生普遍認為該課程有趣、有用,更加熱愛程序設計,對人工智能、大數據等課程學習更有信心。
5 結語
項目驅動的Python程序設計教學改革,采用學生耳熟能詳的可應用于現實場景的抽簽項目,提升學生興趣,最大限度發揮學生的主觀能動性,促進對Python程序設計知識的融會貫通,夯實專業知識,培養綜合應用能力,激發創新思維能力,滿足社會對計算機人才的需求。從該課程教學結果來看,學生較全面地掌握該課程理論基礎知識,具備一定的工程實踐能力,在一定程度上鍛煉了創新能力,符合學校教學定位,達成教學改革既定目標。但由于項目驅動教學模式以“學生為中心,教師引導”,更強調學生主體地位,學生主導教學內容、教學形式等,甚至高度參與考核成績評定。因此,相對于傳統課堂學生的自由空間更高,課程教學效果自然很大程度上受到學生自律能力和團隊凝聚力影響。對于自律能力和凝聚力強的團隊會朝著共同發展、共同進步的目標前進,而對于自由散漫、隊員難以配合的團隊就不盡如意。如何有效引導自律性和配合性較差的團隊積極參與教學過程以取得更好的教學效果,是Python語言教學實踐需要進一步研究的重點。
參考文獻:
[1] 嵩天,禮欣,黃天羽. Python程序設計基礎[M]. 第2版. 北京:高等教育出版社,2017.
[2] 嵩天,黃天羽,禮欣. Python語言:程序設計課程教學改革的理想選擇[J]. 中國大學教學,2016,15(2):15-20.
[3] 董付國. Python程序設計開發寶典[M]. 北京:清華大學出版社,2017.
[4] 李博, 董付國, 馮煙利, 等.? 面向軟件工程專業的Python課程建設[J].? 計算機教育, 2019,18(1):92-96.
[5] 車萬翔,蘇小紅,袁永峰,等. 計算機專業高級語言程序設計課程改革探索[J]. 計算機教育,2014,25(13):56-58.
[6] 張莉,金瑩,張潔. 基于MOOC的“Python玩轉數據”翻轉課堂實踐與研究[J]. 工業和信息化教育,2017,32(3):70-76.
[7] 張莉,金瑩,張潔,等. Python程序設計教程[M].? 北京:高等教育出版社,2018.
[8] 趙廣輝, 李屾, 秦珀石.? 以賦能為目標的Python程序設計線下“金課”建設[J]. 計算機教育,2019,18(11):28-32.
[9] DAI J,HE K,SUN J.Instance-aware semantic segmentation via multi-task network cascades[C]. Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition.2016:3150-3158.
[10] SCHROFF F,KALENICHENKO D,PHILBIN J.Facenet:a unified embedding for face recognition and clustering[C]. Proceedings of the IEEE conference on computer vision and pattern recognition.2015:815-823.
(責任編輯:杜能鋼)