鄭世秀 劉曉潔
摘要:大學(xué)通識(shí)教育中程序設(shè)計(jì)課程的設(shè)置要適應(yīng)計(jì)算機(jī)技術(shù)的發(fā)展的不同階段。隨著計(jì)算機(jī)技術(shù)發(fā)展,青島大學(xué)目前的通識(shí)教育程序設(shè)計(jì)課程設(shè)置已經(jīng)不能完全適應(yīng)新工科背景下的應(yīng)用需求。本文從培養(yǎng)計(jì)算思維的視角,提出Python語言是通識(shí)教育中最合適的計(jì)算機(jī)入門以及進(jìn)階編程語言的觀點(diǎn),并提出了將Python語言作為入門級(jí)課程的可行的教學(xué)方案。
關(guān)鍵詞:計(jì)算思維;教學(xué)改革;程序設(shè)計(jì);計(jì)算機(jī)語言
中圖分類號(hào):G642.0 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1674-9324(2019)03-0265-03
一、程序設(shè)計(jì)與計(jì)算思維
在教育部提出建設(shè)新工科[1]的背景之下,培養(yǎng)具有工程實(shí)踐能力、創(chuàng)新能力的高素質(zhì)、復(fù)合型人才成為本科教育的重要目標(biāo)。計(jì)算思維[2]從思維層面闡述了運(yùn)用計(jì)算機(jī)科學(xué)的基礎(chǔ)概念求解問題、設(shè)計(jì)系統(tǒng)和理解人類行為的過程。理論思維、實(shí)驗(yàn)思維再加上計(jì)算思維構(gòu)成科學(xué)思維的三種方式。其中理論思維以數(shù)學(xué)學(xué)科為代表,以推理和演繹為特征;實(shí)驗(yàn)思維又稱實(shí)證思維,以物理學(xué)科為代表,以觀察和總結(jié)自然規(guī)律我特征;計(jì)算思維以計(jì)算機(jī)學(xué)科為代表,以設(shè)計(jì)和構(gòu)造為特征。思維決定了一個(gè)人解決問題的方式,計(jì)算思維與計(jì)算機(jī)技術(shù)的普及和發(fā)展密切相關(guān),運(yùn)用計(jì)算思維進(jìn)行問題求解是每個(gè)專業(yè)的大學(xué)生都應(yīng)當(dāng)具備的基本技能。
程序設(shè)計(jì)課程是訓(xùn)練計(jì)算思維能力的最直接、最有效的工具。非計(jì)算機(jī)專業(yè)學(xué)生學(xué)習(xí)程序設(shè)計(jì)大多不是為了學(xué)習(xí)一技之長(zhǎng)用來就業(yè)或謀生,而是在程序設(shè)計(jì)的訓(xùn)練過程中,學(xué)會(huì)將問題抽象、模塊化、分層次等方法,形成邏輯、理性思考問題的習(xí)慣,從而提高自己的信息素養(yǎng)和計(jì)算思維的能力。在把問題抽象過程中學(xué)會(huì)問題與數(shù)據(jù)的定義,并學(xué)會(huì)將復(fù)雜的問題轉(zhuǎn)化分解為若干簡(jiǎn)單的子問題的分解方法。程序設(shè)計(jì)教學(xué)將計(jì)算思維融入教學(xué)過程,將極大地提高學(xué)生解決實(shí)際問題的能力。在2016年,教育部高等學(xué)校大學(xué)計(jì)算機(jī)課程教學(xué)指導(dǎo)委員會(huì)發(fā)布了《大學(xué)計(jì)算機(jī)基礎(chǔ)課程教學(xué)基本要求》[3],按照基本要求國(guó)內(nèi)各高校可結(jié)合本校的教學(xué)情況開設(shè)包括Python語言在內(nèi)的程序設(shè)計(jì)課程教學(xué)語言,目前國(guó)內(nèi)已有幾百所高校開始開設(shè)了Python語言。
二、程序設(shè)計(jì)語言比較
筆者對(duì)所在高校青島大學(xué)和多所其他高校進(jìn)行了程序設(shè)計(jì)課程教學(xué)情況的系統(tǒng)調(diào)研。目前各高校為非計(jì)算機(jī)專業(yè)開設(shè)的程序設(shè)計(jì)語言多為以下幾種之一:
(一)C/C++
《C語言程序設(shè)計(jì)》是我國(guó)大多數(shù)高校普遍為本科生開設(shè)的課程,但同時(shí)也是期末考試中不及格率較高的一門課程,學(xué)生普遍反映即使通過了考試,仍然不知道如何去解決實(shí)際問題。而C++以對(duì)象、類、封裝、繼承、多態(tài)等為教學(xué)內(nèi)容,適合編寫較大規(guī)模的程序,對(duì)非計(jì)算機(jī)專業(yè)的學(xué)生來說,學(xué)習(xí)難度更大。因此,C語言和C++更適合計(jì)算機(jī)相關(guān)專業(yè)以及部分信息類專業(yè)學(xué)生,非計(jì)算機(jī)專業(yè)在運(yùn)用所學(xué)知識(shí)解決解決某些問題方面難度較大。
(二)數(shù)據(jù)庫開發(fā)工具Visual Foxpro
《Visual FoxPro程序設(shè)計(jì)》這門課也有很多高校開設(shè)。Visual Foxpro由Microsoft公司從Fox公司的FoxBase數(shù)據(jù)庫軟件經(jīng)過數(shù)次改良,并且移植到Windows平臺(tái)之上,主要用于開發(fā)數(shù)據(jù)管理與運(yùn)算等方面,是目前快捷、實(shí)用的數(shù)據(jù)庫管理系統(tǒng)軟件之一。使用VFP可以有效管理數(shù)據(jù),但其應(yīng)用有很大局限性,不能更好的分析數(shù)據(jù),無法處理數(shù)據(jù)管理之外的計(jì)算等應(yīng)用問題。尤其無法滿足網(wǎng)絡(luò)環(huán)境下的數(shù)據(jù)庫應(yīng)用問題。
(三)Visual Basic語言
VB語言用于開發(fā)Windows系統(tǒng)中的視窗應(yīng)用,由早期的Basic語言發(fā)展而來。VB開發(fā)的程序簡(jiǎn)單、直觀,在辦公自動(dòng)化軟件中的VBA與其一脈相承,最適合需要編寫視窗應(yīng)用的群體,但這種語言應(yīng)用范圍比較小,僅限于Windows系統(tǒng)。目前在程序設(shè)計(jì)語言中幾乎僅用于教學(xué),在開發(fā)應(yīng)用領(lǐng)域幾乎處于可有可無的狀態(tài)。
(四)Java語言
Java語言是面向?qū)ο蟮恼Z言,具有簡(jiǎn)單性、面向?qū)ο?、分布式、健壯性、安全性、平臺(tái)獨(dú)立與可移植性、多線程、動(dòng)態(tài)性等特點(diǎn),可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序。和C語言一樣,由于非計(jì)算機(jī)專業(yè)的學(xué)生的目標(biāo)是面向應(yīng)用而不是成為專業(yè)的程序員,因此并不需要關(guān)注代碼復(fù)用性和可移植性等復(fù)雜問題,Java主要適合計(jì)算機(jī)專業(yè)學(xué)生進(jìn)行軟件開發(fā)。
(五)MATLAB
MATLAB嚴(yán)格來講是一個(gè)工具包軟件而不是編程語言,以矩陣運(yùn)算見長(zhǎng),大量的工具箱簡(jiǎn)化了數(shù)據(jù)處理的難度,MATLAB主要專注于工程和科學(xué)計(jì)算是工程領(lǐng)域的重要計(jì)算軟件,并不適合作為入門級(jí)的編程語言。
(六)Python語言[4]
Python是純粹的自由軟件,源代碼和解釋器遵循GPL(GNU General Public License)協(xié)議。Python語法簡(jiǎn)潔清晰,強(qiáng)制縮進(jìn),可讀性好,能夠把用其他語言制作的各種模塊(尤其是C/C++)很輕松地聯(lián)結(jié)在一起,眾多開源的科學(xué)計(jì)算庫都提供了Python語言的調(diào)用接口。用戶可以在多種操作系統(tǒng)上免費(fèi)安裝Python語言及其絕大多數(shù)擴(kuò)展庫。相對(duì)于其他編程語言,Python更易學(xué)、更嚴(yán)謹(jǐn),它能讓用戶編寫出更易讀、易維護(hù)的代碼,且Python有著豐富的擴(kuò)展庫,是一門學(xué)的懂、用的上的語言。
計(jì)算機(jī)從1946年誕生到今天,硬件的發(fā)展過程經(jīng)歷了電子管、晶體管、集成電路、大規(guī)模及超大規(guī)模集成電路四個(gè)階段,計(jì)算機(jī)技術(shù)的發(fā)展則經(jīng)歷了四個(gè)時(shí)代[5],每一個(gè)時(shí)代幾乎都有一種稱雄于這個(gè)時(shí)代的硬件、軟件環(huán)境的編程語言。Python語言則是計(jì)算機(jī)技術(shù)發(fā)展到“復(fù)雜信息系統(tǒng)時(shí)代”的“后起之秀”。在計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)時(shí)代,C語言可以很好地對(duì)計(jì)算機(jī)體系結(jié)構(gòu)進(jìn)行抽象和自動(dòng)化。在計(jì)算機(jī)網(wǎng)絡(luò)時(shí)代,Java可以體現(xiàn)網(wǎng)絡(luò)對(duì)跨平臺(tái)的支持。在計(jì)算機(jī)視窗時(shí)代,VB體現(xiàn)了基于視窗的語法設(shè)計(jì)體系,VFP體現(xiàn)了數(shù)據(jù)管理的有效性。但每一種語言都有它產(chǎn)生、發(fā)展的生存期,隨著社會(huì)需求的變化與互聯(lián)網(wǎng)+時(shí)代的來臨,有一些語言會(huì)呈現(xiàn)出它的局限性。在復(fù)雜的信息系統(tǒng)時(shí)代,這些語言已經(jīng)不能適應(yīng)當(dāng)前的應(yīng)用需求,而Python語言有著良好的計(jì)算生態(tài)[5],其開源、開放的理念是推動(dòng)計(jì)算機(jī)技術(shù)發(fā)展的動(dòng)力。幾種語言的比較見表1。
三、兩個(gè)層次的Python語言程序設(shè)計(jì)教學(xué)方案
Python語言的教學(xué)內(nèi)容大致可以歸結(jié)為兩部分:Python語言基礎(chǔ)和Python語言生態(tài)圈。針對(duì)這兩部分內(nèi)容,可以設(shè)計(jì)兩個(gè)層次的教學(xué)方案。Python語言基礎(chǔ)部分突出程序設(shè)計(jì)方法,需要講清楚基本語言知識(shí)和基本算法,重視從問題描述到問題抽象再到算法程序的思維過程,幫助學(xué)生構(gòu)建問題求解的方法。Python語言生態(tài)圈指的是第三方函數(shù)庫的應(yīng)用,為各個(gè)不同專業(yè)提供支持,提供解決本領(lǐng)域問題的工具和方法。
(一)作為第一門程序設(shè)計(jì)語言
Python的基礎(chǔ)知識(shí)為重點(diǎn)內(nèi)容,適合所有非計(jì)算機(jī)專業(yè)。適當(dāng)根據(jù)具體專業(yè)特點(diǎn)介紹相關(guān)模塊庫,如語言類專業(yè)介紹自然語言處理模塊庫,工程類專業(yè)介紹科學(xué)計(jì)算模塊庫。共32學(xué)時(shí)(理論16學(xué)時(shí)+實(shí)踐16學(xué)時(shí))。教學(xué)內(nèi)容如表2所示。
(二)作為專業(yè)應(yīng)用課
各專業(yè)都需要有一個(gè)得力的工具滿足計(jì)算需求,專業(yè)應(yīng)用課程建立在一層次教學(xué)內(nèi)容基礎(chǔ)之上,重在第三方庫的應(yīng)用,學(xué)會(huì)利用Python解決本學(xué)科領(lǐng)域中的計(jì)算問題。表3中列出了Python能夠?yàn)閭€(gè)專業(yè)提供支持的第三方庫。
1.網(wǎng)絡(luò)數(shù)據(jù)獲取。網(wǎng)絡(luò)數(shù)據(jù)獲取主要有三種方式:一是利用Requests庫抓取網(wǎng)頁,然后再利用BeautifulSoup庫進(jìn)行解析;二是利用Web API或基于Web API的第三方模塊直接獲取數(shù)據(jù);三是根據(jù)HTTP協(xié)議直接從網(wǎng)頁下載數(shù)據(jù)或利用已有的語料庫。
2.文本分析。通過分詞jieba庫和自然語言處理NLTK庫處理中文、英文等文本并進(jìn)行分析。如詞頻統(tǒng)計(jì)等應(yīng)用。
3.數(shù)據(jù)處理和可視化。數(shù)據(jù)處理和可視化主要使用Python開源生態(tài)系統(tǒng)SciPy。利用SciPy中包含三個(gè)核心模塊:Numpy、Matplotlib、pandas來表示數(shù)據(jù)、繪制數(shù)據(jù)展示圖、開展深入數(shù)據(jù)運(yùn)算。
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庫,實(shí)現(xiàn)基本的GUI和圖形創(chuàng)意設(shè)計(jì)。
青島大學(xué)從2017開始對(duì)全校所有專業(yè)開設(shè)了Python選修課程,學(xué)生來自不同專業(yè)。采用第一層次教學(xué)方案,同時(shí)利用中國(guó)大學(xué)MOOC平臺(tái)[6]上北京理工大學(xué)的“Python語言程序設(shè)計(jì)”作為源課程,實(shí)施了MOOC+SPOC+翻轉(zhuǎn)課堂的混合教學(xué),取得了較好的教學(xué)體驗(yàn),在后續(xù)學(xué)期會(huì)繼續(xù)開設(shè)Python程序設(shè)計(jì)選修課并增加課程容量,實(shí)現(xiàn)兩個(gè)層次的教學(xué)實(shí)踐,讓Python真正成為學(xué)得會(huì)、用的上的編程語言。
四、結(jié)語
通過教學(xué)探索與實(shí)踐效果來看,Python語言可以滿足不同專業(yè)的教學(xué)需求,是一門能夠?qū)崿F(xiàn)“專業(yè)定制”的語言,可以很容易實(shí)現(xiàn)多樣化教學(xué),在共同的課程核心模塊上加上與專業(yè)需要結(jié)合緊密的第三方庫和案例就可以形成個(gè)性化的教學(xué)體系。且由于Python簡(jiǎn)單易入門,有很多公開的案例和代碼可以使用學(xué)習(xí),學(xué)生對(duì)這門語言保持較高的學(xué)習(xí)興趣和熱情,這是過去的程序設(shè)計(jì)課程難以達(dá)到的效果。相信在未來的計(jì)算機(jī)教學(xué)領(lǐng)域,Python會(huì)有更大的發(fā)展應(yīng)用空間。
參考文獻(xiàn):
[1]中國(guó)工程教育專業(yè)認(rèn)證標(biāo)準(zhǔn)(2015版)[S].北京:中國(guó)工程教育專業(yè)認(rèn)證協(xié)會(huì),2015.
[2]Wing J M.Computational thinking[J].Communications of the ACM,2006,49(3):33-35.
[3]教育部高等學(xué)校大學(xué)計(jì)算機(jī)課程教學(xué)指導(dǎo)委員會(huì).大學(xué)計(jì)算機(jī)基礎(chǔ)課程教學(xué)基本要求[J].北京:高等教育出版社,2017.
[4]嵩天,黃天羽,禮欣.Python程序設(shè)計(jì)基礎(chǔ)(第2版)[M].北京:高等教育出版社,2017.
[5]嵩天,黃天羽,禮欣.Python語言:程序設(shè)計(jì)課程教學(xué)改革的理想選擇[J].中國(guó)大學(xué)教學(xué),2016,(2).
[6]中國(guó)大學(xué)MOOC[EB/OL].
http://www.icourses.cn.