嵩天+黃天羽+禮欣
摘 要:首先分析計(jì)算機(jī)技術(shù)發(fā)展的幾個(gè)重要階段,闡述不同程序設(shè)計(jì)語言與不同發(fā)展階段的關(guān)系,提出將Python語言作為我國高校各專業(yè)程序設(shè)計(jì)入門語言的建議;其次從產(chǎn)業(yè)需求及對(duì)計(jì)算技術(shù)運(yùn)用角度闡述計(jì)算生態(tài)的價(jià)值和作用,提出將“理解和運(yùn)用計(jì)算生態(tài)”作為Python語言課程教學(xué)理念;最后介紹一套適用于各類型專業(yè)、靈活性強(qiáng)、具有鮮明時(shí)代性的Python語言入門課程教學(xué)方案。
關(guān)鍵詞:程序設(shè)計(jì);Python語言;計(jì)算思維;大學(xué)計(jì)算機(jī);計(jì)算生態(tài)
0 引 言
2016年,教育部高等學(xué)校大學(xué)計(jì)算機(jī)課程教學(xué)指導(dǎo)委員會(huì)發(fā)布了《大學(xué)計(jì)算機(jī)基礎(chǔ)課程教學(xué)基本要求》(簡稱《基本要求》)[1]?!痘疽蟆方Y(jié)合信息技術(shù)發(fā)展及國內(nèi)高校開展教學(xué)情況,建議將C、VB和Python作為首門程序設(shè)計(jì)課程的教學(xué)語言,課時(shí)48~64學(xué)時(shí)。近2年來,國內(nèi)一批高校逐步開設(shè)了Python語言,成為教學(xué)改革熱點(diǎn)。20世紀(jì)90年代以來,編程語言從Pascal、C經(jīng)歷了VB、C#、Java,發(fā)展到今天的Python,很容易讓任課教師產(chǎn)生一個(gè)認(rèn)識(shí)——Python僅僅是編程語言的同質(zhì)更迭。本文試圖說明這種認(rèn)識(shí)的片面性,并闡述Python語言進(jìn)入高校教學(xué)體系的必然性[2]和教學(xué)方案。
1 程序設(shè)計(jì)語言的時(shí)代適應(yīng)性
1.1 計(jì)算機(jī)技術(shù)的時(shí)代性
第一階段“計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)階段”(1946—1981年)。這個(gè)階段計(jì)算機(jī)技術(shù)主要圍繞計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)設(shè)計(jì)開展,服務(wù)于科學(xué)計(jì)算和商業(yè)數(shù)值計(jì)算,產(chǎn)生了超級(jí)計(jì)算機(jī)等不同類型的計(jì)算機(jī)系統(tǒng)。與這個(gè)時(shí)期計(jì)算機(jī)有限的計(jì)算性能和功能相對(duì)應(yīng),程序設(shè)計(jì)需要在程序邏輯和系統(tǒng)結(jié)構(gòu)之間、處理能力和存儲(chǔ)容量之間、計(jì)算和通信之間尋找優(yōu)化和折中。這個(gè)階段的計(jì)算需求催生了執(zhí)行高效的C語言(1972年)。
第二階段“計(jì)算機(jī)網(wǎng)絡(luò)和視窗階段” (1982—2007年)。這個(gè)階段以TCP/IP協(xié)議標(biāo)準(zhǔn)化為標(biāo)志。計(jì)算機(jī)技術(shù)主要圍繞網(wǎng)絡(luò)技術(shù)、視窗技術(shù)、多媒體技術(shù)發(fā)展,計(jì)算機(jī)技術(shù)提供滿足個(gè)人計(jì)算需求的視窗應(yīng)用和網(wǎng)絡(luò)服務(wù)。網(wǎng)絡(luò)帶來的跨平臺(tái)需求產(chǎn)生了Java語言(1995年)。由于微軟Windows操作系統(tǒng)在個(gè)人計(jì)算機(jī)領(lǐng)域的高度普及,“所見即所得”的開發(fā)需求產(chǎn)生了Visual C++、Visual Basic(1991年)等視窗編程語言。
第三階段 “復(fù)雜信息系統(tǒng)階段”(2008年—)。這個(gè)階段以安卓開源移動(dòng)操作系統(tǒng)的發(fā)布為起點(diǎn),一批新的計(jì)算概念和技術(shù)幾乎同時(shí)提出并顯著推動(dòng)了計(jì)算技術(shù)的升級(jí)換代。雖然概念眾多,很難有任何一個(gè)技術(shù)領(lǐng)域獨(dú)領(lǐng)風(fēng)騷,任何系統(tǒng)都需要不間斷地完善才能提供更加安全可靠及更佳用戶體驗(yàn)的功能。面對(duì)復(fù)雜的功能性和緊迫的迭代周期,計(jì)算機(jī)需要更高抽象級(jí)別的程序設(shè)計(jì)語言來表達(dá)高層次編程邏輯。一批腳本類型、高效表達(dá)高層次編程邏輯的編程語言相繼誕生,包括Swift、Go、Ruby、R、Lua、Python等。其中,Python(2008年3.0版本)已經(jīng)成為這個(gè)階段的主流編程語言。
第四階段 “人工智能階段”(2010年—)。隨著深度學(xué)習(xí)、開源硬件、智能機(jī)器人、在線搜索引擎、量子計(jì)算等技術(shù)的發(fā)展,未來某個(gè)時(shí)期將會(huì)出現(xiàn)人工智能主導(dǎo)計(jì)算的技術(shù)階段。2016—2017年間出現(xiàn)的AlphaGo、無人駕駛汽車、自然語言翻譯等應(yīng)用進(jìn)展預(yù)示了未來階段的逐步臨近。計(jì)算機(jī)將逐步接管人類所有非創(chuàng)造性工作,計(jì)算機(jī)技術(shù)將進(jìn)入一個(gè)未知的新階段。
1.2 編程語言的適用性比較
計(jì)算機(jī)技術(shù)發(fā)展具有鮮明的時(shí)代性,程序設(shè)計(jì)語言發(fā)展也有類似特性。這里,以我國高校最常講授的編程語言為例,如C、VB、Java、C++、Python、Matlab等,闡述各語言的歷史定位和發(fā)展前景,綜合比較見表1。
C語言最初用于編寫UNIX操作系統(tǒng),因此,該語言既表達(dá)基本程序邏輯,又表達(dá)軟件對(duì)硬件的高效利用,如指針、精細(xì)到字節(jié)的數(shù)據(jù)類型等。編寫與硬件緊密相關(guān)的程序是該語言的歷史使命,因此,講解該語言將重點(diǎn)培養(yǎng)學(xué)生對(duì)計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)的抽象能力。C語言適合計(jì)算機(jī)類專業(yè)學(xué)生學(xué)習(xí)。
編寫Windows視窗應(yīng)用是VB語言的歷史使命。該語言在基本程序邏輯外,主要表達(dá)視窗系統(tǒng)中事件、控件和視窗體系下人機(jī)交互的關(guān)系。因此,該語言將重點(diǎn)訓(xùn)練學(xué)生視窗交互邏輯的理解。然而,隨著移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展,視窗應(yīng)用已經(jīng)逐步被以Web為基礎(chǔ)的應(yīng)用所取代,該語言的發(fā)展前景暗淡。至今,已經(jīng)比較難找到學(xué)習(xí)該語言明顯的受益群體。與該語言類似的語言還有VB.Net、VF.Net、C#等。
Java語言以運(yùn)行時(shí)和跨平臺(tái)為技術(shù)創(chuàng)新,同時(shí),純面向?qū)ο笳Z言具有更高層次的代碼封裝能力,也為編程中更大規(guī)模庫的構(gòu)建提供了基礎(chǔ)。Java語言主要訓(xùn)練學(xué)生通過“類”的概念理解計(jì)算問題中對(duì)象及對(duì)象間的主客體關(guān)系。此外,Java語言成為Android平臺(tái)的首選開發(fā)語言,因此,軟件類學(xué)生比較適合學(xué)習(xí)該語言。盡管Java語言現(xiàn)在十分流行,但其在移動(dòng)互聯(lián)網(wǎng)應(yīng)用領(lǐng)域的份額逐漸被以HTML5為代表的前端腳本語言所替代,該語言未來的應(yīng)用空間將逐漸變窄。
C++語言目標(biāo)是取代C語言成為適合多人協(xié)作編寫大規(guī)模程序的高效編程語言。從幾十年發(fā)展來看,該語言的確成為軟件工業(yè)中“大規(guī)模程序”的主流語言,但其復(fù)雜的語法和繼承自C語言對(duì)系統(tǒng)結(jié)構(gòu)的抽象使該語言僅成為專業(yè)人士的小眾語言。C++適合計(jì)算機(jī)類和軟件類專業(yè)同學(xué)學(xué)習(xí),但并不適合作為入門語言教學(xué)。
Matlab嚴(yán)格來說是一個(gè)工具而不是編程語言,其主要優(yōu)勢(shì)在于對(duì)數(shù)據(jù)的處理。Matlab天然以矩陣為數(shù)據(jù)的基本單元,通過友好的用戶界面、相對(duì)簡潔的編程邏輯和大量的工具箱極大簡化了數(shù)據(jù)處理的難度,成為工程領(lǐng)域重要的計(jì)算軟件。Matlab適合信息類專業(yè)學(xué)生學(xué)習(xí),其工具箱可以簡化工程分析的復(fù)雜性。至今,Matlab仍然具有重要的使用價(jià)值,但不適合作為編程語言入門內(nèi)容,因?yàn)閲?yán)格來說,它不是一門通用的編程語言。
Python語言產(chǎn)生于1991年,受限于上世紀(jì)90年代程序設(shè)計(jì)語言理解的局限性,并未成為國際關(guān)注的主流編程語言。直到2008年,Python 3.0系列摒棄了之前版本的各種弊端,采用非兼容方式升級(jí),奠定了當(dāng)下流行的實(shí)質(zhì)基礎(chǔ)。Python語言誕生于復(fù)雜信息系統(tǒng)時(shí)代,它不僅有簡潔的語法,更關(guān)注高層次程序邏輯,而將低層次邏輯通過封裝其他語言代碼(如C、C++)或集成第三方庫方式實(shí)現(xiàn)。Python語言設(shè)計(jì)初衷是更快速更高效解決問題,因此,該語言將訓(xùn)練學(xué)生抽象問題和設(shè)計(jì)算法的能力,這正是計(jì)算思維培養(yǎng)的核心。作為入門編程語言,Python適合所有專業(yè)。
1.3 將Python作為程序設(shè)計(jì)的入門語言
在復(fù)雜信息系統(tǒng)時(shí)代,信息技術(shù)分工更加精細(xì),面向問題求解的高層次邏輯表達(dá)是信息技術(shù)應(yīng)用的主要矛盾。從程序設(shè)計(jì)語言的設(shè)計(jì)初衷和計(jì)算思維訓(xùn)練焦點(diǎn)來看,符合計(jì)算機(jī)技術(shù)發(fā)展的編程語言將能更好地引領(lǐng)學(xué)生真正進(jìn)入信息時(shí)代。因此,我們提出如下建議,“將Python語言作為我國高校各專業(yè)程序設(shè)計(jì)入門語言”,主要有以下3個(gè)原因。
第一,Python語言符合計(jì)算機(jī)技術(shù)發(fā)展階段。在新工科建設(shè)背景下,程序設(shè)計(jì)語言課程不僅要兼顧歷史,更要面向未來。在計(jì)算機(jī)技術(shù)發(fā)展階段變化明顯的背景下,選擇更符合未來應(yīng)用預(yù)期的教學(xué)內(nèi)容是教學(xué)改革的方向。只有面向未來的教學(xué)內(nèi)容才值得進(jìn)行大范圍、深刻的教學(xué)改革
第二,Python語言教學(xué)將最有可能保護(hù)學(xué)生對(duì)程序設(shè)計(jì)的學(xué)習(xí)熱情。十幾年的程序設(shè)計(jì)教學(xué)實(shí)踐并未在非計(jì)算機(jī)或軟件類專業(yè)培養(yǎng)出大批合格的具備程序設(shè)計(jì)能力的學(xué)科人才。C、Java、VB都是非常難以理解的程序設(shè)計(jì)語言,因?yàn)檫@些語言除了基本程序邏輯外,都加入了額外的計(jì)算概念,如C語言的指針、Java的面向?qū)ο?、VB的視窗交互等。實(shí)際上,以往程序設(shè)計(jì)入門課程并未純粹訓(xùn)練學(xué)生分析問題、解決問題的程序設(shè)計(jì)邏輯,而將大量學(xué)時(shí)用于編程語言所附加功能的教學(xué)上,學(xué)生在未理解基本程序邏輯前提下再去理解較高級(jí)的計(jì)算概念,學(xué)習(xí)曲線陡峭,難以保持學(xué)習(xí)熱情。Python具有相當(dāng)簡潔的語法,對(duì)程序邏輯設(shè)計(jì)比較純粹,學(xué)習(xí)曲線平滑,有助于保護(hù)學(xué)生學(xué)習(xí)熱情,將能夠?yàn)檫M(jìn)一步加深程序設(shè)計(jì)理解和運(yùn)用奠定更好的學(xué)習(xí)基礎(chǔ)。
第三,Python語言教學(xué)將能夠激發(fā)學(xué)生的創(chuàng)新性。C、Java、VB等傳統(tǒng)程序設(shè)計(jì)語言受限于概念和語法的復(fù)雜性,很難在有限學(xué)時(shí)內(nèi)引導(dǎo)學(xué)生開展創(chuàng)新性程序設(shè)計(jì)訓(xùn)練。Python語言有十萬余第三方庫,其中部分庫適合初學(xué)者進(jìn)行程序設(shè)計(jì)探索。以北京理工大學(xué)某次教學(xué)實(shí)踐為例,在最初12個(gè)學(xué)時(shí)里,學(xué)生可以嘗試?yán)胻urtle庫繪制各類型玫瑰花,如圖1所示。創(chuàng)新是新思想的源泉,Python語言能夠讓學(xué)生結(jié)合特定編程模式探索思維空間的新事物。
2 Python教學(xué)理念:理解和運(yùn)用計(jì)算生態(tài)
2.1 軟件產(chǎn)業(yè)模式和計(jì)算生態(tài)的價(jià)值
20世紀(jì)80年代前,軟件開發(fā)和使用近乎處于全封閉狀態(tài),與其他工業(yè)產(chǎn)品類似,它通過商業(yè)渠道分發(fā)和銷售。隨后,以Richard Stallman為代表的一批早期軟件工程師在1983年啟動(dòng)了GNU項(xiàng)目,開始了“自由軟件”的探索之路。從Stallman設(shè)想的由少數(shù)人參與的“大教堂模式”到Linus Torvalds實(shí)踐的由幾千人共同參與的“集市模式”[3],自由軟件理念的改變不僅是開發(fā)模式的改變,也驗(yàn)證了以“共識(shí)原則”和“社會(huì)利他(egoboo)原則”組織軟件開發(fā)的可行性和高效性,為隨后自由軟件發(fā)展奠定了可操作的開發(fā)原則。
經(jīng)過近30年的發(fā)展,軟件領(lǐng)域在創(chuàng)新模式、開發(fā)模式和商業(yè)模式方面都發(fā)生了翻天覆地的變化,已經(jīng)與傳統(tǒng)工業(yè)截然不同。軟件領(lǐng)域所帶來的最大不同在于軟件領(lǐng)域已經(jīng)逐步建成了由全球工程師自發(fā)組織維護(hù)的、覆蓋信息技術(shù)幾乎所有領(lǐng)域的、由協(xié)議保護(hù)但免費(fèi)獲得的“開源軟件”體系,建成了良性發(fā)展的計(jì)算生態(tài)。
在計(jì)算生態(tài)的影響下,軟件產(chǎn)業(yè)的創(chuàng)新模式從“刀耕火種”且產(chǎn)權(quán)獨(dú)有的發(fā)展模式向 “避免重復(fù)造輪子”但產(chǎn)權(quán)清晰的開源軟件利用模式轉(zhuǎn)變。這種轉(zhuǎn)變以快速集成已有軟件功能為方式,突出問題的解決和產(chǎn)品快速迭代,不局限于軟件開發(fā)的封閉性。這種模式極大地推動(dòng)了信息技術(shù)的創(chuàng)新和發(fā)展。例如,AlphaGo在全球產(chǎn)生巨大影響力的同時(shí),其背后的TensorFlow技術(shù)同期開源,并快速應(yīng)用于機(jī)器翻譯、自動(dòng)駕駛、唇語識(shí)別等多個(gè)領(lǐng)域。這種快速創(chuàng)新受益于計(jì)算生態(tài),也代表了軟件領(lǐng)域新的產(chǎn)業(yè)模式。
計(jì)算生態(tài)是“生態(tài)”概念在計(jì)算機(jī)技術(shù)中的對(duì)應(yīng),廣義指在計(jì)算機(jī)技術(shù)空間內(nèi),由軟件、硬件、開發(fā)模式和設(shè)計(jì)理念構(gòu)成的統(tǒng)一整體,各組成部分相互影響、相互制約、協(xié)同發(fā)展。本文所闡述的計(jì)算生態(tài)特指在程序設(shè)計(jì)領(lǐng)域構(gòu)建的支撐計(jì)算機(jī)技術(shù)發(fā)展的生態(tài)體系,即以開源項(xiàng)目為組織形式,充分利用“共識(shí)原則”和“社會(huì)利他原則”組織人員,在競(jìng)爭(zhēng)發(fā)展、相互依存和迅速更迭中完成信息技術(shù)更新?lián)Q代并形成技術(shù)自我演化路徑的有機(jī)模式。
計(jì)算生態(tài)沒有頂層設(shè)計(jì),而是以程序功能為單元自發(fā)組織和發(fā)展,具備3個(gè)特點(diǎn):競(jìng)爭(zhēng)發(fā)展、相互依存和迅速更迭,結(jié)合具體應(yīng)用場(chǎng)景計(jì)算生態(tài)也被稱為生態(tài)圈、編程生態(tài)等。以Python語言為例,全球有超過十萬個(gè)第三方庫,由公司、個(gè)人工程師等開發(fā),以開源形式免費(fèi)共享,具備以下顯著的生態(tài)特點(diǎn)。
(1)競(jìng)爭(zhēng)發(fā)展。對(duì)于重要的計(jì)算需求,存在2個(gè)及以上第三方庫支持,形成了相互競(jìng)爭(zhēng)的發(fā)展態(tài)勢(shì)。例如,urllib、requests、scrapy等第三方庫都提供網(wǎng)絡(luò)爬蟲功能;隨著競(jìng)爭(zhēng)深入,requests庫成為簡單頁面爬取的主流工具,scrapy庫成為可靠爬蟲框架,urllib被逐步淘汰。
(2)相互依存。以“避免重復(fù)造輪子”為理念,第三方庫在技術(shù)上存在廣泛依存的關(guān)系,例如,中文分詞jieba庫,其內(nèi)部使用了os、logging、marshal、math、hashlib等眾多第三方庫。第三方庫之間也存在逐級(jí)封裝的依存關(guān)系,例如,數(shù)據(jù)處理pandas庫基于并擴(kuò)展了numpy庫。
(3)快速更迭。已經(jīng)出現(xiàn)的第三方庫在競(jìng)爭(zhēng)中快速發(fā)展,不斷迭代滿足用戶的最新需求,活躍的第三方庫更新周期與商業(yè)軟件產(chǎn)品更新周期相當(dāng)或更短。由于社區(qū)龐大且開放,新的應(yīng)用快速出現(xiàn),計(jì)算生態(tài)發(fā)展迅速。
計(jì)算生態(tài)不同于傳統(tǒng)API(應(yīng)用程序接口)。前者由工程師結(jié)合需求自發(fā)創(chuàng)建,沒有頂層設(shè)計(jì),沒有規(guī)劃和約束,唯一驅(qū)動(dòng)力是興趣和對(duì)需求的滿足;而API往往由單一公司或組織進(jìn)行頂層設(shè)計(jì)和全局規(guī)劃,如Windows API等。
隨著產(chǎn)業(yè)模式向互聯(lián)網(wǎng)思維和集成創(chuàng)新方向的演化,計(jì)算生態(tài)有效支撐了新產(chǎn)品的研發(fā)、原型和商業(yè)模式。產(chǎn)業(yè)界越來越多地依靠計(jì)算生態(tài)推動(dòng)變革,而高校只對(duì)基本技術(shù)和技能的訓(xùn)練不能很好地順應(yīng)業(yè)界發(fā)展。應(yīng)該看到,計(jì)算生態(tài)是當(dāng)代信息技術(shù)發(fā)展最重要的支撐,它幫助信息技術(shù)快速演進(jìn)和發(fā)展、推動(dòng)創(chuàng)新不斷產(chǎn)生、為普及最新技術(shù)鋪平道路。在新工科建設(shè)大背景下,將計(jì)算生態(tài)引入程序設(shè)計(jì)課程教學(xué)不僅將改革教學(xué)內(nèi)容,還能改變學(xué)生的創(chuàng)新意識(shí),培養(yǎng)創(chuàng)新思維。
2.2 “理解和運(yùn)用計(jì)算生態(tài)”的教學(xué)理念
針對(duì)Python語言教學(xué),我們提出了“理解和運(yùn)用計(jì)算生態(tài)”的教學(xué)理念。之所以在Python程序設(shè)計(jì)教學(xué)中引入計(jì)算生態(tài),主要因?yàn)镻ython具有龐大的計(jì)算生態(tài)圈,十萬多個(gè)第三方庫覆蓋幾乎所有技術(shù)領(lǐng)域,受眾面廣泛,很多功能能夠引起學(xué)生共鳴。其他語言或者只有大量API或者生態(tài)規(guī)模較小且初學(xué)困難。在當(dāng)代所有編程語言中,Python語言獨(dú)特的黏性使其成為最適合開展面向計(jì)算生態(tài)教學(xué)的編程語言。
“理解和運(yùn)用計(jì)算生態(tài)”指在Python語言程序設(shè)計(jì)入門課程中引入計(jì)算生態(tài)相關(guān)的教學(xué)內(nèi)容,顯式地讓學(xué)生產(chǎn)生對(duì)計(jì)算生態(tài)概念的認(rèn)知,以指導(dǎo)后續(xù)程序設(shè)計(jì)實(shí)踐。該教學(xué)理念包括如下兩層含義:
(1)理解計(jì)算生態(tài)。讓學(xué)生廣泛感知計(jì)算生態(tài)的存在,并認(rèn)識(shí)到計(jì)算生態(tài)的價(jià)值和作用。針對(duì)入門課程,可以結(jié)合一些基礎(chǔ)且零散的Python標(biāo)準(zhǔn)庫或第三方庫開展教學(xué)。如講解random庫,介紹隨機(jī)數(shù)的概念和應(yīng)用;講解jieba庫,介紹中文分詞的方法和原理;進(jìn)一步可以結(jié)合math庫,講解數(shù)學(xué)運(yùn)算函數(shù)的使用,并且引導(dǎo)學(xué)生用Python程序?qū)崿F(xiàn)math庫中的一些功能。通過這種方式打開學(xué)生視野,使其理解計(jì)算生態(tài)在程序設(shè)計(jì)中的作用和基本使用方法。
(2)運(yùn)用計(jì)算生態(tài)。面向能力培養(yǎng),圍繞一系列第三方庫培養(yǎng)學(xué)生掌握某一方面的基礎(chǔ)能力。如講解requests庫、beautifulsoup庫和re庫,培養(yǎng)學(xué)生掌握Web爬取和信息提取的能力;講解numpy庫、matplotlib庫和pandas庫,培養(yǎng)學(xué)生掌握數(shù)據(jù)處理和展示的能力。系列第三方庫的教學(xué)將提升學(xué)生對(duì)計(jì)算生態(tài)的理解和認(rèn)識(shí),形成有用的實(shí)戰(zhàn)能力。
3 面向計(jì)算生態(tài)的Python語言入門課程教學(xué)方案
3.1 Python語言入門課程教學(xué)方案
筆者參與編寫了2016年教育部教指委《基本要求》中Python語言教學(xué)方案,并于2017年出版了相關(guān)教材[4],2013—2017年在北京理工大學(xué)進(jìn)行了7次教學(xué)實(shí)踐,以“理解和運(yùn)用計(jì)算生態(tài)”為理念,構(gòu)建了一套相對(duì)成熟的Python語言入門課程教學(xué)方案。需要注意的是,盡管強(qiáng)調(diào)計(jì)算生態(tài),Python語言入門課程也需要同時(shí)重視對(duì)Python基礎(chǔ)語法和基本編程思路的培養(yǎng)。基本編程方法、Python語法和計(jì)算生態(tài)培養(yǎng)3者同等重要。
Python語言入門課程教學(xué)方案分為3個(gè)部分,建議48學(xué)時(shí)或更多,作為第一門程序設(shè)計(jì)類課程,教學(xué)方案如圖2所示。
該方案中“Python語言基本語法”部分主要講解程序的基本編程方法及Python語言基本語法相關(guān)的內(nèi)容,在前32或48學(xué)時(shí)內(nèi)講授?!袄斫庥?jì)算生態(tài)”部分主要講解零散的第三方庫,配合Python語言基本語法,可以講授turtle庫、math庫、random庫、PIL庫等,通過有趣且實(shí)用的案例保護(hù)學(xué)生對(duì)程序設(shè)計(jì)的學(xué)習(xí)興趣,在第4—32或第4—48學(xué)時(shí)內(nèi)講授,該階段不建議講解更多庫?!癙ython語言基本語法”和“理解計(jì)算生態(tài)”這兩部分內(nèi)容相互融合、相互支持、相輔相成,通過講解部分庫可以構(gòu)造有趣的實(shí)例,語法學(xué)習(xí)的逐步深入也助于對(duì)庫的理解和學(xué)習(xí)?!斑\(yùn)用計(jì)算生態(tài)”部分講解面向能力的系列庫,建議圍繞5個(gè)方向進(jìn)行教學(xué)。
(1)文本分析方向。通過分詞jieba和自然語言處理NLTK庫講解,形成處理中文、英文等文本并進(jìn)行分析的基本能力。
(2)數(shù)據(jù)處理方向。講解多維數(shù)據(jù)表示numpy庫和數(shù)據(jù)展示matplotlib庫,形成表示數(shù)據(jù)、繪制數(shù)據(jù)展示圖及開展深入數(shù)據(jù)運(yùn)算的基本能力。
(3)網(wǎng)絡(luò)爬蟲方向。講解Web爬取requests庫、HTML解析beautifulsoup(bs4)庫和正則表達(dá)式re庫,形成爬取數(shù)據(jù)、分析并提取網(wǎng)頁數(shù)據(jù)的基本能力。
(4)機(jī)器學(xué)習(xí)方向。講解數(shù)據(jù)處理pandas庫和機(jī)器學(xué)習(xí)算法集scikit-learn庫,形成清洗數(shù)據(jù)并進(jìn)行機(jī)器學(xué)習(xí)分類、聚類和回歸分析的基本能力。
(5)圖形繪制方向。講解圖形繪制的turtle庫和GUI設(shè)計(jì)的qt5庫,形成基本的GUI實(shí)現(xiàn)和圖形創(chuàng)意設(shè)計(jì)的基本能力。
3.2 教學(xué)方案的靈活運(yùn)用
面向計(jì)算生態(tài)的Python語言入門課教學(xué)方案適合面向各本科專業(yè)開設(shè),其中,“Python語言基本語法”和“理解計(jì)算生態(tài)”兩部分內(nèi)容適用于所有專業(yè),“運(yùn)用計(jì)算生態(tài)”部分建議結(jié)合專業(yè)特點(diǎn)來設(shè)計(jì),靈活運(yùn)用方式如圖3所示。
對(duì)于計(jì)算機(jī)類專業(yè),建議選擇網(wǎng)絡(luò)爬蟲方向,引導(dǎo)專業(yè)學(xué)生理解互聯(lián)網(wǎng)、網(wǎng)絡(luò)數(shù)據(jù)組織、搜索引擎、正則表達(dá)式等概念。
對(duì)于媒體藝術(shù)類專業(yè),建議選擇圖形繪制方向,理解程序設(shè)計(jì)對(duì)圖形藝術(shù)繪制的支持。
對(duì)于信息類專業(yè),建議選擇機(jī)器學(xué)習(xí)方向,引導(dǎo)學(xué)生學(xué)習(xí)并應(yīng)用基本的機(jī)器學(xué)習(xí)方法,用數(shù)學(xué)化、概率化和工程化思路解決問題。這部分內(nèi)容相對(duì)較難,需要視學(xué)生基礎(chǔ)來適當(dāng)調(diào)整,也可以選擇網(wǎng)絡(luò)爬蟲或數(shù)據(jù)處理方向。
對(duì)于經(jīng)管類專業(yè),建議選擇數(shù)據(jù)處理方向,加強(qiáng)學(xué)生對(duì)數(shù)據(jù)的敏感性,通過股票數(shù)據(jù)分析等實(shí)例強(qiáng)化學(xué)生對(duì)專業(yè)的理解。
對(duì)于人文類專業(yè),建議選擇文本分析方向,為后續(xù)文本統(tǒng)計(jì)分析的專業(yè)需求奠定初步基礎(chǔ)。
北京理工大學(xué)從2013年開始的7次教學(xué)實(shí)踐覆蓋經(jīng)管類、信息類、計(jì)算機(jī)類、媒體藝術(shù)類等20余個(gè)專業(yè),先后選擇教學(xué)方案中網(wǎng)絡(luò)爬蟲、圖形繪制和數(shù)據(jù)處理等方向,實(shí)際教學(xué)效果表明學(xué)生可以在32學(xué)時(shí)內(nèi)基本掌握程序設(shè)計(jì)方法并保持較高的熱情學(xué)習(xí),結(jié)課后有相當(dāng)比例學(xué)生持續(xù)開展Python編程,教學(xué)效果良好。結(jié)合上述教學(xué)方案,我們?cè)谥袊髮W(xué)MOOC[5]平臺(tái)先后開設(shè)了7門Python語言MOOC課程,包括入門課程Python語言程序設(shè)計(jì)、Python網(wǎng)絡(luò)爬蟲與信息提取、Python數(shù)據(jù)分析與展示、Python機(jī)器學(xué)習(xí)應(yīng)用、Python科學(xué)計(jì)算三維可視化、Python游戲開發(fā)入門、Python云端系統(tǒng)開發(fā)入門等。
4 結(jié) 語
將“理解和運(yùn)用計(jì)算生態(tài)”作為Python語言入門課程教學(xué)理念,在北京理工大學(xué)信息、管理、人文、車輛、軟件、計(jì)算機(jī)等11個(gè)學(xué)院20余個(gè)專業(yè)采用選修課和必修課進(jìn)行試點(diǎn),教學(xué)效果突出,學(xué)生響應(yīng)積極且熱烈,初步說明了面向計(jì)算生態(tài)的Python語言入門課程教學(xué)方案的有效性。
2016年,北京理工大學(xué)將Python語言作為全校公共基礎(chǔ)課重要的入門必修課程,寫入修訂的培養(yǎng)方案;更為重要的,北京理工大學(xué)在“雙一流”“新工科”建設(shè)的大背景下,將Python語言寫入計(jì)算機(jī)類、軟件類、信息類等專業(yè)5年發(fā)展計(jì)劃,將進(jìn)一步探索利用Python語言和計(jì)算生態(tài)推動(dòng)建立專業(yè)課程改革的新模式。
參考文獻(xiàn):
[1] 教育部高等學(xué)校大學(xué)計(jì)算機(jī)課程教學(xué)指導(dǎo)委員會(huì). 大學(xué)計(jì)算機(jī)基礎(chǔ)課程教學(xué)基本要求[J]. 北京: 高等教育出版社, 2017.
[2] 嵩天, 黃天羽, 禮欣. Python語言: 程序設(shè)計(jì)課程教學(xué)改革的理想選擇[J]. 中國大學(xué)教學(xué), 2016(2): 42-47.
[3] Raymond E S. 大教堂與集市[M]. 衛(wèi)劍釩, 譯. 北京: 機(jī)械工業(yè)出版社, 2014.
[4] 嵩天, 禮欣, 黃天羽. Python語言程序設(shè)計(jì)基礎(chǔ)[M]. 2版. 北京: 高等教育出版社, 2017.
[5] 中國大學(xué)MOOC[EB/OL]. [2016-06-30]. http://www.icourses.cn.
(編輯:彭遠(yuǎn)紅)