高望
(江漢大學人工智能學院,湖北 武漢 430056)
2021年中國政府工作報告明確指出,要借助創新促進經濟全方面高質量發展,并推出了“強基計劃”等一系列教育改革措施。高等教育的各個方面都有所涉及,這對高校程序設計基礎教學也提出了更高的要求[1]。為了在新一輪的產業革命和科技變革中取得突破,支撐《中國制造2025》和《新一代人工智能發展規劃》等制造強國戰略,并推進產學研用、校企協同,建立創新型人才培養機制,加快培養引領創新、適應產業發展的高素質人才,“新工科”工程教育改革范式的推出恰逢其時。
“新工科”教育理念提出不久后,教育部正式推出新工科項目建設指南,陸續形成了《“新工科”建設復旦共識》等新工科建設方案。在“新工科”背景下,江漢大學開設了“Python語言基礎”課程,旨在培養的學生計算思維和程序設計能力。作為大數據分析和人工智能的主流編程語言,Python的使用非常廣泛[2-3]。當前,中國高等院校理工科專業都為學生開設了一門程序設計基礎性課程,以C語言為主,少量高校使用Java或Visual Basic語言教學。在通識教育中開設的程序設計課程,對于基礎不同、專業不同的學生往往使用相同的教學模式和教學方法。這樣的學習方式容易使學生缺乏學習動機,學習勁頭不足,難以體會如何利用程序設計思想解決實際問題。
“新工科”背景下的工科教育要求學生具備工程實踐能力,能夠利用計算機程序解決復雜的專業問題。這就需要程序設計基礎課程的教學內容使學生具備相應能力,能夠支撐復雜問題的分析和求解。遺憾的是,當前程序設計基礎課程的教學方式難以培養這種工程實踐能力,在教學目標中也未能得到充分體現。這種綜合能力培養的不足也許會造成對工科專業是否有必要建設程序設計類課程群的困惑。
中國工科在校生人數約為700萬,已經建設完成了全球最大規模的工科教育框架。但需要指出的是,中國工科類人才培養目標不明確,對實驗教學和工程教育、工業生產和技能培訓、通識教育與專業教育之間區別和聯系的認識還很局限,教學內容與企業實際需要結合不緊密,工科類學生普遍難以滿足復合型、綜合型人才的能力要求。與傳統工科不同,新工科的教育理念致力于以信息化推動工業化,培養具備較強實踐創新能力、工程應用能力和復雜問題分析能力的“新工科”人才。這類人才不僅應在自己的專業領域成為專家,還要具有各種學科交叉的跨領域能力。
以人機融合為標志,人工智能即將進入3.0新興時代,智能制造是未來人工智能重要的應用場景之一。多智能體、大數據驅動知識學習、云計算、人機協同增強智能、AI芯片等新知識不斷更新,傳統的工科培養方式已難以應對新一輪科技變革的挑戰。因此,高校工科教育需要對原有體系進行改革,創新培養模式,調整教學內容。在這個升級換代的過程中,程序設計類課程可以滿足大部分新工科工程專業的信息技術需求,當然這需要建設多位一體的、能夠支撐新工科教育理念的程序設計教學模式。
根據學生專業對信息技術的需要,“新工科”要求學生能夠分析和解決復雜的工程問題,如學科交叉問題、綜合性問題等。為支撐這一需求,需要改變傳統教學思路,改革教學模式。
很多工科專業在開設“Python語言基礎”課程之前已經學習過C語言或Java語言。在這種情況下,教師再細致逐個講解Python的語法基礎知識點,可能令課堂教學非常枯燥。然而,Python語言的特點就是簡單易學,對于有一定編程基礎的學生,傳統的教學方式先講解理論知識,再上機實驗驗證的效果不盡如人意。因此,建議教師將工程項目實踐和教學知識點相結合。
具體來說,為了讓學生快速上手,教師在指導學生掌握Python開發環境配置的基本過程后,便可以簡要介紹Python與Java/C等語言在運算符、表達式、輸入輸出等基礎知識的異同,隨后重點培養學生的工程實踐能力、創新應用能力和計算思維。
“新工科”的教學理念要求利用信息化技術解決專業領域問題,這就需要培育不同專業學生的計算思維習慣。對于有一定基礎的學生,教師可以從簡單的工程實際應用項目開始,然后進一步提出新的應用需求,引導學生用學習到理論知識解決新的問題。如此一來,不僅可以讓學生熟練掌握所學知識,又能培養他們的計算思維。此外,在工程項目實踐過程中,應該要求學生在編寫程序之前先繪制程序流程圖,從而鍛煉學生能夠去分析并解決復雜工程問題。對此舉例如下。
應用1:設計一個簡單的游戲,首先設置一個正整數,然后用戶輸入一個數,如果和該數一致則輸出“猜對了”,否則輸出“猜錯了”并提示用戶哪個數更大。由于學生已有一定基礎,項目要求也比較簡單直觀,學生可以比較輕松地實現項目要求的各項功能,從而熟練掌握Python語言中順序、分支和條件3種基本程序結構,深入了解如何使用Python語言中的內置函數,并進一步探索如何使用Python語言的實現折半查找法。
應用2:應用1中設置的正整數是固定的,在程序運行后便不會發生變化。每次用戶重新進行游戲時,要猜的數字和上一次游戲的一樣。這會導致用戶產生倦怠感,對游戲失去興趣,請設計上述問題的解決方案。
在這個應用實踐中,可以引導學生通過random.randint()函數隨機生成一個正整數的方法來解決每次游戲要猜的數一樣的問題。同時,還可引導學生自行查找Python語言在數據分析、科學計算等眾多領域常用類庫的使用方法。
應用3:用戶在應用2中玩完一次游戲后,必須重新運行程序,才能開始一下局游戲。如何實現用戶可以連續游戲。
在這個應用實踐中,可以引導學生對應用2中的程序結構進行修改,增加開始游戲、暫停游戲、退出游戲等操作方式,并將游戲主體部分和這些操作方式封裝成函數,使程序更加簡潔,易于理解。學生通過這個應用可以掌握如何在Python語言中使用函數,理解函數式編程和過程式編碼之間的區別和聯系,了解計算思維導向的編程方式。
應用4:應用3中所使用的函數比較多,如何進一步優化?
在這個應用實踐中,可以引導學生將應用3中定義的函數以模塊的方式存儲并導入,使程序的結構更加清晰,便于管理,并實現了代碼的重復利用。學生通過這個應用可以掌握如何使用Python語言的模塊,理解程序的可重用性。
應用5:雖然各個功能函數已經存放在模塊文件之間,可以導入使用,如何進一步優化?
在這個應用實踐中,可以引導學生利用面向對象的程序設計思想,將游戲數據和對數據操作進一步封裝成類。學生通過這個應用可以加深對面向對象程序設計的理解,掌握Python語言中類的定義和使用。
應用6:玩家在命令行終端中玩游戲的用戶體驗不佳,如何修改為當前更為流行的圖形化界面。
在這個應用實踐中,可以引導學生了解Python中tkinter、PyQt、PySlide等圖形化界面工具集,掌握圖形化界面開發的基本流程、組件狀態的控制方法和事件驅動編程機制,從而對應用5的代碼進行重構,實現游戲的圖形化界面。
通過基于工程實踐的問題探究式教學方式,在工程項目應用需求演化的過程中,培養學生利用計算思維分析問題并解決問題的能力。將Python語言的核心知識點融入到各個項目應用中,使學生更容易理解面向對象和面向過程編程思想的區別,提高學生的學習熱情,激發學生的積極性等。
由于“新工科”要求學生具備解決復雜工程問題的實踐能力,因此在“Python語言基礎”教學改革中,可以采用項目驅動式的實驗方式。在實驗教學規劃中,通過一個特定領域(例如學生成績數據、圖書館的圖書信息、豆瓣電影信息、電商網站的評論數據等)的數據分析項目,提升學生的工程實踐能力。完成這種類型的項目,并不需要使用神經網絡這類復雜的機器學習算法,但又能夠將計算機相關基礎課程所學習的知識(例如程序設計、數據庫、數據結構等)通過Python語言應用到人工智能、數據挖掘、信息檢索等領域。在項目實踐的初期,教師應該指導學生自主學習和查閱資料,深入了解使用Python進行數據分析的原理、方法和步驟。同時,教師可以協助學生將完整的數據分析項目分解成多個子功能模塊,例如數據采集與爬蟲開發、數據預處理、數據可視化、GUI界面等。
在數據采集階段,需要利用爬蟲程序發送HTTP請求獲取網頁HTML源文件,再利用正則表達式等技術提取網頁中所需要的信息。由于教學項目所涉及的數據量不大,因此不建議學生使用Scrapy、Crawley等流行的Python爬蟲框架。此外,這些框架已經將常用的數據采集功能進行了封裝,使用時僅需要調用相應接口即可,不利于學生掌握數據采集原理,培養工程實踐能力。教師可以指導學生使用request模塊,向網頁服務器發送HTTP請求,以及利用Chrome瀏覽器的開發模式采集異步加載網頁的數據。此時,教師還應該引導學生了解數據采集中涉及的法律問題。當目標網站設置了反采集文件聲明,應該避免爬取該網站的相關數據。如果目標網站提供的是給公眾瀏覽查詢的公開信息,那么采集該網站的公開數據是符合法律法規的。
在采集到網頁的HTML源文件后,教師需要引導學生分析網頁源碼,找到所要采集數據的特征。然后,可以使用正則表達式或Xpath等技術從網頁源碼中抽取相關數據。這個項目模塊能夠加深學生對正則表達式的理解,掌握使用Xpath查詢語言快速從HTML源文件定位網頁元素的方法,將所學Python語言的字符串相關知識融合成一個有機整體。
通過以上方式可以在網絡中短時間采集到海量數據,這些數據如果通過文件的方式來進行保存,則難以管理和檢索。因此,教師可以引導學生學會使用MongoDB和Redis數據庫來保存和管理爬蟲程序采集的數據,提高學生的自學能力。MongoDB通過鍵值對的形式保存數據,類似于Python語言中的字典,非常適合爬蟲數據存儲。作為一個流行的內存數據庫,Redis在爬蟲程序中可用于緩存需爬取的url列表,從而提高程序的讀寫能力。在這個項目模塊中,將數據庫知識和Python語言聯合起來,達到借助工程項目驅動學生數據庫實踐能力的培養。
經過數據分析項目實踐后,學生的工程實踐能力得到提高,為學生在以后的學習和工作中解決復雜工程問題提供支撐。同時,學生實現的項目軟件和文檔,也為他們參加“互聯網+大學生創新創業”“開放數據創新應用”等各類競賽提供思路和借鑒。
習近平總書記曾在高等院校思想政治理論課教師座談會上,明確指出要堅持顯性教育和隱性教育相統一,挖掘教學方式和課程內容中蘊含的思想政治教育資源,實現全員全程全方位育人[4]。因此,作為專業基礎課,“Python語言基礎”也需要在教學設計和教學環節中體現出課程思政元素,探索將立德樹人和專業課程相結合的教學方式。為了培養學生愛國熱情,塑造積極向上的人生觀和價值觀,可以在教學過程中融合以下案例開展課程思政。
Python這門語言誕生于20世紀90年代,如今已經成為人工智能的通用語言,被廣泛地應用于數據挖掘、機器學習和數據可視化等領域。從誕生之初,“明確”“優雅”和“簡單”等理念就貫穿Python的整個設計過程。設計者摒棄有歧義和復雜的語法規則,使用簡單明確的編碼規范,從而提高了Python程序的可維護性和可讀性。聯系到生活中,可以引導學生學習Python設計者的專業性,只有較高專業性,才令Python語言在各個領域得到廣泛應用。只有努力學習專業知識,同學們才有可能成為相關領域的專業人才,在工作中實現自己的價值。
列表是Python語言中常用的序列結構。如果要在列表中增加一個新元素,可以使用列表對象的insert、extend或append這3種方法。在不同的應用場景下,要根據具體需求有針對性地進行選擇。通過分析3種方法的異同,可以引導學生在學習生活工作中要針對問題,有的放矢,找到解決問題的最佳方案。
程序運行過程中發生的錯誤被稱為異常。通過對異常和調試的講解,提升學生的風險防范意識。聯系到生活中,引導學生認識到做同一件事也許會造成多種不同的后果,并且有一些還是事先沒有預料到的異常后果。這就需要學生們事前多思考,要為這些異常后果也準備好相應的應急預案。
本文針對傳統教學方式難以支撐新工科人才培養理念,分析了新工科建設對程序設計類課程教學的要求。以“Python語言基礎”這門課程為例,通過基于工程實踐的問題探究式教學方式,將知識點融入到工程項目應用中,提高學生的學習欲望。此外,將課程思政元素融入教學設計中,幫助學生樹立積極向上的人生觀和價值觀。通過教學實踐表明,本文所提出教學改革方案可以激發學生的興趣,提升教學效果。