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