苏婧 莫欣岳 李欢
摘 要:计算机程序设计作为高校大气科学专业的重要基础课程,旨在培养学生应用计算机语言编程并解决大气科学领域实际问题的能力。在信息技术高速发展的今天,如何开展合理的课堂教学和有效的实践训练,以满足新时期国家和社会对大气人才培养的要求,是高校课程改革的主要目的。该文基于作者十几年教学实践的经验与思考,从编程语言和教材的选择、课堂教学方式、实践训练环节等方面,对目前大气科学专业程序设计课程教学中存在的问题进行探讨和总结,并提出具体的教学改革思路和方法,以期为完善课程体系建设、提高教学质量提供借鉴。
关键詞:大气科学;Fortran语言;程序设计;教学改革;实践训练
中图分类号:G642 文献标志码:A 文章编号:2096-000X(2023)30-0122-04
Abstract: As a fundamental course of Atmospheric Sciences, Computer Programming aims to cultivate students' ability to apply computer language to program and solve practical problems in Atmospheric Sciences. With the rapid development of information technology, how to conduct reasonable classroom teaching and effective practical training to meet the requirements from the state and society for the cultivation of talents in Atmospheric Sciences in new era is the main purpose of curriculum reform in university. Based on the experience and thinking of teaching practice for more than ten years, the problems existing in the teaching of the programming course of Atmospheric Sciences are discussed and summarized from the aspects of the selection of programming language and teaching materials, classroom teaching methods and practical training in this paper. To overcome these problems, some specific ideas and methods of curriculum reform are proposed, expecting to provide reference for improving the curriculum system construction and teaching quality.
Keywords: Atmospheric Sciences; Fortran language; programming; teaching reform; practical training
第三次科技革命是人类文明史上继蒸汽技术革命和电力技术革命之后科技领域里的又一次重大飞跃。计算机技术的发展作为第三次科技革命的产物,有效推动了社会信息化时代的进步,并且其应用已经深入到社会的各个领域。大气科学的发展始终与计算机技术的进步密不可分,历史上正是大型计算机的出现,提供了海量数据处理和计算的能力,才使得数值天气模式进行短期天气预报和气候模式开展长期气候变化预测成为可能。20世纪上半叶数值预报理论已建立,但由于人工计算能力的限制,无法利用微分方程的数值化解法实现气象参数的预报,气象学者们认识到计算速度已经成为了制约数值预报发展的最大“瓶颈”。直到二战后期美国气象学家查尼(J G. Charney)和计算机之父冯·诺依曼(Von Neumann)合作,于1950年在世界第一台计算机上首次成功实现了气象高度场的24小时预报,之后随着数值预报业务与资料同化方法的进步,数值预报对计算速度的需求也与日俱增,气象预报部门也成为世界上最先进计算设备首先应用的领域之一。可以这样说,没有计算机科学与技术的进步,就没有大气科学的发展。
目前,大气科学受益于计算和遥感技术的大力推动,实现了中短期天气预报、长期气候预报与全球监测,已经发展到了一个全新的阶段。利用计算机进行程序设计从而解决大气科学中的各种问题,成为从事大气科学相关科研和业务的必备能力[1]。因此,在大气科学专业的本科教学中,计算机程序设计一直是一门重要的必修专业课程。如何通过这门课程的学习,让学生掌握一门高级程序设计语言,了解大气学科中常用的数值算法,使学生具有利用程序设计解决学科中一般问题的能力,满足新时期国家和社会对大气人才培养的需求,是教师在这门课程教授时必须思考的问题[2]。因此,选择适合的程序设计语言和教材,进行合理的课堂教学,开展有效的实践训练,是程序设计课程教学的3个重要方面。本文将结合作者对程序设计课程十几年的教学实践经验与感悟,从上述3个方面对本课程的教学和改革进行探讨。
一 精选语言教材,扎实做好课前准备
(一) 确定适合的编程语言
程序设计语言即计算机语言,是人类对计算机发出的指令,也是人类与计算机进行沟通和交流的工具[3]。计算机语言分为机器语言、汇编语言和高级语言,其中前两种又可以统称为低级语言,由于使用二进制和机器代码编写,主要用于内核程序的编写,因此面向用户受到限制。高级语言的指令更接近人类语言且通用性大大提高,对用户更加友好,成为各行业主要应用的计算机语言。Fortran、Pascal、C++、Java、MATLAB和Python等都是当前被广泛使用的计算机高级编程语言,并由于各自的特点受到不同领域用户的青睐。Fortran、IDL、Matlab、NCL以及Python在大气、海洋等科学计算领域被广泛应用。其中Fortran作为最早出现的计算机高级语言,由于其强大的数值计算能力,是一门适合科学计算和工程分析的程序设计语言,也一直都是大气科学的科研和业务中最常使用的编程语言,并且经过60年的发展积累了大量模式源程序[4]。目前,包括全球长期气候模式GCM、大气数值预报模式MM5和WRF,以及辐射传输模式LBLRTM和RRTM等一批重要模式都是采用Fortran语言进行编写。因此,在高校大气学科教学中,通常将Fortran语言作为第一门程序设计语言,并在本科生第一或第二学年安排教学。本文将以Fortran语言为例,对大气科学专业程序设计课程的相关教学改革问题进行探讨。
(二) 精选授课教材
Fortran语言开发使用较早,已有很多经典教材用于高校教学。例如谭浩强主编的《FORTRAN语言》,白云编著的《Fortran95程序设计》,彭国伦编写的《Fortran程序设计》等。这些教材各有特点,有的简明扼要适于初学者入门,有的详实全面利于进一步的深究,基本能应对不同的教学需求。但对于大气科学专业的学生来说,这些教材由于缺少与专业领域相关的问题实例,学生往往觉得该课程是计算机专业的课程,与大气科学专业联系不紧密,因此产生抵触心理,在教学过程中难以激发学生的学习兴趣。而由气象出版社出版的南京信息工程大学薛胜军等编著的《Fortran语言程序设计》和兰州大学张健恺等编写的《Fortran语言及应用》2部教材则主要针对大气科学专业[5-6]。教材中不仅包含了选择法和冒泡法排序、斐波那契数列等经典的数学算法,还结合了气象观测数据缺省值的处理、极端天气的判定、数值方程求解以及卫星和再分析数据处理等大气学科中的常见问题,开展实例设计。例如教材中例题通过结合台站常见降水等级划分问题,演示if判断语句的使用;结合数值方程常用求解的牛顿迭代法,演示条件循环语句使用;结合卫星数据的变量赋值,演示三维数组的使用方法。这些例题通过学科中常见的问题举例,向学生展示使用FORTRAN语言解决实际问题的方法,使学生在学习FORTRAN语言时能和专业知识紧密结合,从而激发学生学习兴趣,产生学习源动力。因此,选择合适的教材不仅可以通过该课程的学习让学生掌握程序设计的基本思想和方法,还能培养其使用Fortran语言解决学科中实际问题的能力,为后续统计天气预报、数值方法、数值天气预报等专业课的学习奠定程序设计基础。
二 改革教学方式,合理开展课堂教学
(一) 教学方法的改革创新
高校课堂理论教学通常采用口述结合板书或多媒体进行,虽然这种教学方法对于教师更易于控制教学内容和节奏,在规定课时内呈现较多的信息量,但是会令学生觉得枯燥,不能有效调动学习积极性[7]。特别是对于程序设计这种技能实践类课程,与其专业课程不同,其教学目标不是通过讲授令学生理解知识点从而对整个课程体系进行系统学习,而是要掌握一门实践技能[8]。无论前期对方法要点的讲述多么详尽,最终目的都是要能灵活熟练地应用。美国国家训练实验室的学习金字塔理论中,提出学习分为被动学习和主动学习,其中被动学习包括听讲、阅读、视听和演示,通过这4种方法对知识的吸收比例分别为5%、10%、20%和30%,即如果采用被动学习方法,则对知识的透彻理解非常有限,而如果采取讨论、实践和讲授等主动学习方法,对知识的吸收比例可以上升到50%、70%和90%。由此可见,采用主动学习方法能够有效提高学生对知识的理解和吸收,特别是对于程序设计此类技能型课程。因此,在课堂教学中如果全程仅使用口述结合PPT的教学方法,学生往往会处于被动学习状态,其对知识点的掌握最多不超过30%,就会在课堂上经常出现知识和例题听起来很容易理解,但独立编程时却无从下手、程序报错时不会修改等问题。实践证明,常规的被动教学方法并不完全适用于程序设计这类课程的教学。在今后的课程教学改革中,教师课堂教学在使用口述和PPT进行知识点讲解的同时,还应增加编程实例和常见问题修改的演示环节,允许支持所有学生携带笔记本电脑,在教师演示时学生可以同步在自己的电脑上进行代码编写和错误修改。这样不仅能够帮助学生在课堂上紧跟教师思路,及时掌握课程内容的重点和难点,而且可以有效激发学生的学习热情和动力,与教师同步编程、修改、探讨,从被动学习转化为主动学习,进而更为深刻地理解和领会课堂讲授知识在实际编程中的应用。
(二) 算法学习贯穿教学始终
算法是指解决问题的思路和方法,在编程时可以使用不同的语言结构,但其背后的算法都是一致的,因此编程的核心就是算法,也被称为程序设计的灵魂[9]。多年教学实践中我们发现,很多初学者面对实际的编程任务无从下手,主要并不是由于语法规则和结构有多复杂,而是不知道如何对问题进行分解并通过编程来实现。例如在对数据进行大小排列时,如何将排序问题轉化为循环结构,才是编程的关键。因此,对算法的理解越透彻则编程越容易。但在实际教学中,部分算法对于刚接触编程的本科生来说觉得难以理解,究其原因,主要因其早已熟悉习惯的是数学解析思维,是以自身面对问题的解决思路为出发点的,但在编程中解决问题的主体并不是我们自身,而是计算机,这就需要编程者在思考问题时进行主体转换,以计算机视角思考如何发挥其优势解决问题。以1到100(或更大数据)连加的简单问题为例,如果从自身解题的思路出发,首尾相加进行凑整的高斯法对于大脑计算是最简便快捷的,会是最容易选择的方法,但按此算法编写程序却繁琐复杂;如果以计算机为主体,由于大量重复的计算是其优势可以利用循环结构容易实现,因此,不断重复两数相加的这种对于人们来说不易计算的“笨办法”,却是计算机编程最容易实现的算法。再比如,对于典型的水仙花数问题,数学思维中需要联立方程求解,而对于计算机而言则可以利用计算优势对所有定义内整数进行检验。从以上举例中可以看到,在面对问题设计算法时,编程者需要将解决主体从个人转化为计算机,然而这种转换对于初学者并不容易,需要在实践中不断进行算法构建训练,才能熟练完成这种转换,形成下意识思维。然而教材中通常只在第一或第二章节给出算法的概念并例举一些经典案例,后续章节则主要介绍语法规则、选择和循环结构、数组及文件等方面的知识,不再强调算法。如果仅在一个章节的学习中进行算法讲解,而后续章节则侧重语法知识和结构的讲授,不对例题和算法进行归纳总结,那么学生很难对不同类型问题的算法有深入了解,进行思路转化训练,也就不能设计出合理有效的程序。因此,在课程教学过程中,对算法的学习应该是贯穿整个教学环节的。在教材的不同章节中,除了讲述循环、数组、子程序等内容,也应对例题相关算法进行梳理,令学生在整个课程的学习中,始终在学习和应用算法,牢固掌握典型问题解法,这才是程序设计的核心。
三 夯实编程基础,有效推进实践训练
(一) 重视课后实践
计算机程序设计作为一门技术实践类课程,将课堂理论教学和课后上机实践相结合是其重要特点[10]。上机实践是程序设计课程的必要环节,学生只有在实践中通过独立编写、修改程序,才能真正掌握分析、设计、编程和测试的能力。否则只是学而不练,就会造成“什么都学过,却什么都不会”的尴尬局面。正如学习驾驶一样,教练讲解的交通规则和驾驶规则是必须要掌握的学习基础,可如果只是将这些知识点记牢,不实际驾车进行行驶训练,就不可能学会驾驶,也根本无法体会教练所讲授的技巧。因此,对于技能实践类课程,要以培养学生解决实际问题的能力为主要教学目标,并通过实践环节来实现这一目的,令学生做到学以致用。以笔者所在单位为例,在当前的课程设置体系中,除了36学时的课堂教学之外,同步配套了36学时的上机实践课,目的就是利用上机实践锻炼学生的实际编程能力。
然而在教学实践中发现,学生对上机实践课不重视的现象普遍存在。一部分学生认为课堂讲授才是重点,只要期末考试卷面成绩得到高分就达到了目的,故一开始就对实践课产生了轻视心理;而另一部分学生在初期课堂教学时能理解所学内容,但在实践课独立编写程序时,出现不会构建算法或不会修改程序运行中遇到的语法问题的现象,而一旦无法轻易解决困难就会止步不前,进而产生急躁、畏难情绪,失去信心,逐渐回避实践课的练习。
在教学实践中,我们针对上述2类情况分别采取了一系列改革措施,并取得了较好的效果。对于心理上不重视、持有懈怠情绪的情况,在课程初始阶段就应向学生说明程序设计是一门实践应用型课程,强调配套实践课的重要性及其实际应用意义,并在后续授课中反复强调这一理念,从而令学生先入为主地加强对实践课的重视程度。其次,通过丰富课堂教学方式,鼓励学生在课堂中与教师同步编写程序,让学生切身感受到自己动手编程的重要性。同时,对实践课期末考试方式进行改革,用上机实践考试代替卷面笔试作答方式,让学生随机选择3道题在规定时间内编写程序得到结果,根据运算结果的正确性、完整性及完成时间得到最后分数。除此以外,还增设期末综合实践环节用以锻炼学生解决实际问题的能力,其成绩可按比例计入期末成绩。例如,为学生提供某一气象台站近60年实测的日平均温度数据,要求其进行数据处理,计算月、年平均温度和温度距平等参数,根据参数值画图分析台站近60年极冷、暖年份以及季节、年均温度和距平变化趋势。这种综合实习不仅能让学生熟悉台站观测数据的放置格式和处理方法(比如温度数据需要乘以0.1才是实际温度),在计算过程中学习如何使用数组进行大量数据的处理,使用循环语句计算平均温度和距平;而且还能够促进学生开展自我延伸学习,比如绘图和趋势分析方法。结合这类大气科学中常见的实际问题,开展综合训练,以练代学,能够加强学生对所学知识的复习、应用,有效地锻炼其利用程序设计解决专业问题的能力。通过以上改革方法,切实从学生的思想认识、切身感受和考核机制等方面加强对实践环节的重视程度。对于学生畏缩不前、信心不足的情况,在设置实践课习题时要注意难易结合,甚至可以从例题的模仿编译开始,循序渐进、由易入难。在实践中我们发现,开始哪怕仅是几行语句的程序或是简单的模仿编译,但只要学生愿意动手实践,就能从中感受到程序运行成功的喜悦,进而产生一种积极的正向反馈,对编程产生一种“我可以”“我能行”的自信而不再是畏惧心理,并对后续逐步培养自主编程能力建立了心理优势。同时,教师在实践课上要随时关注并及时帮助学生调试运行程序,特别是在编程初期,学生容易陷入一些初级问题不能及时解决,从而焦躁并丧失信心,如果此时经验丰富的教师能给予及时指导,就会帮助其在这一过程中积累经验和树立信心,今后即使面对更难的问题也能从容应对。但由于班级学生通常在40~50人,仅靠一位授课教师很难顾及所有学生的需求,而本院的研究生往往因科研工作需要而熟练掌握了编程技巧,故可在本科实践课上配备1~2名研究生助教辅助教学。上述方法已成功应用在教学改革实践中,受到学院教师和学生的广泛认可。
(二) 编程实践贯穿学习阶段
目前,程序设计课程一般开设在本科第一或第二学年,学生通过一学期扎实的课堂学习和实践锻炼,在学期结束时普遍具备了独立编程的能力,部分学生甚至可以利用程序设计解决一些复杂问题,教学效果能够达到预期要求。但教师在本科第四学年指导学生完成毕业论文时却发现,一些学生的编程水平不进反退,个别学生甚至对程序设计已经十分陌生。究其原因,主要是因為在程序设计课程的学习结束后,很多学生缺乏后续的实践练习,由此可见,实践技能类课程的学习一定要在不断地练习中积累经验,提升应用能力。因此,在本科高年级开设的数值分析、统计天气预报等专业课的学习中也应重视实践练习,利用编程解决实际问题,不断提高编程能力,使之成为能够灵活使用、融入自身的一门技能。
四 结束语
大气科学与计算机技术的发展密不可分,计算机程序设计已成为大气学科的一门重要专业基础课程。本文结合笔者十几年的本科教学经验,总结了目前大气科学专业程序设计课程教学中存在的一些问题,并提出了相应的解决思路。本文提出要在确定适合的程序设计语言和教材的基础上,将合理的课堂教学和有效的实践训练有机结合,真正实现教学实践一体化,有效推进高校程序设计课程教学实践改革。让学生感受通过编程解决问题的成就感,在学习过程中充分调动学生的主观能动性,增强学生独立自主编程的信心,形成正反馈,在不断的练习中积累经验、总结方法,逐步掌握该项技能,游刃有余地解决专业领域问题,为日后的科研和业务工作奠定坚实基础。
参考文献:
[1] 陈纯毅,杨华民,任斌,等.激光大气湍流传输数值实验建模与计算机模拟[J].系统仿真学报,2018,30(6):2133-2143.
[2] 樊仲欣,朱彬,吕晶晶,等.气象实验教学现代化信息系统的建设与实现[J].实验室研究与探索,2021,40(7):140-143,157.
[3] 左正康,刘志豪,黄箐,等.Apla与程序设计语言泛型特性比较研究[J].江西师范大学学报(自然科学版),2019,43(5):454-461.
[4] 瞿子晶,钟圣俊.WebGIS和SLAB模型的突发性大气污染事故模拟和应用[J].环境科学与技术,2014,37(5):107-111.
[5] 薛胜军,耿焕同.FORTRAN语言程序设计[M].北京:气象出版社,2009.
[6] 张健恺,张珂铨.FORTRAN语言及应用[M].北京:气象出版社,2021.
[7] 何绍明.“互联网+”背景下的高校课堂教学改革路径探究——评《互联网+教育:教与学的变革》[J].中国教育学刊,2022(9):110.
[8] 关成斌,李连,王捷,等.非计算机专业第二程序设计语言“速成”教学探索与实践[J].计算机工程与科学,2019,41(S1):186-189.
[9] 刘雨薇,李茹.线上线下混合式教学在“算法设计与分析”课程中的应用研究[J].教育理论与实践,2021,41(9):62-64.
[10] 宋友.面向大类工科专业的程序设计课程教学改革[J].中国大学教学,2018(11):47-50.
基金项目:兰州大学教育教学改革研究项目“深度机器学习在大气科学中的应用探索”(JYXM-2020-20375);中国高等教育学会2022年度高等教育科学研究规划课题“国际学生网络舆情监测和应对机制研究”(22LH0409);教育部产学合作协同育人项目“校企深度合作推进计算机领域一线教师师资培训”(220902070162538);海南省自然科学基金“数据驱动的空气质量预报深度学习模型的关键技术研究”(623RC457);海南大学科研启动基金项目“基于人工智能和大数据的空气质量预报建模研究”(KYQD(ZR)-22097);海南大学教育教学改革研究项目“新工科背景下基于项目驱动和混合式教学的课程教学改革研究—以《数据仓库与数据挖掘》为例”(hdjy2364)
第一作者简介:苏婧(1983-),女,汉族,甘肃兰州人,博士,副教授,硕士研究生导師。研究方向为大气物理学与大气环境。
*通信作者:莫欣岳(1991-),男,汉族,甘肃兰州人,博士,讲师,硕士研究生导师。研究方向为大气科学、人工智能与大数据。