張 鵬 蘇 婷 蘇關東 李智健
(1中國石油大學(北京) a理學院, b石油工程學院, c化學工程學院,北京 102249;2西安工程大學管理學院,陜西 西安 710048)
近年來,隨著計算機科學和網絡技術的發展,人類處理大規模復雜數據的能力日益增強,從大規模數據中提取有價值信息的能力日益提高。人類逐漸步入到大數據時代,而工科物理[1]作為培養工科人才的基礎學科,理應緊隨時代的發展,緊跟科技發展的步伐,培養與時俱進、符合社會需求的應用型、創新型人才。
在工程知識體系上層學科的知識傳授和能力培養方面,作為處于基礎地位的一門學科,工科物理無疑提供了強大的底層支持。大學物理實驗是一門與理論課程緊密結合的必修課[2,3],本文以大學物理實驗這門課程為切入點,通過對常用于物理實驗數據處理的編程語言進行歸納總結來展示編程語言的優劣,并進行對比,以便使學生結合自身專業所需,合理地學習和使用編程語言,更高效地處理實驗數據。同時,教師可以得到實驗教學值得借鑒的方法,并引導學生在實驗過程中合理使用計算機編程。此外,高校實驗教學改革亦可得到一定的啟發,以利于培養新時期應用型、創新型人才。
目前,計算機編程在物理實驗中的應用形式多樣,主要包括應用編程對實驗現象進行可視化仿真,實驗輔助平臺的開發[4,5],數據采集系統的設計[6,7]以及高效進行物理實驗數據處理等等。本文僅對計算機編程在物理實驗數據處理中的應用現狀進行探討,因為無論是實驗輔助平臺的開發,還是數據采集系統的設計,大多都以教師為主體和中心。教師通過開發相應的實驗采集系統,雖然可以提高實驗教學的課堂效率,減輕學生的學習負擔,但是對提高學生能力卻沒有相對顯著的作用;而應用計算機編程處理實驗數據則不同,通過教師的鼓勵和指導,學生可以結合在計算機課程所學的知識和自身的優勢,使用計算機編程處理實驗數據進行創新,并進行學術論文創作和發表[8],這是以學生為中心的。因此,不僅能夠使得學生從繁重的實驗數據處理中解放出來,提高課堂效率,還能提高學生應用計算機編程解決實際問題的能力,有利于培養應用型人才。同時,在指導論文創作的過程中,學生無形中進行了初步的科研訓練,科研素養因此提升,也有利于成長為創新性人才。在物理實驗課程中處理物理實驗數據時,引入計算機編程,若再對學生們進行適當的論文的寫作和發表的指導,可實現應用型、創新性人才培養的雙豐收。
從計算機編程在物理實驗中的應用對象來看,用計算機編程處理實驗數據的實驗主要是需要采集的數據條目繁多,數據量大[8,9],數據處理過程復雜,需要進行不確定度評定[8,10,11]的實驗。最典型的例子是密立根油滴實驗、落球法測蓖麻油黏度實驗[8]等。下文將對常見的應用于處理物理實驗數據的編程語言的適用性進行歸納總結和優劣勢對比,以供學生根據實際需要,結合自身興趣進行學習和選用。
Visual Basic語言簡稱VB,顧名思義,它源于Basic語言,在Basic語言的基礎上實現了面向對象的可視化編程而得名。用Visual Basic語言來編寫可視化程序界面十分容易,只需在主界面上添加控件,再利用Visual Basic語言的事件驅動機制,編寫后臺處理數據的程序代碼即可。例如,在密立根油滴實驗測量元電荷的實驗中,使用Visual Basic來編寫界面處理程序的界面如圖1[12]所示。

圖1 密立根油滴實驗數據處理系統界面[12]
由圖1可知,該學者使用VB編寫了處理密立根油滴實驗數據的可視化用戶交互界面。該界面實現了數據處理,數據處理后數據導出及可視化作圖的功能,比較適合不懂編程語言的學生使用。但是,程序界面中的“TextBox”控件較多,即,在用戶使用的過程中需要輸入的數據較多,過程繁瑣,此缺點不容忽視。當代大學生大部分具有編程基礎,可以利用程序語言的文件讀寫機制編寫將數據文件直接導入的程序以便使用。同時,對于程序開發者而言,他們在可視化界面編寫的過程中,如果需要編寫的控件過多,則會增加編程的工作量。很多時候,實驗數據都以表格的形式呈現,而在Visual Basic中編寫表格則需要使用多個“TextBox”控件,因此,這給我們帶來的是復雜的可視化界面排版工作,以及重復的后臺程序編寫工作。
VBA全稱為Visual Basic for Application,顧名思義,即為VB語言在應用軟件中的改進版本[13,14]。它的語法風格與VB十分相似,掌握了VB語言就可以快速地掌握VBA語言。在office系列辦公軟件中,Word、PPT、Excel中均可以作為VBA編程的平臺,但是由于Excel是office系列軟件中主要用于處理數據的軟件,所以在Excel平臺使用VBA編程處理數據相對方便常見。相對于VB,VBA具有更加簡潔高效的特點,它借助Excel的平臺,可以通過后臺編碼來調用Excel中內置的函數,以實現數據的高效處理。例如,使用VBA處理落球法測蓖麻油粘度實驗數據的程序界面和運行結果分別如圖2、圖3所示。
由圖2可見,該學者僅僅在Excel界面中添加了一個“數據處理”控件,通過點擊該控件,便可自動化處理單元格中的“小球直徑”“下落時間”等一系列的數據,最后可彈出圖3的結果,實現了在Excel表格內部使用程序對數據的處理,而不需要像VB那樣,先輸入數據,再進行數據處理,即實現了數據和程序在物理上的統一,邏輯上的分離,相對于使用VB的文件操作功能讀取Excel[7]、Origin中的數據,避免了操作過程中數據不透明的弊端,降低了出現讀取數據亂碼、錯位等問題的風險,同時還能避免用程序處理完數據后,還要用Excel[15]或者Origin[16]對程序處理過的數據進行二次處理以及可視化的繁雜。
C語言和C++都是運行速度頂尖的高級語言,二者的區別主要是:C語言是面向過程的語言;而C++則是在C語言的基礎上添加了類而形成的面向對象的語言。C語言面向過程的特性可以耦合絕大部分物理量的求解過程,適合用于涉及對象單一、過程復雜程度低的物理實驗數據的處理;而C++面向對象的特性則與人類從物理學的角度認知客觀存在的物體的過程一致,因而可以很好地反映物體與物體之間的作用關系,適合涉及對象相對較多、過程復雜程度相對較高的物理實驗數據的處理。C語言和C++處理實驗數據具有邏輯清晰、運行效率高和運行速度快等優勢[18],十分適合用于復雜的不確定度的計算和處理。用C語言處理落球法測量粘滯阻力實驗數據的DOS界面窗口如圖4所示[8]。

圖2 VBA處理落球法測蓖麻油黏度實驗數據的程序界面[17]

圖3 VBA處理落球法測蓖麻油粘度實驗數據程序運行結果[17]

圖4 落球法測量黏滯阻力程序的DOS界面窗口[8]
由圖4可以看出,該程序主要通過DOS命令窗口來與程序內部的算法進行交互,如果輸入錯誤則需要重新輸入,這會增加數據處理的工作量。除了文獻[8]使用的DOS交互進行數據輸入外,它還可以使用程序的文件讀寫機制來進行數據的錄入,但是,在文件讀寫時,對文件的格式、文件內數據的組織結構都有嚴格的要求,這容易造成數據與程序對應不上帶來的最終結果的錯誤,對用戶不友好,適合有較好編程基礎的學生使用。還有,在C語言程序設計教學過程中,文件的讀寫操作是非重點內容,學生對此掌握得往往不夠扎實,因此,培養學生的自學能力便顯得重要了。此外,C和C++默認的數據存儲是靜態的,若使用動態存儲,則需要增加代碼量,而使用Java可以避免這些工作量。
Java語言是目前最流行的語言之一,除了上文提及的它對數據的動態存儲可以減少代碼量以外,它還有諸多優勢。例如,Java語言在eclipse集成開發環境中處理密立根油滴實驗數據程序的運行結果如圖5所示[19]。
由圖5可知,該學者將數據直接寫進了代碼里,即用戶直接與程序內部的代碼進行交互。但是,對于不懂Java語言的用戶而言,他們在使用過程中容易造成對代碼的錯誤修改,這不利于代碼的安全。

圖5 Java語言編程處理密立根油滴實驗數據程序的運行結果[19]
然而,Java語言的優點也應當重視。和C++一樣,Java是面向對象的高級語言,它以最簡潔的方式實現了C++的所有功能,但在運行速度上不如前者。相對于VB,使用Java編程處理數據時,用戶可以根據實際需要來決定是否編寫圖形用戶界面,而不必囿于圖形界面,編程效率高。此外,Java強大的網絡編程功能更是具有廣闊的應用前景,且可移植性強。
Python語言是一種動態的面向對象的腳本語言,語法簡潔清晰、高層數據結構效率高、具有跨平臺和開源等優勢[20],但是它也與Java一樣,在運行速度上稍遜于C/C++。隨著Python在科學計算上的運用越來越廣泛,目前版本的Python提供了開源的用于圖形用戶界面編寫和科學計算的程序庫。例如,用于生成可視化界面的WxPython[20],用于科學計算的SciPy、NumPy和用于畫圖matplotlib等[20-22],十分便于用于物理實驗數據的處理和處理結果的可視化。Python處理牛頓環實驗數據結果如圖6所示[21]。

圖6 Python處理牛頓環實驗數據結果[21]
由圖6可見,與VB一樣,該學者通過GUI編程設計了用于數據處理的可視化界面。界面中具有大量需要輸入的數據,其缺點和VB界面的程序設計類似,此處不再贅述。
綜上所述,不同的計算機語言各有優缺點,爭論孰優孰劣并無太大的意義,掌握清楚各語言的優劣勢的目的是可以根據不同實驗的具體情況具體分析。在適宜使用編程方法來處理數據的前提下,選擇最適合處理該實驗數據的計算機語言進行處理。
學生無論是選用計算機語言來處理實驗數據,還是在教師引導下使用編程方法來進行數據處理,都應該充分考慮到自身編程基礎和專業的需求。例如,對于將來可能用到Java語言[23,24]來解決本專業問題的學生,則推薦教師引導其進行Java語言的學習和應用,提高能力,為學好專業課打好基礎。
同時,教師應該結合對學生在計算機語言上的熟悉程度和自身的計算機編程素養,培養學生的自學能力,因材施教,將計算機編程的優勢發揮到物理實驗教學中去。
計算機編程在物理實驗數據處理方面的應用越來越廣泛,且相關學術論文作者群體重心有由高校實驗教師向在校學生偏移的趨勢。
首先,編程課程的普及為學生提供能力基礎。在計算機科學高度發展的時代背景之下,計算機編程的教育在高校中,尤其是在理工科專業中,也越來越重要了。這為學生使用編程的方式來處理實驗數據提供了能力基礎,符合時代的發展背景。
其次,一個長久不變的規律是:繁瑣的計算必然會催生新型的數據處理方式。許多經典的物理實驗,例如密立根油滴實驗,在實驗數據處理方面涉及的物理量多,數據量大,處理過程復雜。學生在課后完成實驗報告的過程中,由于覺得運算量大且運算過程枯燥乏味,因而產生了運用編程方法來處理數據以便提高效率的想法。
此外,大學生課外科技創新活動為編程處理數據轉化為科技創新成果提供了平臺。目前的高校中舉行著一系列與物理實驗相關的大學生科技創新活動和比賽,例如,科技創新訓練項目、物理實驗競賽和“挑戰杯”等。物理實驗除了對實驗裝置和實驗方法的改進外,實驗數據處理方法的改進也是一個重要的方面。參加比賽的作品除了實物外,往往還以論文和專利的形式出現,因此使得該類論文的許多作者群體是在校大學生。同時,國內一些優秀的期刊都開設有專屬于大學生的欄目,例如:《大學物理》和《物理與工程》等雜志開設的大學生園地欄目,為大學生切實提高創新能力和科研水平提供了更好的平臺。
目前,中國石油大學(北京)正在進行工程教育專業認證和 “雙一流”大學建設,將計算機編程引入大學物理實驗課程的教學中并在此基礎上對學生進行學術論文寫作發表的指導,這無疑是一個很好的切入點。
2014年11月13日,教育部發布了中國第一份《中國工程教育質量報告》,從多視角多層次多維度呈現中國工程教育質量[25]。其中,社會需求適應度是一個重要的指標。社會無疑是需要應用型、創新型人才的,特別是對于工科這一應用類學科而言。編程能力是應用型、創新型工科人才應具備的一項重要能力[26-28]。由于工程師在工程實踐中需要建立相應的工程模型來解決實際問題,而工程模型需要真實地反映現場的實際情況,貼近于生產實際,因此相對于理想化的理論模型,工程模型需要考慮的影響因素眾多,它的求解往往需要用到數值方法,而編程能力則是工程師在工程實踐中應用數值方法解決實際問題的基礎;此外工程實踐具有可重復性,工程實踐過程中可以編制相關的應用軟件來輔助工程設計并減輕工程師的工作負擔,而編制相應的工程軟件,編程能力必不可少。在工科物理實驗教學過程中引入計算機編程,這可以提高學生應用計算機編程解決物理學中遇到的問題的能力,進而拓展到工科專業領域,利于培養應用型人才。
2015年11月05日,國務院發布的《統籌推進世界一流大學和一流學科建設總體方案》明確指出[29]:“培養拔尖創新人才,提升科學研究水平”,工科物理和大學物理實驗課程都應該承擔起應有的責任。工科物理和大學物理實驗在很多理工科專業培養方案中的定位都是基礎必修課程,然而,大學物理實驗課程在應試教育導向的教育體系下不受重視。此外,教學安排和課程考核設置的不合理,導致本應該提高學生動手能力、創新能力等的實驗課程沒有起到應有的作用,而學好物理實驗課對學生的創新能力的提高,對研究生階段的學習和創新卻十分重要。
理論分析、實驗研究和計算方法是現代進行科學研究的三大方法和手段,物理學與之對應地按照研究方法來分類衍生出三大分支:理論物理、實驗物理和計算物理。然而現狀是:許多研究生在實驗室中出現動手能力差、設計改進實驗的能力缺乏的現象,物理實驗課程的低效率是原因之一。此外,將編程的方法引入實驗數據的處理中,學生對三大主流的研究方法可以進行宏觀把握,對其產生初步的認識,這為將來創新提供了有效的方法論。
在此基礎上對學生進行論文寫作和發表的指導,是培養創新型人才的一大途徑。論文是反映科研工作者科技創新能力和學術水平的重要指標,雖然在編程基礎上的數據處理類的論文創新性有限,但是這對于本科生而言卻是一個很好的訓練過程和實踐平臺。
在論文寫作和論文修改過程中,對學生在撰寫論文過程中的規范訓練,不但可以培養學生進行科學研究的基本素養和提高學生論文寫作的能力,還可以使學生在文獻調研和論文寫作等基本的科研過程中,深入理解實驗的設計原理并借鑒經典實驗中的設計方法,從而提高他們的實驗能力和科研能力;此外, 在此過程中,培養學生良好的學術道德可以使他們成長為德才兼備的“雙一流”人才,避免走入學術不端的歧途。
總結了Visual Basic、C語言、Java等在物理實驗數據處理中應用較為廣泛的編程語言的優劣勢,為學生在物理實驗課程中合理選擇編程語言處理數據提供了一定的指導,也為教師正確引導學生使用計算機處理實驗數據提供了參考,同時提出了鼓勵學生使用計算機編程的方法處理物理實驗數據的教學方法和手段。
計算機編程在物理實驗數據處理方面的應用越來越廣泛,在這一發展背景下,我們提出一些在大學物理實驗課程中引入計算機編程的建議:以計算機編程為基礎,并把它在物理實驗中的應用作為起點,向工科專業課輻射,循序漸進,培養應用型人才;以指導學生撰寫學術論文為途徑,培養創新型德才兼備的“雙一流”人才,為工程教育專業認證和“雙一流”大學的建設助力。