张 鹏 苏 婷 苏关东 李智健
(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等在物理实验数据处理中应用较为广泛的编程语言的优劣势,为学生在物理实验课程中合理选择编程语言处理数据提供了一定的指导,也为教师正确引导学生使用计算机处理实验数据提供了参考,同时提出了鼓励学生使用计算机编程的方法处理物理实验数据的教学方法和手段。
计算机编程在物理实验数据处理方面的应用越来越广泛,在这一发展背景下,我们提出一些在大学物理实验课程中引入计算机编程的建议:以计算机编程为基础,并把它在物理实验中的应用作为起点,向工科专业课辐射,循序渐进,培养应用型人才;以指导学生撰写学术论文为途径,培养创新型德才兼备的“双一流”人才,为工程教育专业认证和“双一流”大学的建设助力。