朱文強 熊碧舟
江西財經大學軟件與物聯網工程學院 南昌 330013
Python 語言是一門簡單易用、生態圈完善、應用廣泛的計算機程序設計語言。它以其接近自然語言、代碼編寫效率高以及側重問題求解等特點,在大數據處理、人工智能、自然語言處理、圖像處理、計算機運維等多個方面得到了廣泛應用。
目前,國內外許多高校都開設了Python 語言課程,開設專業不僅包括計算機、軟件工程、大數據等與信息技術密切相關的專業,像應用統計、金融工程、數據法學等專業也相繼開設了這門課程。許多高校甚至已將它作為計算機基礎通識課程,取代了傳統C 語言的地位。
案例式實驗教學是Python 程序設計課程的有效教學手段之一[1-2]。為激發學生興趣,李博等[3]參照SE2014 國際標準體系,構建了豐富的課程資源,并實現了案例融合式Python 課程教學。岳彥龍等[4]依據計算思維核心概念和思想,通過分析計算思維、Python、人工智能案例三者的關系,提出了以人工智能案例為驅動的Python 編程教學模型。陳廣智等[5]針對目前軟件工程教材理論介紹多、應用案例少的情況,設計一個GPA 變動分析案例,并針對軟件工程理論,分析該案例覆蓋的知識點。
實驗是Python 程序設計課程教學的一個重要環節。在進行本次Python 課程案例式實驗教學實踐改革之前,筆者通過問卷調查、訪談及聊天的形式,對所在學院軟件工程專業C 語言、Java 語言及Python 課程的授課教師、學生進行了一次較為廣泛的調查。調研結果反映,現有程序設計語言教學存在的一些普遍性問題,具體體現在以下五個方面。
1)傳統程序設計課程的教學方面,特別是C、C++等語言,教學多以知識點講解為主,且知識點較為分散,學生無法對知識點進行融合,應用于大型項目開發實踐中。
2)把C 語言作為大一的必修課,增加了學生學習的難度,不少學生特別是部分女生,甚至認為自己選錯了專業,不適合本專業的學習。
3)現有的Python課程教師,大多是原來講授C、C++、Java 等課程的教師,仍使用以教師講授為中心的傳統教學模式進行授課,教師講解知識點,學生聽課學習,課堂交流互動少,很難調動學生的學習興趣和積極性。
4)現有的Python 課程考核評價方式單一,教師大多數采用傳統編程語言的考核方式,比如以期末考試為主,導致學生的學習精力重點放在知識點的死記硬背上,較少關心知識點的靈活應用。
5)學生之間互動較少,同伴學習開展較少,教師布置的實驗練習大多以知識點為主,學生大多是單兵作戰,很少進行合作和互動,不利于培養和提高學生的團隊協同開發能力。
根據這些調研結果,筆者通過對PBL 教學方法(Project-Based Learning method)進行了深入分析,以學生興趣為主導,將大型主題程序項目案例分解成若干個小實驗,將小實驗與平時課程練習進行有機結合,構建一個興趣驅動、分散實現的案例教學方案,以提高學生分析項目、設計模塊、構建復雜系統的編程實踐能力。
傳統的軟件工程專業編程語言教學,如C 語言、Java 語言等,通常以知識點為導向,通過簡單的教學例子來輔助學生理解這些知識點。這種傳統的教學模式,通常是在個人電腦未大面積普及的情況下形成的,教學目的在于“知識點理解”,學生被動學習,很難對這些知識點進行融會貫通,且課程考核大多以試卷考試為主。
而隨著個人電腦的普及,大學生基本擁有個人電腦,有充足的時間進行編程語言知識點的實踐和練習,因此,程序語言教學應當以“知識發現”為主,而不再局限于“知識傳遞”。隨著大數據時代和人工智能時代的來臨,更需要致力于培養學生的計算思維、創新能力、解決問題能力和宏觀項目構建等軟實力,這正是教育部提出的新工科專業建設的具體要求。
PBL 教學方法最早由加拿大麥克馬斯特大學醫學院提出,是一種以學生為主體、以實踐為手段、以問題為導向的實踐案例教學方法[6],因其能有效調動學生的學習興趣,培養學生的實踐動手能力和團隊溝通能力,而受到國內外教育界的重視[7]。
在PBL 教學方法中,P 包含雙重含義,既包含問題(Problem)的意思,也表達項目(Project)的意思[8]。教師通過分析課程的實踐特征和學生的學習基礎水平,提出適合于學生學習水平的問題,學生在教師的指導下,以小組為單位,構思、策劃和完成一個融合課程知識點的綜合項目,最終提高自身的技能水平,解決教師所提出的問題。
基于PBL 的Python 程序設計課程案例式教學,主要聚焦于PBL 關注的三個核心問題,即學生、教師和項目。教師思考教學改革的方法與手段,對課程的實踐教學特征進行分析,研究學生的基礎水平,設計課程的考核方式,將傳統的知識點教學轉換為項目引導式的教學,通過與學生溝通交流,提出與課程相關的問題,構思出適合學生水平的項目要求,并圍繞這些問題和項目提供相關課程知識點的講解,提供相關教學資源。學生則根據教師提出的問題和項目,進行主動學習和協作學習,通過教師的知識點講授、問題引導和課程資源,與小組成員協同實現項目。
基于PBL 的Python 程序設計課程案例式實驗教學以問題為主線,總體規劃如圖1 所示。

圖1 基于PBL 的Python 程序設計課程總體規劃
Python 程序設計課程主要是讓學生掌握Python 語言的編程基礎,掌握第三方庫的使用,培養學生使用Python 語言分析問題和解決問題的能力。Python 語言程序設計課程一般作為電子信息類專業的通識課程,不同專業在開設該課程時,側重點可略有不同,課時根據學習內容可分為48-64課時不等。在面對軟件工程專業學生開設Python程序設計課程時,考慮到本專業學生本身的學習基礎較好,具備一定的編程實踐能力,且部分學生已有C、C++、Java 語言基礎,因此課程設為48 課時,分別使用翻轉式課堂教學進行Python 語言知識點教學(含練習),使用線上線下相結合的教學及學習方式。線下學時48 課時,其中,知識點理論學習占24 學時,實驗及項目交流24 學時,線上課時由學生根據自己的基礎和興趣安排。學習內容及學時分配如表1 所示。

表1 學習內容及學時分配
本課程面向軟件工程專業大二、大三、大四的學生,學生本身具備一定的編程基礎,如果只是講Python 的知識點,容易使學生失去學習興趣,因此,必須將Python 語言與應用相結合,使得學生能學以致用,解決問題,才能提高他們的學習興趣。
本課程教學活動采用PBL 教學方法,將課程教學分為課程教學、課堂練習和課后實踐三部分。課程教學采用混合式教學,分為課堂學習和線上學習兩個部分,課堂學習由教師講授課程內容和知識點,線上學習作為補充。課堂練習是對教師講授課程知識點的實踐,學生通過對教師知識點的代碼演示進行舉一反三,對知識點融會貫通。
課后實踐由課后實驗和綜合項目組成。其中綜合項目在學期開始就由教師根據實際Python 項目開發熱點應用,提出若干個項目指導方向,學生根據自己的能力和興趣進行自由組隊,成員人數限制在3 ~5 人。團隊組長根據小組成員能力,選擇某個方向進行構思,在后面的學習過程中不斷完善規劃和設計。在綜合項目完成期間,小組分別完成需求分析和項目設計,代碼編寫和調試,撰寫項目進度表,最后完成綜合項目,并進行匯報和展示。而課后實驗則是在綜合項目的構思上,對綜合項目的分解,完成一個個實驗,并作為或修改作為綜合項目的模塊。
教師需在學生實驗和綜合項目過程中跟進,對學生小組的項目計劃和構思進行溝通交流,確定項目的可行性,能否在有限期間完成等內容,并對學生實現項目需要學習的內容進行指導。在學生將綜合項目分解為小實驗的過程中,對學生的實驗進行批改,指出存在的不足之處和修改意見,并就項目實現進度和小組長進行溝通,促使小組在規定的時間內可以保質保量地完成項目。項目完成后,學生需要對項目的實現過程進行總結,并提交實驗報告。教師最后會根據學生的過程質量、最終項目表現等進行考核。
本課程的課堂知識點講授,是由教師對Python程序設計課程公共知識點進行講授。教師會給出與項目第三方庫的建議,而學生的項目可能會用到的第三方庫各有不同,需要學生進行線上補充學習。
北京理工大學嵩天教授的國家精品在線開放課程“Python 語言程序設計”在國內具有較高的知名度,已在中國大學MOOC 上開設多年,具有豐富的教學案例和庫的講解,因此,本課程將嵩天教授的“Python 語言程序設計”作為課程指定的線上補充學習課程。
作為補充,教師會推薦一些國內知名的線上社區給學生作為交流學習使用。這樣在他們遇到問題時,可以在這些線上社區向一些資深程序員求教。推薦的社區有Python 中國社區(https://pychina.org/)、Python 中文開發者社區(https://www.pythontab.com/)、CSDN 網站(https://www.csdn.net/)等。另外,課程教師還給學生推薦了幾個知名的公眾號,如“機器之心”“Python 小屋”“俊紅的數據分析之路”等。
線下翻轉學習采用小規模限制性在線課程(Small Private Online Course,SPOC)教學形式。在學生線上學習完成之后,以學生小組為單位,教師組織線下教學活動,對學生的線上學習成果進行掌握和了解。
在線下翻轉學習中,通常以學生項目小組為單位,進行學習的交流和討論。先由學生對各自的學習內容進行匯報,講述自己的線上學習心得,包括各自負責的項目模塊有何益處、存在哪些問題。然后由小組成員進行討論交流,思考問題的解決方式。然后教師對問題的難點和重點進行講解,并回答學生們的問題。最后由教師進行總結。整個線下翻轉課堂兩節課的時長大約90 分鐘。翻轉課堂結束后,學生根據課堂討論交流的內容進行代碼實現,完成各自的模塊和實驗內容,并于下一次課程前完成各自的任務。線下翻轉課堂活動流程如圖2 所示。

圖2 線下翻轉課堂活動流程
本課程教學活動設計使用的教學資源包含三方面的內容,分別為線下教學教材、線上學習平臺和作業交流平臺。
線下教學教材使用的是筆者編寫的《Python數據分析實戰》,該書2021 年在清華大學出版社出版,目前已重印三次。書中提供大量的練習和習題供學生使用,并配套相關的答案,還提供了相關視頻教學材料作為補充。
對于教學過程中擴展的內容部分,教師推薦中國大學MOOC 平臺作為補充,并提供一些著名的Python 社區,如Python 中國社區、Python 中文開發者社區、CSDN 網站供學生交流學習使用。特別推薦北京理工大學嵩天教授的國家精品在線開放課程“Python 語言程序設計”,該課程具有豐富的教學案例和庫的講解。中國大學MOOC 平臺具有簽到、互助答疑、問卷調查、學習考核等功能,能夠輔助教師進行分組討論、問題解答等課堂活動。
使用超星慕課平臺進行學生作業的提交和批改,該平臺可實現教師課程的資料上傳,作業限時發布,作業自動批改和考試等功能,能夠對簡單的知識點進行自動考核,減輕教師的教學工作量,幫助教師及時掌握學生的學習動態。
由于課程使用的是案例式實驗教學,因此,課程考核摒棄了傳統編程語言,如C、C++、Java 期末試卷的考核形式。整個考核分為過程考核和期末考核兩個部分,成績使用量化形式計分,其中過程考核占60 分,期末考核40 分。
課程過程考核分為4 個部分,分別為練習成績和實驗成績。練習成績主要考查學生課堂學習過程中的知識點的掌握,包括練習結果、代碼規范程度、練習講解三個部分。實驗成績主要考查學生對章節知識的融會貫通,包括實驗結果、代碼規范程度、實驗分析、與綜合大項目的關系四個部分。
期末考核以綜合大作業形式進行考核,主要考查大作業的邏輯完整性、項目展示效果、項目復雜度和團隊合作效果四個部分。
具體課程考核細則如表2 所示。

表2 課程考核細則表
課程結束后,通過五個方面對基于PBL 的軟件工程專業Python 案例式實驗教學效果進行評估和檢驗,并根據評估結果進行反思和總結,以在下一次課程活動中改進。
1)進行統一的上機測試,對比應用PBL 實驗教學Python 課程班級(以下簡稱PBL 實驗班)和以往傳統Python 課程班級(以下簡稱傳統課程班)編程能力的差異。
2)課程結束之后,對比PBL 實驗班和傳統課程班學生的參賽獲獎情況,考查學生靈活應用Python 編程技術及項目創新能力。
3)進行問卷調查,對比PBL 實驗班和傳統課程班學生的學習興趣、學習收益及進一步學習意愿的差異。
4)跟蹤對比PBL 實驗班和傳統課程班的相關計算機等級證書通過率方面的差異。
5)跟蹤對比PBL 實驗班和傳統課程班畢業設計選用Python 語言的差異,并對比畢業設計評優的差異。圖3 為部分學生大作業的結果截圖。

圖3 部分學生大作業的結果截圖
基于PBL 的軟件工程專業Python 課程案例式實驗教學是一項很好的計算機編程語言教學改革嘗試,它針對軟件工程專業學生進行分析,以PBL 教學方法為指導,融合線上、線下教學方式,獲得了一定的教學效果提升。根據該實驗教學的結果,可以得出以下結論。
1)傳統以教師為主導,以知識點為教學核心的編程語言教學方式,已無法適應Python 這類應用型編程語言的教學模式。Python 教學應當以學生為中心,以項目、問題為主導,積極主動發現學生的興趣和結合當下應用熱點,課堂上組織學生自主討論和交流,提升學生興趣和課堂教學效果。
2)線上線下混合教學要靈活結合,線下教學應先把學生的基礎打好,在教師的引導和建議下,通過線上教學資源進行補充學習。學生在線上學習時,教師需要隨時掌握學生的學習動態,并及時發現他們線上學習中存在的問題。
3)解決問題是PBL 教學的根本,在進行Python語言教學時,需要引導學生結合自己的興趣解決專業應用相關問題,并在教師的建議指導下,學習相關擴展專業知識,最后解決問題。在這個過程中,教師只是引導作用,學生才是解決問題的核心,讓學生分析問題、解決問題,最終提高學生的動手實踐的能力,全方位鍛煉學生的項目開發能力。
4)小組合作學習有助于學生團隊協作能力的提升,有助于學生溝通表達能力的培養,無論在進行課堂練習還是綜合項目實踐中,應該多鼓勵學生之間的溝通和交流,特別是在進行分組時,更需要注意學生分組搭配的科學性。
5)線上教學平臺和線上補充教學資源是PBL教學活動一個重要的考量因素,應結合學校的具體情況和學生的習慣,認真開展調研和分析并將其靈活地融入教學活動設計。