文欣秀,王占全,范貴生,趙 敏,楊澤平
(華東理工大學 信息科學與工程學院,上海 200237)
清華大學副校長楊斌提出“對于‘新工科’建設要‘授人以欲’,創新是探索未知世界或解決實際問題,而未知世界或實際問題是不分學科的,創新的突破點往往是交叉學科。因此,‘新工科’建設尤為要注重學科交叉”[1]。因此,在計算機通識課程教學中,以培養學生分析專業問題能力為中心,探索多學科交叉融合的工程人才培養模式[2],通過工程實踐項目展開教學改革真正提高學生運用計算機分析、解決各專業(如化學、化工、材料、生工等)問題的能力,是高校教師亟須解決的問題。
隨著Python在國內外高校、就業市場的日益流行[3],Python在國內外高校非計算機專業中的教學引起了大量學者的廣泛重視。目前Python的教學主要分為兩種模式[4]:①將Python作為學習計算機編程的入門語言,利用其語法簡潔、容易上手等優點幫助學生理解程序設計思想;②將Python作為一種輔助工具,運用其類庫豐富、功能強大等特性進行復雜數據分析、深度機器學習等專題學習。此外,在新工科建設的背景下,許多創新創業大賽和專業學院都要求學生能夠從具體問題(專業學習問題和實際生活問題)出發,基于實際工程項目進行需求分析、搭建系統框架、完成功能設計,并最終編寫程序解決問題。因此,結合新工科建設要求,探索工程實踐項目驅動的Python課程教學改革,從軟件工程角度出發規劃和設計教學模塊,通過輔助教學系統對學生學習過程進行追蹤,具有十分重要的現實意義。
新工科建設要求教師改變傳統的知識點授課和實驗模式,從學生專業需求、實際生活問題出發,不斷探索新的教學模式,優化教學設計。
教師應嘗試充分發揮Python的各種優勢,指導學生與專業知識或實際問題結合,從真實需求出發研發各種軟件系統。在2015—2018年中國大學生計算機設計大賽中,筆者共指導學生使用Python語言獲得12項獎項,其中專業相關類的國家級一等獎作品3項,實際生活應用類國家級一等獎作品1項(部分獲獎作品名稱見表1)。
Python程序設計作為一門為大二及以上學生開設的實踐性強的選修課程,在課程中要求學生完成一套B/S架構的系統,這對學生的知識背景有一定的要求:一年級開設的大學計算機基礎和C程序設計為Python項目的順利進行提供了有力支撐(如圖1所示)。在圖1中,大學計算機基礎課程中的數據庫基礎模塊幫助學生理解關系型數據庫的原理及設計方法,SQL語句的系統學習為網站后臺的數據存取提供了手段;網站設計模塊幫助學生熟悉網站架構及開發原理,HTML語言和CSS的學習為學生設計動態網站以及網站的美化提供了技術保障。此外,學生在C程序設計課程中通過3種基本結構、函數等模塊的學習理解了程序設計的思想,通過簡單數據類型、復雜數據類型及文件的學習掌握了數據存儲的規則及特點,從而為面向工程項目的課程教學改革奠定了扎實的基礎。

表1 2015—2018年部分“中國大學生計算機設計大賽”Python獲獎作品

圖1 先修課程背景
二年級及以上本科學生在學習中會接觸許多專業問題,如何通過分析將專業問題轉化為計算機能夠解決的問題,并使用Web頁面或圖形化窗體錄入問題、運用數據庫長期存儲數據、調用算法實現數據的有效處理,最后將數據分析結果形象地展示出來,從而完成一個完整項目的開發,這是一項具有挑戰性和趣味性的任務。4年來,筆者帶領學生參加各種比賽,認為過去教師常常糾結的兩個問題無需要過多關注:①具體的語法細節,因為這些知識碎片不僅可以從網上獲取,學生之間也可以通過交流快速解決;②過于復雜的算法,本科階段所涉及的專業問題通常并不需要過于復雜的算法。
通過調查發現,目前針對校內大學生有各種各樣的創新設計大賽,如“‘互聯網+’大學生創新創業大賽”“中國大學生計算機設計大賽”“全國大學生機械工程創新大賽”等,這些大賽都要求學生具備工程項目設計與開發能力。作為目前TIOBE排行第3的語言[3],近幾年Python憑借其各種優勢受到越來越多學生的歡迎,成為參加各類大賽的首選語言。以“中國大學生計算機設計大賽”為例,要求學生不僅能完成創新性強、功能齊全、界面美觀的作品,還要提供一整套規范的設計文檔。因此,考慮到Python程序設計課程課時的有限性(共40課時,其中24理論課時+16實驗課時),課程開始階段的軟件工程思想引導非常重要(如圖2所示)。課程從歷屆獲獎作品分析開始,通過多個優秀案例幫助學生理解軟件項目的開發過程、規范文檔的撰寫思路、作品涉及的關鍵技術等,引導學生在課程第一個月(基礎知識介紹模塊)從專業課程或實際生活中找出待解決的問題,并完成需求分析文檔。在后續的學習過程中,要求學生逐步運用所學技術,完成功能模塊開發并撰寫相應的設計文檔,課程結束時上交項目和文檔。由于學生不可能在短短幾節課內理解所有獲獎作品,所有獲獎作品的視頻和文檔介紹均保存在華東理工大學自行研發的Piclass輔助教學平臺上[5-6](2016年“中國大學生計算機設計大賽”二等獎作品,該平臺具有微信點名、作業上傳與自動批閱、手機微信刷題、師生互發消息、獲獎案例分析等模塊),學生可以隨時在線學習,有效解決了課時有限的問題。

圖2 基于軟件工程的工程實踐項目規劃
分析國內外大量的Python程序設計教材,以及MOOC上的Python程序設計課程,筆者發現大部分的授課安排還是以傳統的知識點方式展開(基本數據類型、3種流程控制結構、復雜數據類型、文件、函數、界面設計、圖形繪制等),比較適合初學者,但是對已經學習過C語言或VB.NET等編程語言的學生而言,重復學習的意義不大,轉變教學思路,從軟件工程的角度幫學生理清解決各種問題的思路,指引學生主動學習相關知識及技術是一種積極的教學探索。面向工程項目的知識模塊設計(如圖3所示)具體包括基礎語法、數據獲取、數據處理、數據存儲、數據可視化及用戶交互6個模塊,通過獲獎案例分析幫助學生理解和掌握相關知識:基礎語法模塊主要復習三大基本結構、介紹復雜數據結構以及文件、函數與類等方面的知識;數據獲取模塊介紹Requests爬蟲框架、頁面解析及各種專業數據的格式轉換;數據處理模塊介紹Numpy矩陣運算、Pandas數據分析以及經典的分類、聚類算法;數據存儲模塊講解文件存儲數據、如何訪問MySQL數據庫;數據可視化模塊介紹圖形繪制Matplotlib以及網頁動態展示Echarts;用戶交互模塊介紹Web框架Django、前端框架Bootstrap以及微信接口開發等相關知識。
伴隨傳統授課方式的往往是規范化的作業,作業內容常常為指定算法實現、規定圖形繪制、經典數學問題解決等,很少考慮學生的個性化需求,導致學生的厭倦心理增強、抄襲現象嚴重。Python是一門適合發揮學生個性和特長的語言,經過4年的教學實踐,筆者根據學生基礎設置分層作業,并將作業分為驗證型作業和設計型作業,學生根據自己的能力完成相應的題目,驗證型作業由機器自動批閱并自動生成分析報告[6],幫助學生掌握相關知識點和算法。在學習完3種基本結構和文件后,學生即可在Piclass上完成驗證型作業:如判斷某學號學生是否為我班學生,是則打印歡迎信息,否則顯示錯誤信息并再次提示用戶輸入學號,如果多個測試用例測試程序正確,系統自動打出滿分。設計類作業由學生自行進行需求分析和方案設計,教師只需對學生的作業提出要求,制定評分標準,由學生之間實施互評,如材料學院的大三學生根據研究生師兄要求實現了電化學數據的自動處理,解決了復雜數據的處理問題。學生在互評過程中拓展了自己的視野,有助于提高學生完成作業的積極性和主動性。

圖3 面向工程實踐項目的知識模塊設計
傳統的考試往往是標準化考試,很多高??荚嚩疾捎瞄]卷考試方式,機器客觀題+人工主觀題的閱卷方式,但是這種考試方式并不能真正判斷學生分析問題能力以及實際編程能力,與新工科建設的目標不一致,因此進一步加大平時大作業的分數,修改閉卷考試為題目更加開放靈活的開卷考試是一項積極的探索:如本課程總成績的合成公式為平時出勤(10分)+平時作業(10分)+綜合大作業(30分)+期末開卷考試(50分),出勤成績由Piclass輔助教學系統自行統計;平時作業由驗證型作業和設計型作業合成,由Piclass系統和學生共同打分;綜合大作業由2~3名學生合力完成,要求設計一個包含前后臺的網站(網站類型及功能自選),評分標準分為文檔10分+答辯5分+創意5分+功能完備性5分+界面及算法5分,由任課教師打分。最后,在大作業答辯的基礎上,從綜合評分高的學生中遴選出具有發展潛力的優秀成員,組成團隊進一步培養,積極參加創新創業大賽。
在基于工程實踐項目的教學改革過程中,Piclass輔助教學平臺不僅保存了歷屆學生的獲獎作品供學生們參考,還通過考勤、作業等實現了學生學習過程的追蹤。在以上多種因素的激勵下,學生的很多綜合大作業作品都超出了課程教學范圍,如2017—2018年第2學期學生設計的花梨炒股、基于圖像識別的公交站牌語音播報系統、新型立體式小區停車庫上位機設計等。雖然這些大作業離參加相關大賽作品還有一定差距,但是很多優秀的學生和作品已經被成功地選拔出來,后續鼓勵學生參與學校的創新實踐基地,培養并組織參與各種競賽,不斷提高學生的創新實踐能力和計算思維能力。在近3年教務處實施的教學測評中,Python程序設計課程的測評分數始終保持為優秀(見表2);在課程結束時也對學生的具體學習情況展開了測評,如對于2017—2018年第2學期學生的學習收獲調研中,學生可以自由選擇回答相關問題,調研結果見表3。

表2 近3年教務處獲得的學生課程測評結果統計

表3 2017-2018第2學期學生學習收獲調研
目前,新工科建設正在如火如荼地展開,要求我們改變傳統的知識點授課模式,從社會實際需求、學生專業需求出發,探索新的教學模式,著手新的教學設計。以創新創業競賽為導向、工程實踐項目為引領的Python程序設計課程在實際教學過程中取得了一定的成績,大大提高了學生的創新實踐能力和問題分析能力,筆者下一步的目標是進一步探索各類算法在各個專業中的應用,提高學生的計算思維能力和學術研究能力。