趙廣輝



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