張 鵬 蘇 婷 蘇關(guān)東 李智健
(1中國石油大學(xué)(北京) a理學(xué)院, b石油工程學(xué)院, c化學(xué)工程學(xué)院,北京 102249;2西安工程大學(xué)管理學(xué)院,陜西 西安 710048)
近年來,隨著計算機科學(xué)和網(wǎng)絡(luò)技術(shù)的發(fā)展,人類處理大規(guī)模復(fù)雜數(shù)據(jù)的能力日益增強,從大規(guī)模數(shù)據(jù)中提取有價值信息的能力日益提高。人類逐漸步入到大數(shù)據(jù)時代,而工科物理[1]作為培養(yǎng)工科人才的基礎(chǔ)學(xué)科,理應(yīng)緊隨時代的發(fā)展,緊跟科技發(fā)展的步伐,培養(yǎng)與時俱進、符合社會需求的應(yīng)用型、創(chuàng)新型人才。
在工程知識體系上層學(xué)科的知識傳授和能力培養(yǎng)方面,作為處于基礎(chǔ)地位的一門學(xué)科,工科物理無疑提供了強大的底層支持。大學(xué)物理實驗是一門與理論課程緊密結(jié)合的必修課[2,3],本文以大學(xué)物理實驗這門課程為切入點,通過對常用于物理實驗數(shù)據(jù)處理的編程語言進行歸納總結(jié)來展示編程語言的優(yōu)劣,并進行對比,以便使學(xué)生結(jié)合自身專業(yè)所需,合理地學(xué)習(xí)和使用編程語言,更高效地處理實驗數(shù)據(jù)。同時,教師可以得到實驗教學(xué)值得借鑒的方法,并引導(dǎo)學(xué)生在實驗過程中合理使用計算機編程。此外,高校實驗教學(xué)改革亦可得到一定的啟發(fā),以利于培養(yǎng)新時期應(yīng)用型、創(chuàng)新型人才。
目前,計算機編程在物理實驗中的應(yīng)用形式多樣,主要包括應(yīng)用編程對實驗現(xiàn)象進行可視化仿真,實驗輔助平臺的開發(fā)[4,5],數(shù)據(jù)采集系統(tǒng)的設(shè)計[6,7]以及高效進行物理實驗數(shù)據(jù)處理等等。本文僅對計算機編程在物理實驗數(shù)據(jù)處理中的應(yīng)用現(xiàn)狀進行探討,因為無論是實驗輔助平臺的開發(fā),還是數(shù)據(jù)采集系統(tǒng)的設(shè)計,大多都以教師為主體和中心。教師通過開發(fā)相應(yīng)的實驗采集系統(tǒng),雖然可以提高實驗教學(xué)的課堂效率,減輕學(xué)生的學(xué)習(xí)負擔(dān),但是對提高學(xué)生能力卻沒有相對顯著的作用;而應(yīng)用計算機編程處理實驗數(shù)據(jù)則不同,通過教師的鼓勵和指導(dǎo),學(xué)生可以結(jié)合在計算機課程所學(xué)的知識和自身的優(yōu)勢,使用計算機編程處理實驗數(shù)據(jù)進行創(chuàng)新,并進行學(xué)術(shù)論文創(chuàng)作和發(fā)表[8],這是以學(xué)生為中心的。因此,不僅能夠使得學(xué)生從繁重的實驗數(shù)據(jù)處理中解放出來,提高課堂效率,還能提高學(xué)生應(yīng)用計算機編程解決實際問題的能力,有利于培養(yǎng)應(yīng)用型人才。同時,在指導(dǎo)論文創(chuàng)作的過程中,學(xué)生無形中進行了初步的科研訓(xùn)練,科研素養(yǎng)因此提升,也有利于成長為創(chuàng)新性人才。在物理實驗課程中處理物理實驗數(shù)據(jù)時,引入計算機編程,若再對學(xué)生們進行適當(dāng)?shù)恼撐牡膶懽骱桶l(fā)表的指導(dǎo),可實現(xiàn)應(yīng)用型、創(chuàng)新性人才培養(yǎng)的雙豐收。
從計算機編程在物理實驗中的應(yīng)用對象來看,用計算機編程處理實驗數(shù)據(jù)的實驗主要是需要采集的數(shù)據(jù)條目繁多,數(shù)據(jù)量大[8,9],數(shù)據(jù)處理過程復(fù)雜,需要進行不確定度評定[8,10,11]的實驗。最典型的例子是密立根油滴實驗、落球法測蓖麻油黏度實驗[8]等。下文將對常見的應(yīng)用于處理物理實驗數(shù)據(jù)的編程語言的適用性進行歸納總結(jié)和優(yōu)劣勢對比,以供學(xué)生根據(jù)實際需要,結(jié)合自身興趣進行學(xué)習(xí)和選用。
Visual Basic語言簡稱VB,顧名思義,它源于Basic語言,在Basic語言的基礎(chǔ)上實現(xiàn)了面向?qū)ο蟮目梢暬幊潭妹?。用Visual Basic語言來編寫可視化程序界面十分容易,只需在主界面上添加控件,再利用Visual Basic語言的事件驅(qū)動機制,編寫后臺處理數(shù)據(jù)的程序代碼即可。例如,在密立根油滴實驗測量元電荷的實驗中,使用Visual Basic來編寫界面處理程序的界面如圖1[12]所示。
圖1 密立根油滴實驗數(shù)據(jù)處理系統(tǒng)界面[12]
由圖1可知,該學(xué)者使用VB編寫了處理密立根油滴實驗數(shù)據(jù)的可視化用戶交互界面。該界面實現(xiàn)了數(shù)據(jù)處理,數(shù)據(jù)處理后數(shù)據(jù)導(dǎo)出及可視化作圖的功能,比較適合不懂編程語言的學(xué)生使用。但是,程序界面中的“TextBox”控件較多,即,在用戶使用的過程中需要輸入的數(shù)據(jù)較多,過程繁瑣,此缺點不容忽視。當(dāng)代大學(xué)生大部分具有編程基礎(chǔ),可以利用程序語言的文件讀寫機制編寫將數(shù)據(jù)文件直接導(dǎo)入的程序以便使用。同時,對于程序開發(fā)者而言,他們在可視化界面編寫的過程中,如果需要編寫的控件過多,則會增加編程的工作量。很多時候,實驗數(shù)據(jù)都以表格的形式呈現(xiàn),而在Visual Basic中編寫表格則需要使用多個“TextBox”控件,因此,這給我們帶來的是復(fù)雜的可視化界面排版工作,以及重復(fù)的后臺程序編寫工作。
VBA全稱為Visual Basic for Application,顧名思義,即為VB語言在應(yīng)用軟件中的改進版本[13,14]。它的語法風(fēng)格與VB十分相似,掌握了VB語言就可以快速地掌握VBA語言。在office系列辦公軟件中,Word、PPT、Excel中均可以作為VBA編程的平臺,但是由于Excel是office系列軟件中主要用于處理數(shù)據(jù)的軟件,所以在Excel平臺使用VBA編程處理數(shù)據(jù)相對方便常見。相對于VB,VBA具有更加簡潔高效的特點,它借助Excel的平臺,可以通過后臺編碼來調(diào)用Excel中內(nèi)置的函數(shù),以實現(xiàn)數(shù)據(jù)的高效處理。例如,使用VBA處理落球法測蓖麻油粘度實驗數(shù)據(jù)的程序界面和運行結(jié)果分別如圖2、圖3所示。
由圖2可見,該學(xué)者僅僅在Excel界面中添加了一個“數(shù)據(jù)處理”控件,通過點擊該控件,便可自動化處理單元格中的“小球直徑”“下落時間”等一系列的數(shù)據(jù),最后可彈出圖3的結(jié)果,實現(xiàn)了在Excel表格內(nèi)部使用程序?qū)?shù)據(jù)的處理,而不需要像VB那樣,先輸入數(shù)據(jù),再進行數(shù)據(jù)處理,即實現(xiàn)了數(shù)據(jù)和程序在物理上的統(tǒng)一,邏輯上的分離,相對于使用VB的文件操作功能讀取Excel[7]、Origin中的數(shù)據(jù),避免了操作過程中數(shù)據(jù)不透明的弊端,降低了出現(xiàn)讀取數(shù)據(jù)亂碼、錯位等問題的風(fēng)險,同時還能避免用程序處理完數(shù)據(jù)后,還要用Excel[15]或者Origin[16]對程序處理過的數(shù)據(jù)進行二次處理以及可視化的繁雜。
C語言和C++都是運行速度頂尖的高級語言,二者的區(qū)別主要是:C語言是面向過程的語言;而C++則是在C語言的基礎(chǔ)上添加了類而形成的面向?qū)ο蟮恼Z言。C語言面向過程的特性可以耦合絕大部分物理量的求解過程,適合用于涉及對象單一、過程復(fù)雜程度低的物理實驗數(shù)據(jù)的處理;而C++面向?qū)ο蟮奶匦詣t與人類從物理學(xué)的角度認知客觀存在的物體的過程一致,因而可以很好地反映物體與物體之間的作用關(guān)系,適合涉及對象相對較多、過程復(fù)雜程度相對較高的物理實驗數(shù)據(jù)的處理。C語言和C++處理實驗數(shù)據(jù)具有邏輯清晰、運行效率高和運行速度快等優(yōu)勢[18],十分適合用于復(fù)雜的不確定度的計算和處理。用C語言處理落球法測量粘滯阻力實驗數(shù)據(jù)的DOS界面窗口如圖4所示[8]。
圖2 VBA處理落球法測蓖麻油黏度實驗數(shù)據(jù)的程序界面[17]
圖3 VBA處理落球法測蓖麻油粘度實驗數(shù)據(jù)程序運行結(jié)果[17]
圖4 落球法測量黏滯阻力程序的DOS界面窗口[8]
由圖4可以看出,該程序主要通過DOS命令窗口來與程序內(nèi)部的算法進行交互,如果輸入錯誤則需要重新輸入,這會增加數(shù)據(jù)處理的工作量。除了文獻[8]使用的DOS交互進行數(shù)據(jù)輸入外,它還可以使用程序的文件讀寫機制來進行數(shù)據(jù)的錄入,但是,在文件讀寫時,對文件的格式、文件內(nèi)數(shù)據(jù)的組織結(jié)構(gòu)都有嚴格的要求,這容易造成數(shù)據(jù)與程序?qū)?yīng)不上帶來的最終結(jié)果的錯誤,對用戶不友好,適合有較好編程基礎(chǔ)的學(xué)生使用。還有,在C語言程序設(shè)計教學(xué)過程中,文件的讀寫操作是非重點內(nèi)容,學(xué)生對此掌握得往往不夠扎實,因此,培養(yǎng)學(xué)生的自學(xué)能力便顯得重要了。此外,C和C++默認的數(shù)據(jù)存儲是靜態(tài)的,若使用動態(tài)存儲,則需要增加代碼量,而使用Java可以避免這些工作量。
Java語言是目前最流行的語言之一,除了上文提及的它對數(shù)據(jù)的動態(tài)存儲可以減少代碼量以外,它還有諸多優(yōu)勢。例如,Java語言在eclipse集成開發(fā)環(huán)境中處理密立根油滴實驗數(shù)據(jù)程序的運行結(jié)果如圖5所示[19]。
由圖5可知,該學(xué)者將數(shù)據(jù)直接寫進了代碼里,即用戶直接與程序內(nèi)部的代碼進行交互。但是,對于不懂Java語言的用戶而言,他們在使用過程中容易造成對代碼的錯誤修改,這不利于代碼的安全。
圖5 Java語言編程處理密立根油滴實驗數(shù)據(jù)程序的運行結(jié)果[19]
然而,Java語言的優(yōu)點也應(yīng)當(dāng)重視。和C++一樣,Java是面向?qū)ο蟮母呒壵Z言,它以最簡潔的方式實現(xiàn)了C++的所有功能,但在運行速度上不如前者。相對于VB,使用Java編程處理數(shù)據(jù)時,用戶可以根據(jù)實際需要來決定是否編寫圖形用戶界面,而不必囿于圖形界面,編程效率高。此外,Java強大的網(wǎng)絡(luò)編程功能更是具有廣闊的應(yīng)用前景,且可移植性強。
Python語言是一種動態(tài)的面向?qū)ο蟮哪_本語言,語法簡潔清晰、高層數(shù)據(jù)結(jié)構(gòu)效率高、具有跨平臺和開源等優(yōu)勢[20],但是它也與Java一樣,在運行速度上稍遜于C/C++。隨著Python在科學(xué)計算上的運用越來越廣泛,目前版本的Python提供了開源的用于圖形用戶界面編寫和科學(xué)計算的程序庫。例如,用于生成可視化界面的WxPython[20],用于科學(xué)計算的SciPy、NumPy和用于畫圖matplotlib等[20-22],十分便于用于物理實驗數(shù)據(jù)的處理和處理結(jié)果的可視化。Python處理牛頓環(huán)實驗數(shù)據(jù)結(jié)果如圖6所示[21]。
圖6 Python處理牛頓環(huán)實驗數(shù)據(jù)結(jié)果[21]
由圖6可見,與VB一樣,該學(xué)者通過GUI編程設(shè)計了用于數(shù)據(jù)處理的可視化界面。界面中具有大量需要輸入的數(shù)據(jù),其缺點和VB界面的程序設(shè)計類似,此處不再贅述。
綜上所述,不同的計算機語言各有優(yōu)缺點,爭論孰優(yōu)孰劣并無太大的意義,掌握清楚各語言的優(yōu)劣勢的目的是可以根據(jù)不同實驗的具體情況具體分析。在適宜使用編程方法來處理數(shù)據(jù)的前提下,選擇最適合處理該實驗數(shù)據(jù)的計算機語言進行處理。
學(xué)生無論是選用計算機語言來處理實驗數(shù)據(jù),還是在教師引導(dǎo)下使用編程方法來進行數(shù)據(jù)處理,都應(yīng)該充分考慮到自身編程基礎(chǔ)和專業(yè)的需求。例如,對于將來可能用到Java語言[23,24]來解決本專業(yè)問題的學(xué)生,則推薦教師引導(dǎo)其進行Java語言的學(xué)習(xí)和應(yīng)用,提高能力,為學(xué)好專業(yè)課打好基礎(chǔ)。
同時,教師應(yīng)該結(jié)合對學(xué)生在計算機語言上的熟悉程度和自身的計算機編程素養(yǎng),培養(yǎng)學(xué)生的自學(xué)能力,因材施教,將計算機編程的優(yōu)勢發(fā)揮到物理實驗教學(xué)中去。
計算機編程在物理實驗數(shù)據(jù)處理方面的應(yīng)用越來越廣泛,且相關(guān)學(xué)術(shù)論文作者群體重心有由高校實驗教師向在校學(xué)生偏移的趨勢。
首先,編程課程的普及為學(xué)生提供能力基礎(chǔ)。在計算機科學(xué)高度發(fā)展的時代背景之下,計算機編程的教育在高校中,尤其是在理工科專業(yè)中,也越來越重要了。這為學(xué)生使用編程的方式來處理實驗數(shù)據(jù)提供了能力基礎(chǔ),符合時代的發(fā)展背景。
其次,一個長久不變的規(guī)律是:繁瑣的計算必然會催生新型的數(shù)據(jù)處理方式。許多經(jīng)典的物理實驗,例如密立根油滴實驗,在實驗數(shù)據(jù)處理方面涉及的物理量多,數(shù)據(jù)量大,處理過程復(fù)雜。學(xué)生在課后完成實驗報告的過程中,由于覺得運算量大且運算過程枯燥乏味,因而產(chǎn)生了運用編程方法來處理數(shù)據(jù)以便提高效率的想法。
此外,大學(xué)生課外科技創(chuàng)新活動為編程處理數(shù)據(jù)轉(zhuǎn)化為科技創(chuàng)新成果提供了平臺。目前的高校中舉行著一系列與物理實驗相關(guān)的大學(xué)生科技創(chuàng)新活動和比賽,例如,科技創(chuàng)新訓(xùn)練項目、物理實驗競賽和“挑戰(zhàn)杯”等。物理實驗除了對實驗裝置和實驗方法的改進外,實驗數(shù)據(jù)處理方法的改進也是一個重要的方面。參加比賽的作品除了實物外,往往還以論文和專利的形式出現(xiàn),因此使得該類論文的許多作者群體是在校大學(xué)生。同時,國內(nèi)一些優(yōu)秀的期刊都開設(shè)有專屬于大學(xué)生的欄目,例如:《大學(xué)物理》和《物理與工程》等雜志開設(shè)的大學(xué)生園地欄目,為大學(xué)生切實提高創(chuàng)新能力和科研水平提供了更好的平臺。
目前,中國石油大學(xué)(北京)正在進行工程教育專業(yè)認證和 “雙一流”大學(xué)建設(shè),將計算機編程引入大學(xué)物理實驗課程的教學(xué)中并在此基礎(chǔ)上對學(xué)生進行學(xué)術(shù)論文寫作發(fā)表的指導(dǎo),這無疑是一個很好的切入點。
2014年11月13日,教育部發(fā)布了中國第一份《中國工程教育質(zhì)量報告》,從多視角多層次多維度呈現(xiàn)中國工程教育質(zhì)量[25]。其中,社會需求適應(yīng)度是一個重要的指標。社會無疑是需要應(yīng)用型、創(chuàng)新型人才的,特別是對于工科這一應(yīng)用類學(xué)科而言。編程能力是應(yīng)用型、創(chuàng)新型工科人才應(yīng)具備的一項重要能力[26-28]。由于工程師在工程實踐中需要建立相應(yīng)的工程模型來解決實際問題,而工程模型需要真實地反映現(xiàn)場的實際情況,貼近于生產(chǎn)實際,因此相對于理想化的理論模型,工程模型需要考慮的影響因素眾多,它的求解往往需要用到數(shù)值方法,而編程能力則是工程師在工程實踐中應(yīng)用數(shù)值方法解決實際問題的基礎(chǔ);此外工程實踐具有可重復(fù)性,工程實踐過程中可以編制相關(guān)的應(yīng)用軟件來輔助工程設(shè)計并減輕工程師的工作負擔(dān),而編制相應(yīng)的工程軟件,編程能力必不可少。在工科物理實驗教學(xué)過程中引入計算機編程,這可以提高學(xué)生應(yīng)用計算機編程解決物理學(xué)中遇到的問題的能力,進而拓展到工科專業(yè)領(lǐng)域,利于培養(yǎng)應(yīng)用型人才。
2015年11月05日,國務(wù)院發(fā)布的《統(tǒng)籌推進世界一流大學(xué)和一流學(xué)科建設(shè)總體方案》明確指出[29]:“培養(yǎng)拔尖創(chuàng)新人才,提升科學(xué)研究水平”,工科物理和大學(xué)物理實驗課程都應(yīng)該承擔(dān)起應(yīng)有的責(zé)任。工科物理和大學(xué)物理實驗在很多理工科專業(yè)培養(yǎng)方案中的定位都是基礎(chǔ)必修課程,然而,大學(xué)物理實驗課程在應(yīng)試教育導(dǎo)向的教育體系下不受重視。此外,教學(xué)安排和課程考核設(shè)置的不合理,導(dǎo)致本應(yīng)該提高學(xué)生動手能力、創(chuàng)新能力等的實驗課程沒有起到應(yīng)有的作用,而學(xué)好物理實驗課對學(xué)生的創(chuàng)新能力的提高,對研究生階段的學(xué)習(xí)和創(chuàng)新卻十分重要。
理論分析、實驗研究和計算方法是現(xiàn)代進行科學(xué)研究的三大方法和手段,物理學(xué)與之對應(yīng)地按照研究方法來分類衍生出三大分支:理論物理、實驗物理和計算物理。然而現(xiàn)狀是:許多研究生在實驗室中出現(xiàn)動手能力差、設(shè)計改進實驗的能力缺乏的現(xiàn)象,物理實驗課程的低效率是原因之一。此外,將編程的方法引入實驗數(shù)據(jù)的處理中,學(xué)生對三大主流的研究方法可以進行宏觀把握,對其產(chǎn)生初步的認識,這為將來創(chuàng)新提供了有效的方法論。
在此基礎(chǔ)上對學(xué)生進行論文寫作和發(fā)表的指導(dǎo),是培養(yǎng)創(chuàng)新型人才的一大途徑。論文是反映科研工作者科技創(chuàng)新能力和學(xué)術(shù)水平的重要指標,雖然在編程基礎(chǔ)上的數(shù)據(jù)處理類的論文創(chuàng)新性有限,但是這對于本科生而言卻是一個很好的訓(xùn)練過程和實踐平臺。
在論文寫作和論文修改過程中,對學(xué)生在撰寫論文過程中的規(guī)范訓(xùn)練,不但可以培養(yǎng)學(xué)生進行科學(xué)研究的基本素養(yǎng)和提高學(xué)生論文寫作的能力,還可以使學(xué)生在文獻調(diào)研和論文寫作等基本的科研過程中,深入理解實驗的設(shè)計原理并借鑒經(jīng)典實驗中的設(shè)計方法,從而提高他們的實驗?zāi)芰涂蒲心芰?;此外?在此過程中,培養(yǎng)學(xué)生良好的學(xué)術(shù)道德可以使他們成長為德才兼?zhèn)涞摹半p一流”人才,避免走入學(xué)術(shù)不端的歧途。
總結(jié)了Visual Basic、C語言、Java等在物理實驗數(shù)據(jù)處理中應(yīng)用較為廣泛的編程語言的優(yōu)劣勢,為學(xué)生在物理實驗課程中合理選擇編程語言處理數(shù)據(jù)提供了一定的指導(dǎo),也為教師正確引導(dǎo)學(xué)生使用計算機處理實驗數(shù)據(jù)提供了參考,同時提出了鼓勵學(xué)生使用計算機編程的方法處理物理實驗數(shù)據(jù)的教學(xué)方法和手段。
計算機編程在物理實驗數(shù)據(jù)處理方面的應(yīng)用越來越廣泛,在這一發(fā)展背景下,我們提出一些在大學(xué)物理實驗課程中引入計算機編程的建議:以計算機編程為基礎(chǔ),并把它在物理實驗中的應(yīng)用作為起點,向工科專業(yè)課輻射,循序漸進,培養(yǎng)應(yīng)用型人才;以指導(dǎo)學(xué)生撰寫學(xué)術(shù)論文為途徑,培養(yǎng)創(chuàng)新型德才兼?zhèn)涞摹半p一流”人才,為工程教育專業(yè)認證和“雙一流”大學(xué)的建設(shè)助力。