面向化学专业新生的计算机程序设计实验教学模式
2023-12-11谭立湘白雪飞
郑 重, 谭立湘, 王 雷, 白雪飞
(中国科学技术大学 a.微电子学院;b.信息科学技术学院,合肥 230026)
0 引 言
计算机已经成为现今人类生产和生活中不可缺少的重要工具,在各个领域都有着广泛的应用。培养既熟悉本专业知识又熟练掌握计算机技术的高水平人才,是新时代人才培养的目标,也是未来教育发展的必然趋势[1]。计算机程序设计是高等院校计算机基础教学系列中的核心课程,主要讲授结构化程序设计方法。作为配套实验课程,计算机程序设计实验是我校公选基础必修课,面向全校所有专业的大一新生,旨在培养学生的计算思维及利用计算机解决专业问题的能力[2-3]。
多年的教学实践表明,不同院系的新生对程序设计课程的重视程度不同,在同一教学模式下,教学效果差别较大。相比信息、机械等工科类专业的学生,一些化学、生物等纯理科专业的学生对利用程序设计求解专业问题缺乏深入的体会,导致对程序设计实验课程的重要性认识不足。在他们看来,计算机程序设计实验只是一门计算机类必修的基础课程而已,与自己所学的专业关系不大。部分理科生觉得自己将来主要是在实验室里做实验,不会去编写程序,缺乏学习程序设计的积极性和主动性,学习效果不佳[4-5]。
面对不同专业背景的学生,如何提出有针对性的教学策略,激发他们对计算机程序设计实验课程的学习兴趣,培养兼具专业技能及程序设计能力的复合型人才,成为计算机程序设计实验课程教学的一项新要求[6]。
1 实验教学模式研究思路
以本校化学专业为例,开展面向大一新生的计算机程序设计实验教学模式改革,教学研究路线如图1所示。首先通过问卷调查、座谈等形式,从“教”和“学”两方面开展课前调研:①与教师交流。根据化学专业本科生的培养方案,与专业课程教师深入交流,了解程序设计在化学专业学习中的重要应用,听取他们对程序设计实验课程的教学建议。②与选课学生交流。了解他们的计算机程序设计基础和对程序设计实验课程的教学期望。基于广泛调研,充分掌握化学专业新生的学习特点和需求,为程序设计实验教学改革提供科学依据[7]。
图1 教学研究路线示意图
基于以上调研结果,结合程序设计课程的教学目标,从学生正在学习的化学专业知识中提取与计算机程序设计相关的典型问题,贯穿到程序设计实验教学内容中;组织多样化的教学形式,多方位展现程序设计在化学学科中的广泛应用;在实验教学内容和教学形式上都着力融入化学背景,建立既符合计算机程序设计课程的教学要求,又能反映学生专业需求的计算机程序设计实验教学模式[8],并根据课后学生对教学效果的反馈,不断优化改进。
2 以解决化学问题为导向的教学内容
传统的实验课堂教学主要涉及计算机程序设计课程本身的难点和易错点,如迭代算法、排序和查找等,内容较为抽象,学生兴趣不大。根据计算机程序设计课程教学大纲,在原有程序设计实验的基础上,充分考虑大一学生的知识结构,对教学内容与相关化学知识进行整合。在程序设计案例的讲解中植入化学背景,让学生体会利用计算机解决本专业问题的思路和方法;编制与大一新生正在学习的化学课程紧密结合的实验习题,让学生通过上机实践进一步巩固所学的程序设计方法。教学实践证明,以解决化学专业问题为导向的程序实验教学内容设计,可以引导学生将计算机特有的处理方法应用到所学专业中[9-10],是解决他们学习程序设计课程动力不足的有效途径。
无机化学是本校化学专业新生开设的第一门专业课。表1 列出了与无机化学课程相结合的程序设计实验教学典型案例。
表1 与无机化学相结合的计算机程序设计实验教学案例
2.1 迭代法求解离子浓度
迭代算法是计算机程序设计课程要求掌握的基本算法之一。用二分迭代法和牛顿迭代法来求解一元方程的近似解是经典的上机实验题。通常是给出一个一元多次方程,求某个区间或某点附近的一个近似解。题目的描述一般没有特定的专业背景,学生只把它当作单纯的程序设计练习来对待,不了解它的具体应用,理解不够深刻。
将迭代算法和无机化学课上求解弱酸溶液中的氢离子浓度的问题结合,设计上机习题:已知某一元弱酸溶液的浓度为C(mol/L),求该溶液中的氢离子浓度及溶液的pH值。设该溶液中的氢离子浓度为x,由化学中的溶液平衡理论,可得:
式中:ka为弱酸的电离常数;kw为离子积常数。
对于方程(1)可用二分迭代法来求方程的一个近似解。二分迭代法的原理是:对一元方程f(x)=0,先取两个粗略解x1、x2,若f(x1)·f(x2)<0,则原方程在区间(x1,x2)中至少有一个根;若f(x)在(x1,x2)内严格单调,则在该区间中仅有一个实根。取x3=0.5(x1+x2),并在x1与x2中舍弃函数值与f(x3)同号者,则x3与剩下的粗略解组成一个新的含根小区间。如此重复便可以构造出一个序列:x1,x2,…,xn-1,xn。当xn与xn-1之差小于给定误差,如10-6时,xn便是所求的近似解,如图2(a)所示。
图2 二分迭代与牛顿迭代示意图
牛顿迭代法有更高的收敛速度:设xk是方程f(x)=0 的精确解x*附近的一个猜测解,过点Pk=(xk,f(xk))作f(x)的切线。该切线方程为
其与x轴的交点方程为
解为
式(2)即为牛顿迭代公式。方程(1)经过更少的迭代次数后,也可以求得符合误差要求的近似根,如图2(b)所示。求出氢离子的浓度x后,根据式:pH =-1 ×lgx即可求出该弱酸溶液的pH值。
2.2 定积分计算气体等温膨胀体积功
积分运算在各个学科都有重要的应用。在化学专业的很多实际问题中,被积函数的原函数不是初等函数,或者即使是初等函数但表示形式非常复杂,不能利用Newton-Leibniz 公式求解,只能用数值积分的办法来求积分的近似值。
在计算机程序设计实验教学中,介绍数值积分的梯形法,其基本思想是求。如图3 所示,先将(a,b)区间进行n等分,分别以a =x0<x1<…<xn=b表示各分点,h =(b -a)/n,再用直线段分别连接点(xi,f(xi)),(xi+1,f(xi+1)),i =0,1,…,n -1。
图3 数值积分梯形法示意图
函数y=f(x)在(a,b)之间的定积分,可以用n个高为h的梯形面积之和近似表示:
程序设计实验中介绍一元函数数值积分的梯形法时,一般采用正弦函数、余弦函数和指数函数等。由于专业应用背景并不明确,学生并不清楚这种利用计算机进行的近似计算的用处。对于化学专业的学生,可以在教学中把程序设计里的数值积分梯形法和气体等温膨胀做功联系起来,编制如下的上机实验习题:已知某气体的状态方程为(p+a/V2m)Vm=RT,1 mol该气体由体积V1恒温可逆膨胀到V2,求此过程中气体所做的体积功W。根据
即可利用数值积分梯形法近似求解。
2.3 拉格朗日插值处理实验数据
在化学分析测试中,得到的通常是一组离散的数据(i=1,2,…,n)。由于测试仪器或试剂昂贵,或是样品难以获取,导致只能获得有限个测试数据,造成实验点的空缺和信息量的不足。插值计算是根据已得到的实验数据构造出一个近似的函数关系式来描述这些数据的数学方法,解决实验点空缺的问题。
最简单又充分光滑的函数是多项式,所以常取多项式作为近似函数。拉格朗日(Lagrange)插值法是其中的一种方法,其构造出来的多项式P(x)可表示为
称为拉格朗日多项式,其中L0,L1,…,Ln是多项式的一组基底,称为拉格朗日基底,
次数n较高时,拉格朗日多项式会出现计算不稳定及上下振动现象,没有实用价值。常用的是一元三点拉格朗日插值:以经过三点(xi-1,yi-1),(xi,yi)和(xi+1,yi+1)的二次多项式作为插值函数,
用计算机程序设计去实现一元三点拉格朗日插值的步骤如图4 所示:首先读n个数据,以合适的数据类型存储在内存中;然后对这n个数据以横坐标的值排序;再读入求值点,通过查找寻找一元三点拉格朗日插值所需的3 个数据点,从而得到所求的多项式(5);最后进行多项式求值,获得所需函数值。
图4 一元三点拉格朗日插值流程图
结合大一无机化学实验中的问题,设计上机习题:已通过实验测得某氟化酮液体在不同温度下的密度值如表2 所示,请推算该液体在其他非表中实验测点温度下的密度。
表2 不同温度下某液体的密度测定值
在这道实验题中,学生可以练习程序设计中的排序、二分查找、多项式的计算、数组、链表及文件等多项技能。
训练学生应用计算机学科领域独特的思维方式去解决化学专业问题,是培养学生计算思维能力的重要抓手[11-12]。创设结合化学专业知识的程序设计实验案例,可以让学生体会程序设计在解决专业问题中的作用,领悟学习计算机程序设计的必要性与重要性。学生通过自己动手解决这些专业问题,不仅提高了程序设计技能,也深化了对化学知识的理解。
3 以展现化学应用为目标的教学形式
除了在实验教学内容中融入化学专业知识之外,还组织化学实验室参观、高年级同学分享学习经验、基于化学专业问题的计算机程序设计比赛等多样化的教学活动,充分展现程序设计在化学中的重要应用,提升化学专业学生学习程序设计的热情。
3.1 参观化学实验室
本校的化学学科是双一流A +学科,具有很强的科研实力。带领学生有针对性地参观化学-计算机交叉类实验室,让学生切身体会计算机程序设计在化学专业领域内的重要应用。如我校化学与材料科学学院杨金龙院士课题组和计算机学院安虹教授课题组合作,在“神威·太湖之光”超级计算机首次实现千万核心并行第一性原理计算模拟。这项重大研究成果是2021年5 月,习近平总书记在两院院士大会和中国科协第十次全国代表大会上,提到的近年来我国在战略高技术领域取得的10 项新跨越之一,充分说明了计算机软、硬件在尖端研究领域所起的重要作用[13]。让学生观看计算机模拟的化学反应中人类肉眼所看不见的分子或原子的微观动态过程,能自主进行化学实验的科学家机器人等[14-15],用生动实例展示计算机是推动化学领域研究进步的重要工具。通过这些参观帮助学生开拓眼界,充分认识计算机程序设计对其专业学习的重要性,激发他们内在动力,从而主动学习计算机程序设计这一学科研究中不可缺少的基本技能。
3.2 高年级同学分享经验
开课伊始,邀请本专业高年级同学和新生座谈:分享他们学习本门课程的经历,交流学习时曾遇到的困难,以及如何解决困难等学习经验;通过亲身实例讲述计算思维及计算机程序设计在他们现今的专业学习和研究中所起的重要作用。实践表明,来自同专业高年级同学作为“过来人”的“经验贴”很受大一新生的欢迎,为尚处迷茫状态的新生们起到了导航的作用。他们曾经的“共同经历”让新生们产生了共鸣,他们的“肺腑之言”增强了新生学好程序设计课程的信心。此外,高年级同学的“畅言”对教师优化教学内容、改进教学方式也提供了重要的信息参考。
3.3 基于化学问题的程序设计比赛
传统的计算机程序设计实验目的是对理论课堂教学的各个知识点进行训练,大多是一些验证性质的实验,采取统一化的教学,没有专业区别;实验设计也较为孤立,对各章节知识点的系统性缺乏关注,综合型和创新型实验较少。这种较为单一的练习对学生计算思维能力的训练不够,且很容易使学生失去学习兴趣。为此,将程序设计课程中的若干知识点串联起来,设计融入化学背景的综合性编程题,举办基于化学专业问题的计算机程序设计比赛。如表3 所示的教学流程:首先发布比赛题目,学生可以自由选择教师设置的编程题,也鼓励他们从专业课程中自主选择化学问题;学生自由组成小组,以小组为单位共同完成这些编程题;主讲教师和助教老师作为指导老师,分别指导各个小组;完成以后,以小组为单位进行作品展示,教师与同学同为评委,评价各小组完成的质量。为了提高学生的积极性,比赛结果在课程考核中占一定比例。比赛结束后,师生共同讨论总结,为后续的教学活动改进提供建议。
表3 基于化学专业问题的计算机程序设计比赛
实践表明,基于化学专业问题的计算机程序设计比赛,可以引导学生在学习计算机程序设计课程的同时,主动结合专业知识,充分发挥学生的主体积极性,培养他们的创新精神和团队意识[16]。
4 教学效果
以往化学专业教学班的计算机程序设计实验课程考核结果,和信息、工科类专业教学班相比,通过率和优秀率一直较低,主要原因之一是该专业学生对课程的重要性缺乏正确认识,学习主动性不够。自从实行与专业相结合的程序设计实验教学改革以来,化学专业教学班的课程测评通过率和优秀率都有了明显的上升,达到甚至超过了信息、工科类专业教学班的平均值,学生对课堂教学的满意度也达到了“非常满意”的最高等级。根据近两届学生的反馈,以化学问题解决为导向的实验教学模式让他们对程序设计的重要性有了新的认识,学习的积极性和主动性明显提高,程序设计能力和计算思维能力不断增强,为后续学习中运用计算机解决专业问题打下了基础。
5 结 语
根据化学专业学生的学习需求,在教学过程中紧密联系学生的专业知识背景,从中提取问题并合理引入到计算机程序设计实验教学内容中,创设融入化学背景的程序设计案例,引导学生探讨其算法的设计与实现;挖掘多种教学资源,组织丰富的实验教学活动,让学生深刻感悟计算机程序设计在化学中的重要应用,从而激发化学专业学生对程序设计的学习兴趣,培养他们利用程序设计解决专业实际问题的能力和计算思维能力,克服传统程序设计实验教学模式与学生专业背景相脱节的问题,有效提升了课程的教学效果。