文欣秀,王占全,范貴生,趙 敏,楊澤平
(華東理工大學(xué) 信息科學(xué)與工程學(xué)院,上海 200237)
清華大學(xué)副校長楊斌提出“對于‘新工科’建設(shè)要‘授人以欲’,創(chuàng)新是探索未知世界或解決實際問題,而未知世界或?qū)嶋H問題是不分學(xué)科的,創(chuàng)新的突破點往往是交叉學(xué)科。因此,‘新工科’建設(shè)尤為要注重學(xué)科交叉”[1]。因此,在計算機通識課程教學(xué)中,以培養(yǎng)學(xué)生分析專業(yè)問題能力為中心,探索多學(xué)科交叉融合的工程人才培養(yǎng)模式[2],通過工程實踐項目展開教學(xué)改革真正提高學(xué)生運用計算機分析、解決各專業(yè)(如化學(xué)、化工、材料、生工等)問題的能力,是高校教師亟須解決的問題。
隨著Python在國內(nèi)外高校、就業(yè)市場的日益流行[3],Python在國內(nèi)外高校非計算機專業(yè)中的教學(xué)引起了大量學(xué)者的廣泛重視。目前Python的教學(xué)主要分為兩種模式[4]:①將Python作為學(xué)習(xí)計算機編程的入門語言,利用其語法簡潔、容易上手等優(yōu)點幫助學(xué)生理解程序設(shè)計思想;②將Python作為一種輔助工具,運用其類庫豐富、功能強大等特性進行復(fù)雜數(shù)據(jù)分析、深度機器學(xué)習(xí)等專題學(xué)習(xí)。此外,在新工科建設(shè)的背景下,許多創(chuàng)新創(chuàng)業(yè)大賽和專業(yè)學(xué)院都要求學(xué)生能夠從具體問題(專業(yè)學(xué)習(xí)問題和實際生活問題)出發(fā),基于實際工程項目進行需求分析、搭建系統(tǒng)框架、完成功能設(shè)計,并最終編寫程序解決問題。因此,結(jié)合新工科建設(shè)要求,探索工程實踐項目驅(qū)動的Python課程教學(xué)改革,從軟件工程角度出發(fā)規(guī)劃和設(shè)計教學(xué)模塊,通過輔助教學(xué)系統(tǒng)對學(xué)生學(xué)習(xí)過程進行追蹤,具有十分重要的現(xiàn)實意義。
新工科建設(shè)要求教師改變傳統(tǒng)的知識點授課和實驗?zāi)J?,從學(xué)生專業(yè)需求、實際生活問題出發(fā),不斷探索新的教學(xué)模式,優(yōu)化教學(xué)設(shè)計。
教師應(yīng)嘗試充分發(fā)揮Python的各種優(yōu)勢,指導(dǎo)學(xué)生與專業(yè)知識或?qū)嶋H問題結(jié)合,從真實需求出發(fā)研發(fā)各種軟件系統(tǒng)。在2015—2018年中國大學(xué)生計算機設(shè)計大賽中,筆者共指導(dǎo)學(xué)生使用Python語言獲得12項獎項,其中專業(yè)相關(guān)類的國家級一等獎作品3項,實際生活應(yīng)用類國家級一等獎作品1項(部分獲獎作品名稱見表1)。
Python程序設(shè)計作為一門為大二及以上學(xué)生開設(shè)的實踐性強的選修課程,在課程中要求學(xué)生完成一套B/S架構(gòu)的系統(tǒng),這對學(xué)生的知識背景有一定的要求:一年級開設(shè)的大學(xué)計算機基礎(chǔ)和C程序設(shè)計為Python項目的順利進行提供了有力支撐(如圖1所示)。在圖1中,大學(xué)計算機基礎(chǔ)課程中的數(shù)據(jù)庫基礎(chǔ)模塊幫助學(xué)生理解關(guān)系型數(shù)據(jù)庫的原理及設(shè)計方法,SQL語句的系統(tǒng)學(xué)習(xí)為網(wǎng)站后臺的數(shù)據(jù)存取提供了手段;網(wǎng)站設(shè)計模塊幫助學(xué)生熟悉網(wǎng)站架構(gòu)及開發(fā)原理,HTML語言和CSS的學(xué)習(xí)為學(xué)生設(shè)計動態(tài)網(wǎng)站以及網(wǎng)站的美化提供了技術(shù)保障。此外,學(xué)生在C程序設(shè)計課程中通過3種基本結(jié)構(gòu)、函數(shù)等模塊的學(xué)習(xí)理解了程序設(shè)計的思想,通過簡單數(shù)據(jù)類型、復(fù)雜數(shù)據(jù)類型及文件的學(xué)習(xí)掌握了數(shù)據(jù)存儲的規(guī)則及特點,從而為面向工程項目的課程教學(xué)改革奠定了扎實的基礎(chǔ)。
表1 2015—2018年部分“中國大學(xué)生計算機設(shè)計大賽”Python獲獎作品
圖1 先修課程背景
二年級及以上本科學(xué)生在學(xué)習(xí)中會接觸許多專業(yè)問題,如何通過分析將專業(yè)問題轉(zhuǎn)化為計算機能夠解決的問題,并使用Web頁面或圖形化窗體錄入問題、運用數(shù)據(jù)庫長期存儲數(shù)據(jù)、調(diào)用算法實現(xiàn)數(shù)據(jù)的有效處理,最后將數(shù)據(jù)分析結(jié)果形象地展示出來,從而完成一個完整項目的開發(fā),這是一項具有挑戰(zhàn)性和趣味性的任務(wù)。4年來,筆者帶領(lǐng)學(xué)生參加各種比賽,認(rèn)為過去教師常常糾結(jié)的兩個問題無需要過多關(guān)注:①具體的語法細(xì)節(jié),因為這些知識碎片不僅可以從網(wǎng)上獲取,學(xué)生之間也可以通過交流快速解決;②過于復(fù)雜的算法,本科階段所涉及的專業(yè)問題通常并不需要過于復(fù)雜的算法。
通過調(diào)查發(fā)現(xiàn),目前針對校內(nèi)大學(xué)生有各種各樣的創(chuàng)新設(shè)計大賽,如“‘互聯(lián)網(wǎng)+’大學(xué)生創(chuàng)新創(chuàng)業(yè)大賽”“中國大學(xué)生計算機設(shè)計大賽”“全國大學(xué)生機械工程創(chuàng)新大賽”等,這些大賽都要求學(xué)生具備工程項目設(shè)計與開發(fā)能力。作為目前TIOBE排行第3的語言[3],近幾年P(guān)ython憑借其各種優(yōu)勢受到越來越多學(xué)生的歡迎,成為參加各類大賽的首選語言。以“中國大學(xué)生計算機設(shè)計大賽”為例,要求學(xué)生不僅能完成創(chuàng)新性強、功能齊全、界面美觀的作品,還要提供一整套規(guī)范的設(shè)計文檔。因此,考慮到Python程序設(shè)計課程課時的有限性(共40課時,其中24理論課時+16實驗課時),課程開始階段的軟件工程思想引導(dǎo)非常重要(如圖2所示)。課程從歷屆獲獎作品分析開始,通過多個優(yōu)秀案例幫助學(xué)生理解軟件項目的開發(fā)過程、規(guī)范文檔的撰寫思路、作品涉及的關(guān)鍵技術(shù)等,引導(dǎo)學(xué)生在課程第一個月(基礎(chǔ)知識介紹模塊)從專業(yè)課程或?qū)嶋H生活中找出待解決的問題,并完成需求分析文檔。在后續(xù)的學(xué)習(xí)過程中,要求學(xué)生逐步運用所學(xué)技術(shù),完成功能模塊開發(fā)并撰寫相應(yīng)的設(shè)計文檔,課程結(jié)束時上交項目和文檔。由于學(xué)生不可能在短短幾節(jié)課內(nèi)理解所有獲獎作品,所有獲獎作品的視頻和文檔介紹均保存在華東理工大學(xué)自行研發(fā)的Piclass輔助教學(xué)平臺上[5-6](2016年“中國大學(xué)生計算機設(shè)計大賽”二等獎作品,該平臺具有微信點名、作業(yè)上傳與自動批閱、手機微信刷題、師生互發(fā)消息、獲獎案例分析等模塊),學(xué)生可以隨時在線學(xué)習(xí),有效解決了課時有限的問題。
圖2 基于軟件工程的工程實踐項目規(guī)劃
分析國內(nèi)外大量的Python程序設(shè)計教材,以及MOOC上的Python程序設(shè)計課程,筆者發(fā)現(xiàn)大部分的授課安排還是以傳統(tǒng)的知識點方式展開(基本數(shù)據(jù)類型、3種流程控制結(jié)構(gòu)、復(fù)雜數(shù)據(jù)類型、文件、函數(shù)、界面設(shè)計、圖形繪制等),比較適合初學(xué)者,但是對已經(jīng)學(xué)習(xí)過C語言或VB.NET等編程語言的學(xué)生而言,重復(fù)學(xué)習(xí)的意義不大,轉(zhuǎn)變教學(xué)思路,從軟件工程的角度幫學(xué)生理清解決各種問題的思路,指引學(xué)生主動學(xué)習(xí)相關(guān)知識及技術(shù)是一種積極的教學(xué)探索。面向工程項目的知識模塊設(shè)計(如圖3所示)具體包括基礎(chǔ)語法、數(shù)據(jù)獲取、數(shù)據(jù)處理、數(shù)據(jù)存儲、數(shù)據(jù)可視化及用戶交互6個模塊,通過獲獎案例分析幫助學(xué)生理解和掌握相關(guān)知識:基礎(chǔ)語法模塊主要復(fù)習(xí)三大基本結(jié)構(gòu)、介紹復(fù)雜數(shù)據(jù)結(jié)構(gòu)以及文件、函數(shù)與類等方面的知識;數(shù)據(jù)獲取模塊介紹Requests爬蟲框架、頁面解析及各種專業(yè)數(shù)據(jù)的格式轉(zhuǎn)換;數(shù)據(jù)處理模塊介紹Numpy矩陣運算、Pandas數(shù)據(jù)分析以及經(jīng)典的分類、聚類算法;數(shù)據(jù)存儲模塊講解文件存儲數(shù)據(jù)、如何訪問MySQL數(shù)據(jù)庫;數(shù)據(jù)可視化模塊介紹圖形繪制Matplotlib以及網(wǎng)頁動態(tài)展示Echarts;用戶交互模塊介紹Web框架Django、前端框架Bootstrap以及微信接口開發(fā)等相關(guān)知識。
伴隨傳統(tǒng)授課方式的往往是規(guī)范化的作業(yè),作業(yè)內(nèi)容常常為指定算法實現(xiàn)、規(guī)定圖形繪制、經(jīng)典數(shù)學(xué)問題解決等,很少考慮學(xué)生的個性化需求,導(dǎo)致學(xué)生的厭倦心理增強、抄襲現(xiàn)象嚴(yán)重。Python是一門適合發(fā)揮學(xué)生個性和特長的語言,經(jīng)過4年的教學(xué)實踐,筆者根據(jù)學(xué)生基礎(chǔ)設(shè)置分層作業(yè),并將作業(yè)分為驗證型作業(yè)和設(shè)計型作業(yè),學(xué)生根據(jù)自己的能力完成相應(yīng)的題目,驗證型作業(yè)由機器自動批閱并自動生成分析報告[6],幫助學(xué)生掌握相關(guān)知識點和算法。在學(xué)習(xí)完3種基本結(jié)構(gòu)和文件后,學(xué)生即可在Piclass上完成驗證型作業(yè):如判斷某學(xué)號學(xué)生是否為我班學(xué)生,是則打印歡迎信息,否則顯示錯誤信息并再次提示用戶輸入學(xué)號,如果多個測試用例測試程序正確,系統(tǒng)自動打出滿分。設(shè)計類作業(yè)由學(xué)生自行進行需求分析和方案設(shè)計,教師只需對學(xué)生的作業(yè)提出要求,制定評分標(biāo)準(zhǔn),由學(xué)生之間實施互評,如材料學(xué)院的大三學(xué)生根據(jù)研究生師兄要求實現(xiàn)了電化學(xué)數(shù)據(jù)的自動處理,解決了復(fù)雜數(shù)據(jù)的處理問題。學(xué)生在互評過程中拓展了自己的視野,有助于提高學(xué)生完成作業(yè)的積極性和主動性。
圖3 面向工程實踐項目的知識模塊設(shè)計
傳統(tǒng)的考試往往是標(biāo)準(zhǔn)化考試,很多高??荚嚩疾捎瞄]卷考試方式,機器客觀題+人工主觀題的閱卷方式,但是這種考試方式并不能真正判斷學(xué)生分析問題能力以及實際編程能力,與新工科建設(shè)的目標(biāo)不一致,因此進一步加大平時大作業(yè)的分?jǐn)?shù),修改閉卷考試為題目更加開放靈活的開卷考試是一項積極的探索:如本課程總成績的合成公式為平時出勤(10分)+平時作業(yè)(10分)+綜合大作業(yè)(30分)+期末開卷考試(50分),出勤成績由Piclass輔助教學(xué)系統(tǒng)自行統(tǒng)計;平時作業(yè)由驗證型作業(yè)和設(shè)計型作業(yè)合成,由Piclass系統(tǒng)和學(xué)生共同打分;綜合大作業(yè)由2~3名學(xué)生合力完成,要求設(shè)計一個包含前后臺的網(wǎng)站(網(wǎng)站類型及功能自選),評分標(biāo)準(zhǔn)分為文檔10分+答辯5分+創(chuàng)意5分+功能完備性5分+界面及算法5分,由任課教師打分。最后,在大作業(yè)答辯的基礎(chǔ)上,從綜合評分高的學(xué)生中遴選出具有發(fā)展?jié)摿Φ膬?yōu)秀成員,組成團隊進一步培養(yǎng),積極參加創(chuàng)新創(chuàng)業(yè)大賽。
在基于工程實踐項目的教學(xué)改革過程中,Piclass輔助教學(xué)平臺不僅保存了歷屆學(xué)生的獲獎作品供學(xué)生們參考,還通過考勤、作業(yè)等實現(xiàn)了學(xué)生學(xué)習(xí)過程的追蹤。在以上多種因素的激勵下,學(xué)生的很多綜合大作業(yè)作品都超出了課程教學(xué)范圍,如2017—2018年第2學(xué)期學(xué)生設(shè)計的花梨炒股、基于圖像識別的公交站牌語音播報系統(tǒng)、新型立體式小區(qū)停車庫上位機設(shè)計等。雖然這些大作業(yè)離參加相關(guān)大賽作品還有一定差距,但是很多優(yōu)秀的學(xué)生和作品已經(jīng)被成功地選拔出來,后續(xù)鼓勵學(xué)生參與學(xué)校的創(chuàng)新實踐基地,培養(yǎng)并組織參與各種競賽,不斷提高學(xué)生的創(chuàng)新實踐能力和計算思維能力。在近3年教務(wù)處實施的教學(xué)測評中,Python程序設(shè)計課程的測評分?jǐn)?shù)始終保持為優(yōu)秀(見表2);在課程結(jié)束時也對學(xué)生的具體學(xué)習(xí)情況展開了測評,如對于2017—2018年第2學(xué)期學(xué)生的學(xué)習(xí)收獲調(diào)研中,學(xué)生可以自由選擇回答相關(guān)問題,調(diào)研結(jié)果見表3。
表2 近3年教務(wù)處獲得的學(xué)生課程測評結(jié)果統(tǒng)計
表3 2017-2018第2學(xué)期學(xué)生學(xué)習(xí)收獲調(diào)研
目前,新工科建設(shè)正在如火如荼地展開,要求我們改變傳統(tǒng)的知識點授課模式,從社會實際需求、學(xué)生專業(yè)需求出發(fā),探索新的教學(xué)模式,著手新的教學(xué)設(shè)計。以創(chuàng)新創(chuàng)業(yè)競賽為導(dǎo)向、工程實踐項目為引領(lǐng)的Python程序設(shè)計課程在實際教學(xué)過程中取得了一定的成績,大大提高了學(xué)生的創(chuàng)新實踐能力和問題分析能力,筆者下一步的目標(biāo)是進一步探索各類算法在各個專業(yè)中的應(yīng)用,提高學(xué)生的計算思維能力和學(xué)術(shù)研究能力。