趙廣輝
摘 要:針對高校工科專業(yè)程序設(shè)計課程教學(xué)的現(xiàn)狀和存在的問題,依據(jù)新工科建設(shè)中工程專業(yè)對程序設(shè)計等信息技術(shù)的需求,探索以計算思維為核心、以利用信息技術(shù)進(jìn)行復(fù)雜專業(yè)問題求解能力培養(yǎng)為導(dǎo)向的思路,構(gòu)建依托MOOC資源、以學(xué)科交叉融合案例研討為主的教學(xué)模式,提升教學(xué)效果,為解決復(fù)雜專業(yè)問題提供信息技術(shù)支撐。
關(guān)鍵詞:新工科;Python;交叉融合;程序設(shè)計
0 引 言
目前,我國高校工科專業(yè)均為本科學(xué)生開設(shè)一門程序設(shè)計課程,主要講授C語言,少量Visual Basic和Fortran語言。非計算機(jī)專業(yè)的程序設(shè)計課程定位是通識教育,對不同學(xué)科、不同基礎(chǔ)的學(xué)生采用相同或相近的教學(xué)大綱和基本相同的教學(xué)模式。教學(xué)目標(biāo)側(cè)重于程序設(shè)計的基本知識和方法,未能很好地將程序設(shè)計方法與專業(yè)問題求解結(jié)合起來,課程定位與專業(yè)需求不匹配。學(xué)生不知道如何利用程序設(shè)計解決專業(yè)問題,學(xué)習(xí)目的不明確,學(xué)習(xí)動力不足。
工程教育專業(yè)認(rèn)證標(biāo)準(zhǔn)中要求學(xué)生具備能夠應(yīng)用信息技術(shù)對復(fù)雜工程問題進(jìn)行預(yù)測、模擬和求解的能力[1];要求計算機(jī)類課程內(nèi)容能夠?qū)I(yè)問題求解提供一種信息技術(shù)的支撐,使學(xué)生能夠具備運(yùn)用信息技術(shù)解決復(fù)雜專業(yè)問題的能力,而這個能力目前未能明確體現(xiàn)在程序設(shè)計課程大綱中,在教學(xué)過程中經(jīng)常被忽視。這種支撐作用的缺失可能會導(dǎo)致非計算機(jī)專業(yè)開設(shè)程序設(shè)計課程的必要性被質(zhì)疑。
1 新工科建設(shè)對信息技術(shù)的要求
我國擁有世界上最大規(guī)模的工程教育。2016年,工科本科在校生538萬人,畢業(yè)生123萬人,專業(yè)布點17 037個,工科在校生約占高等教育在校生總數(shù)的1/3。然而,我國工科人才培養(yǎng)的目標(biāo)定位不清晰,工科教學(xué)理科化,對于通識教育與工程教育、實踐教育與實驗教學(xué)之間的關(guān)系和區(qū)別存在模糊認(rèn)識,工程教育與行業(yè)企業(yè)實際脫節(jié)太大,工科學(xué)生存在綜合素質(zhì)與知識結(jié)構(gòu)方面的缺陷 [2]。前不久,教育部提出新工科的概念,新工科是有別于傳統(tǒng)工科的學(xué)科交叉產(chǎn)物,強(qiáng)調(diào)以信息化帶動工業(yè)化。相對于傳統(tǒng)的工科人才,未來新興產(chǎn)業(yè)和新經(jīng)濟(jì)需要的是工程實踐能力強(qiáng)、創(chuàng)新能力強(qiáng)、具備國際競爭力的高素質(zhì)復(fù)合型“新工科”人才[3]。他們不僅在某一學(xué)科專業(yè)上學(xué)業(yè)精深,還應(yīng)具有“學(xué)科交叉融合”的特征;不僅能運(yùn)用所掌握的知識解決現(xiàn)有的問題,還有能力學(xué)習(xí)新知識、新技術(shù)以解決未來發(fā)展出現(xiàn)的問題,對未來技術(shù)和產(chǎn)業(yè)起到引領(lǐng)作用。
以“AlphaGo”為標(biāo)志,人工智能進(jìn)入2.0時代,智能制造是“中國制造2025”的主要方向,物聯(lián)網(wǎng)、大數(shù)據(jù)、云計算、人工智能、腦認(rèn)知、芯片等新概念層出不窮,創(chuàng)新業(yè)態(tài)催生大學(xué)教育轉(zhuǎn)型,傳統(tǒng)的理科和工科已不足以應(yīng)對時代變革,需要重構(gòu)一些核心知識,原來的老知識要升級換代[4]。在這個建設(shè)過程中,需要大量以程序設(shè)計為核心的信息技術(shù)對各專業(yè)提供支撐,需要構(gòu)建全新的、適應(yīng)新工科建設(shè)的程序設(shè)計教學(xué)體系。
2 Python程序設(shè)計語言
20年前,曾經(jīng)廣泛應(yīng)用于工科程序設(shè)計教學(xué)的Pascal、BASIC逐漸被C語言取代,但從解決計算問題角度看,C語言過分強(qiáng)調(diào)語法和性能,語法復(fù)雜,入門困難,并不適合非計算機(jī)專業(yè)學(xué)生解決一般工程和科學(xué)問題。從Tiobe統(tǒng)計數(shù)據(jù)看(表1),C 語言自 2005 年以來總體呈現(xiàn)下降趨勢,2015年后急劇下跌至 7% ,并且沒有回升的勢頭。C語言的進(jìn)化很緩慢,疲勢盡顯,很多學(xué)校和老師都在尋求一種更適合用于非計算機(jī)專業(yè)學(xué)生的程序設(shè)計教學(xué)語言。
傳統(tǒng)程序設(shè)計教學(xué)側(cè)重于語法、算法等基礎(chǔ)知識的講授,重知識、輕能力。在這個技術(shù)更新異常迅猛的信息化時代,這種模式已經(jīng)無法跟上時代的節(jié)奏?!端固垢4髮W(xué)2025計劃》提出軸翻轉(zhuǎn)的概念,將“先知識后能力”反轉(zhuǎn)為“先能力后知識”,能力成為大學(xué)生本科學(xué)習(xí)的基礎(chǔ)[4]。新工科是一個動態(tài)的、相對的概念,不斷地推陳出新,因此需要一門以能力培養(yǎng)為導(dǎo)向、可快速掌握、快速解決問題的程序設(shè)計語言。
Python是一種面向?qū)ο蟮慕忉屝陀嬎銠C(jī)程序設(shè)計語言,作為適應(yīng)新技術(shù)時代的輕語法程序設(shè)計語言,具有簡潔性、易讀性和可擴(kuò)展性的特點,可以讓我們把更多的精力投入到應(yīng)用與問題求解上,極大地降低學(xué)習(xí)難度、簡化開發(fā)復(fù)雜度和實現(xiàn)快速開發(fā),非常適合工科學(xué)生學(xué)習(xí)。Python語言被廣泛用于科學(xué)計算、數(shù)據(jù)處理、可視化、圖像處理、網(wǎng)站運(yùn)維、自然語言處理、Web開發(fā)、機(jī)器學(xué)習(xí)、大數(shù)據(jù)、數(shù)據(jù)挖掘、人工智能等領(lǐng)域。目前國際上排名前100的高校中80%都在開設(shè)Python程序設(shè)計,國內(nèi)眾多高校在正在構(gòu)建基于Python的程序設(shè)計教學(xué)體系,Python逐漸成為學(xué)習(xí)程序設(shè)計的第一選擇[5]。
3 Python程序設(shè)計教學(xué)
3.1 建設(shè)通專融合的程序設(shè)計教學(xué)模式
由于各學(xué)科、各專業(yè)對程序設(shè)計的需求不同,有些專業(yè)關(guān)注科學(xué)計算,有些專業(yè)關(guān)注數(shù)據(jù)處理,有些專業(yè)關(guān)注通訊與控制。面對不同的需求,如果還是單純地將程序設(shè)計課程定位于通識課程,只講授編程基礎(chǔ)知識是不能滿足實際需求的;可將專業(yè)需求凝練成案例、作業(yè)和練習(xí)題,將通識教育與專業(yè)需求有機(jī)結(jié)合在一起,實現(xiàn)從程序設(shè)計知識教學(xué)到程序設(shè)計能力培養(yǎng)的升華,達(dá)到培養(yǎng)具備利用程序設(shè)計技術(shù)解決復(fù)雜工程問題能力的卓越工程師的目的。
計算思維在復(fù)雜專業(yè)問題求解方面的落腳點是程序設(shè)計。隨著信息技術(shù)和智能技術(shù)的飛速發(fā)展,程序設(shè)計在工程科學(xué)領(lǐng)域變得越來越重要。對學(xué)生來說,程序設(shè)計課程作為通往計算世界的大門起著極其重要的作用,利用Python替代C語言程序設(shè)計,構(gòu)建全新的教學(xué)體系和教學(xué)模式,將極大地提升學(xué)生學(xué)習(xí)編程的興趣,提高程序設(shè)計課程的教學(xué)效果。
Python完全不同于C語言程序設(shè)計,其語法簡單,入門容易。教學(xué)過程中可輕語法、重實踐,加強(qiáng)實際問題求解能力的培養(yǎng),弱化實驗報告等形式性內(nèi)容,適當(dāng)增加實踐學(xué)時和實踐訓(xùn)練量,從而達(dá)到讓學(xué)生具備應(yīng)用程序設(shè)計技術(shù)解決專業(yè)問題的能力的目的。
3.2 基于MOOC開展學(xué)科交叉融合式案例教學(xué)
目前普遍存在的一個問題是承擔(dān)非計算機(jī)專業(yè)程序設(shè)計課程教學(xué)時,教師不關(guān)注學(xué)生有哪些專業(yè)問題需要用程序求解,不按培養(yǎng)程序員的模式組織教學(xué),輕能力培養(yǎng),重語法和程序性能,教學(xué)案例多半是簡單數(shù)學(xué)問題求解和經(jīng)典算法的程序?qū)崿F(xiàn)。這些教學(xué)案例與學(xué)生專業(yè)問題相去甚遠(yuǎn),學(xué)生無法將這些案例與自己的專業(yè)問題關(guān)聯(lián)起來,學(xué)習(xí)目標(biāo)不明確,學(xué)習(xí)動力不足,這是目前非計算機(jī)專業(yè)程序設(shè)計課程教學(xué)效果普遍不好的一個主要原因。
隨著MOOC等在線教育模式的興起,教師已經(jīng)不再是知識的唯一載體,學(xué)生可以隨時隨地從網(wǎng)絡(luò)獲取到各種所需的知識。依托MOOC資源,實行MOOC+SPOC的教學(xué)將是未來一段時間的主流教學(xué)模式。在這種教學(xué)模式下,學(xué)生可以通過MOOC獲取語法等基礎(chǔ)知識,教師從基礎(chǔ)知識教學(xué)中解放出來,深入所授課專業(yè)調(diào)研、分析、抽取問題、構(gòu)建數(shù)學(xué)模型并設(shè)計與專業(yè)相關(guān)案例用于教學(xué),用這些案例搭建程序設(shè)計與專業(yè)問題之間的橋梁,使理論知識與應(yīng)用實踐相結(jié)合。學(xué)生明確了學(xué)習(xí)目的,自然會提升學(xué)習(xí)興趣,學(xué)以致用,用以促學(xué),從而達(dá)到提升利用程序設(shè)計方法解決復(fù)雜專業(yè)工程問題的能力。
筆者在給材料專業(yè)學(xué)生授課的過程中,通過調(diào)研專業(yè)需求,設(shè)計了一些與專業(yè)相關(guān)的案例用于教學(xué),取得了較好的效果,如用材料專業(yè)學(xué)生工作中經(jīng)常用到的X射線衍射圖譜繪制(圖1(a)),把分散在各章的文件操作、文件遍歷、二維數(shù)據(jù)的格式化和處理、列表類型的操作、函數(shù)的調(diào)用、繪圖(數(shù)據(jù)源、線型、顏色、粗細(xì)、標(biāo)注)等知識點連成線、串成串,用18行代碼完成X射線衍射圖譜繪制,實現(xiàn)從知識到能力的升華。對這個實例的代碼進(jìn)行少量修改,便可以實現(xiàn)態(tài)密度(圖1(b)、1(c))、能帶(圖1(d)) 等類似數(shù)據(jù)的可視化。通過這一系列的訓(xùn)練,學(xué)生可以扎實地掌握數(shù)據(jù)可視化相關(guān)的知識,熟練運(yùn)用這些知識解決類似的專業(yè)問題,從而實現(xiàn)將能力培養(yǎng)落到實處的目的。
程序清單如下:
import pylab
def loadData(flieName):
inFile = open(flieName, 'r')
x = []
y = []
for line in inFile:
trainingSet = line.split(‘ \t ')
X.append(trainingSet[0])
y.append(trainingSet[1])
return (x, y)
def plotData(x, y):
pylab.figure(1)
pylab.plot(x, y, linestyle=‘-, color=‘red , linewidth=1)
pylab.xlabel('Angle')
pylab.ylabel('Intensity')
pylab.show()
(x, y) = loadData(‘XRD.txt
plotData(x, y)
改進(jìn)這個案例,通過引入pandas庫,利用pandas庫強(qiáng)大的數(shù)據(jù)處理能力對代碼進(jìn)行優(yōu)化,可使程序代碼從18行減少到5行,引導(dǎo)學(xué)生學(xué)習(xí)利用pandas庫進(jìn)行數(shù)據(jù)分析,掌握對不同格式數(shù)據(jù)源進(jìn)行操作的方法。第三方庫的引入可以極大地簡化問題求解和學(xué)生學(xué)習(xí)的難度,培養(yǎng)和引導(dǎo)學(xué)生盡可能利用第三方庫進(jìn)行編程,用最簡單的方法快速解決問題。
from pandas import Series
from matplotlib import pyplot
series = Series.from_csv('XRD.csv', header=0)
series.plot()
pyplot.show()
教師也可在作業(yè)和實驗的設(shè)計中融入一些專業(yè)相關(guān)問題,如將實驗數(shù)據(jù)處理、材料計算結(jié)果可視化和同期開課的物理化學(xué)課程熱力學(xué)過程中的恒溫可逆過程、反抗恒外壓過程、絕熱不可逆過程、絕熱可逆過程的計算等問題作為案例,既能鍛煉學(xué)生綜合運(yùn)用所學(xué)知識解決實際問題的能力,又可以較好地培養(yǎng)學(xué)生的學(xué)習(xí)興趣。
程序設(shè)計是實踐性很強(qiáng)的一門學(xué)科,編程能力不是僅靠教學(xué)就可以獲取的,需要學(xué)習(xí)者通過大量的實踐與應(yīng)用逐漸培養(yǎng)。在這個信息智能時代,新工科人才應(yīng)具有的學(xué)科交叉融合特征中最重要的就是融合專業(yè)知識與信息技術(shù),利用信息技術(shù)進(jìn)行創(chuàng)造性、主動性工作。程序設(shè)計正處于這個行業(yè)和時代的執(zhí)行層中心,學(xué)科交叉融合案例教學(xué)模式將會極大地提升學(xué)生利用信息技術(shù)解決專業(yè)問題的能力。
學(xué)科交叉融合式案例教學(xué)的難點在于專業(yè)需求的獲取和問題的抽象,這也是很多授課教師的困惑所在。很多教師認(rèn)為自己的職責(zé)在于程序設(shè)計知識的傳授,完成知識傳授就完成了教學(xué)任務(wù),學(xué)生專業(yè)需求與己無關(guān),但是離開了應(yīng)用,程序設(shè)計知識便成了無根之水、無本之木,純粹的知識點和算法教學(xué)很難喚起學(xué)生的學(xué)習(xí)興趣,必將嚴(yán)重影響教學(xué)效果。學(xué)生專業(yè)需求的獲取并不需要任課教師一定具備相關(guān)專業(yè)的知識背景,也不需要教師知道問題求解的機(jī)理,只需要其找到專業(yè)問題及其數(shù)學(xué)解法,便可以迅速設(shè)計對應(yīng)的程序設(shè)計案例,并不會給自己帶來較大的壓力。
3.3 Python專業(yè)生態(tài)圈
Python有一個很不錯的生態(tài)圈,全世界的程序員都可以編寫模塊并共享,其強(qiáng)大的標(biāo)準(zhǔn)庫奠定了Python發(fā)展的基石,豐富的第三方庫是Python不斷發(fā)展的保證,一些穩(wěn)定的第三方庫也會被加入到標(biāo)準(zhǔn)庫里。目前,第三方庫已經(jīng)接近11萬個,其中科學(xué)與工程類有7 000余個。Python語言眾多的擴(kuò)展庫構(gòu)成的開發(fā)環(huán)境十分適合工程技術(shù)、科研人員處理實驗數(shù)據(jù)和制作圖表,甚至開發(fā)科學(xué)計算應(yīng)用程序,如NumPy、SciPy、matplotlib等十分經(jīng)典的科學(xué)計算擴(kuò)展庫分別提供了快速數(shù)組處理、數(shù)值運(yùn)算以及繪圖功能。除此之外,每個專業(yè)領(lǐng)域都積累了大量功能強(qiáng)大的第三方,每個專業(yè)領(lǐng)域的第三方庫構(gòu)成了這個專業(yè)的Python生態(tài)圈,如材料科學(xué)領(lǐng)域有PyMatGen、VASPy、QuTiP、ChemTools、PyMKS等被廣泛應(yīng)用的第三方庫;借助這些庫,可以僅用少量代碼甚至只調(diào)用函數(shù)就可以完成一些數(shù)據(jù)處理、可視化等復(fù)雜操作。通過第三方庫中方法的調(diào)用,每條語句就可以實現(xiàn)數(shù)據(jù)的一類可視化,如圖2所示,不僅可以極大地提高開發(fā)效率,而且能大大降低開發(fā)難度,使用戶在掌握程序設(shè)計基礎(chǔ)知識的情況下就可以解決復(fù)雜專業(yè)問題。
from vaspy.electro import ElfCar
elfcar = ElfCar(ELFCAR)
elfcar.plot_contour()
elfcar.plot_mcontour()
elfcar.plot_contour3d()
隨著可用的專業(yè)第三方庫數(shù)量的增加,Python求解專業(yè)問題將會變得越來越簡單,這將在根本上提升課程的教學(xué)效果,使學(xué)生在較短時間內(nèi)具備解決復(fù)雜專業(yè)問題的能力。這個專業(yè)的生態(tài)圈需要每一位任課教師發(fā)掘擴(kuò)大,在教學(xué)過程中,師生可以積極參與專業(yè)生態(tài)圈的建設(shè),通過共建共享快速構(gòu)建起各專業(yè)的Python生態(tài)圈,對于教學(xué)和科研都會起到很好的促進(jìn)作用。筆者在授課過程中,嘗試引導(dǎo)學(xué)生開發(fā)一個材料計算可視化的數(shù)據(jù)處理包和一個物理化學(xué)工具包,雖然都還是雛形,但是在提升學(xué)習(xí)興趣、實踐能力和創(chuàng)新能力方面的效果還是非常不錯的。
4 結(jié) 語
隨著智能時代的到來和新工科建設(shè)的興起,程序設(shè)計教學(xué)面臨著廣闊的發(fā)展機(jī)遇,將擔(dān)負(fù)起培養(yǎng)作為科學(xué)思維三大支柱之一的計算思維能力的主要任務(wù),并為計算機(jī)學(xué)科與其他學(xué)科的交叉融合做好必要的知識和應(yīng)用能力儲備。用Python替代C語言作為教學(xué)語言可以將學(xué)生從復(fù)雜的語法中解脫出來,并集中精力于問題分析和求解。與專業(yè)融合的案例教學(xué)可以使學(xué)生明確學(xué)習(xí)程序設(shè)計的目的,培養(yǎng)學(xué)習(xí)興趣。把解決實際工作中的具體任務(wù)作為學(xué)習(xí)的最終目標(biāo),可以增強(qiáng)學(xué)習(xí)動機(jī)和欲望。知識的真正價值在于實踐,學(xué)習(xí)的根本目的在于運(yùn)用。以能力培養(yǎng)為導(dǎo)向,把知識融于實踐,再根據(jù)實踐中遇到的問題來學(xué)習(xí)新知識進(jìn)行求解,這樣相互促進(jìn)以積累實踐經(jīng)驗并提升應(yīng)用能力。從知識與實踐相結(jié)合中不斷發(fā)現(xiàn)新問題和解決新問題,才能使學(xué)生真正掌握程序設(shè)計技術(shù)。
工科專業(yè)程序設(shè)計教學(xué)在通識教育框架下應(yīng)該考慮到各專業(yè)學(xué)生的知識結(jié)構(gòu)和能力要求,系統(tǒng)、科學(xué)地設(shè)計教學(xué)案例,實施個性化教學(xué),培養(yǎng)學(xué)生的復(fù)雜問題求解能力,為新工科建設(shè)和工程教育專業(yè)認(rèn)證提供更好的信息技術(shù)支撐。
參考文獻(xiàn):
[1] 中國工程教育專業(yè)認(rèn)證標(biāo)準(zhǔn)(2015版)[S]. 北京: 中國工程教育專業(yè)認(rèn)證協(xié)會, 2015.
[2] 吳愛華, 侯永峰, 楊秋波, 等. 加快發(fā)展和建設(shè)新工科, 主動適應(yīng)和引領(lǐng)新經(jīng)濟(jì)[J]. 高等工程教育研究, 2017(1): 1-9.
[3] 劉學(xué)東. 新思維, 新課程: 斯坦福大學(xué)通識教育改革[J]. 清華大學(xué)教育研究, 2014(5): 96-102.
[4] 王佳, 翁默斯, 呂旭峰. 斯坦福大學(xué)2025計劃: 創(chuàng)業(yè)教育新圖景[J]. 世界教育信息, 2016(10): 23-26.
[5] 嵩天, 黃天羽, 禮欣. Python語言: 程序設(shè)計課程教學(xué)改革的理想選擇[J]. 中國大學(xué)教學(xué), 2016(2): 15-20.
(編輯:宋文婷)