R 绘图引导模式促进草业科学专业编程教学的探索与实践
2021-04-20刘文献
刘文献
(兰州大学草地农业生态系统国家重点实验室 / 甘肃省西部草业技术创新中心 /兰州大学农业农村部草牧业创新重点实验室 / 兰州大学草地农业教育部工程研究中心 /兰州大学草地农业科技学院,甘肃 兰州 730020)
21 世纪是生命科学的世纪。随着生物科学的迅猛发展,不断涌现的新技术直接影响着高等院校生物科学相关本科生和研究生教学的方向和内容。近二十年来,随着各种高通量测序技术的不断发展,测序技术正在向高精度、长读长、低成本、便携式发展[1]。据美国国家人类基因组研究所(National Human Genome Research Institute, NHGRI)统 计,1 MbDNA测序和人类基因组测序成本已经由2001 年的5 292和9 500 USD 降至2019 年的0.014 和1 301 USD[2]。测序技术的不断改进及成本的持续降低直接推动了高通量测序技术在包括动物学、植物学、医药健康、微生物学、生态环境等生物学类学科的广泛应用,并随之产生海量的测序数据[3]。因此,也相应地要求相关专业学生具备一定的编程能力来完成对海量数据的提取、分析以及可视化展示。
目前,我国高校草业科学等非计算机专业学生编程教育及编程能力现状令人堪忧,无论是对编程的认知还是具体的编程能力都较之计算机专业学生显著较差[4]。究其原因,除了各高校重视程度不够外,非计算机专业学生面对编程学习时普遍存在着基础差、畏惧心理强等问题,直接影响了编程课程的教授和学生学习效果。如何帮助学生克服畏惧心里,引导学生快速构建编程知识体系是目前我国草业科学专业学生信息学课程改革面临的主要问题之一。
目前,被广泛应用于大数据分析的编程语言主要包括Perl、R 和Python 语言等。其中,相比其他语言,R 语言具有开源免费,统计模块极其丰富和强大等特点,受到广大科研工作者的追捧和喜爱,应用也越来越广泛[5]。另外,R 语言的一个独特之处是具有非常强大的数据可视化能力,可在极少编程脚本的情况下绘制出精美、多样的可发表级图形[6]。因此,在教授、培养和提高非计算机专业学生编程能力方面具有独特的优势。俗话说:“一图胜千言”。相较之文字和理论的单调、无聊以及晦涩难懂,精美的图形具有更强的视觉冲击力,更能吸引学生的注意。因此,对于草业科学专业学生编程能力的培养,在传承传统编程类教学模式的基础上,引入R 语言绘图作为学生编程能力教育的入门课,对于培养和提高学生编程能力将具有积极的推动作用。
1 草业科学专业学生编程学习存在的主要问题
1.1 基础差和入门难是阻碍草业科学专业学生编程语言学习的主要问题
截至目前,国内高校对生物学类专业编程课程的开设及学生系统编程能力的培养仍普遍不足。笔者通过利用问卷星(https://www.wjx.cn/)在线问卷调查方式,对兰州大学草地农业科技学院2016 级-2019 级四个年级3 个专业(草业科学、草业基地班及农林经济管理)的本科生进行了有关编程语言掌握和学习基础的摸底问卷调查。调查实际回收问卷共241 份,参与调查问卷男女比例分别为47.3% (114)和52.7% (127)。调查结果显示(图1),高达54.36%(131)和42.74% (103)的学生分别对编程一点不了解或者一般了解,只有2.9% (7)的学生对编程非常了解。在对编程技能的认可程度上,分别有56.02%(135)和39.83% (96)的学生认为掌握一门编程语言对自己的学习和发展非常重要或一般重要,只有4.15% (10)的学生认为不重要。相对应的,有55.19%(133)和41.08% (99)的学生非常愿意或愿意花费一定精力来学习一门编程语言。对于学习一门编程语言最大困难的认识:47.3% (114)的学生认为自身基础太差,37.76% (91)的学生感觉入门太难,14.94%(36)的学生认为相应的学习环境和氛围不利于自身编程学习。综合以上调查结果,总体上兰州大学草地农业科技学院学生对编程语言的了解和掌握程度不尽如人意,但普遍上学生都认识到了编程语言的重要性,并具有极强的意愿去学习和精通一门编程语言。针对学生普遍认为的基础差和入门太难是阻碍自己学习编程语言的主要拦路虎的特点,在具体的授课内容和形式上如何克服这两大问题则是编程课程改革需要着重考虑的问题。
图1 兰州大学草地农业科技学院本科生编程调查问卷Figure 1 The questionnaire of programming for undergraduate of College of Pastoral Agriculture Science and Technology, Lanzhou University
1.2 传统编程教学方法有待改进
编程语言的学习需要充分调动学生的抽象思维、逻辑思维以及空间思维,要求学生能够学以致用,坚持不懈,才能较好地掌握一门编程语言。传统的编程授课常常与数理统计相关联,要求学生需要有较强的数理统计基础,因此对学生编程学习的入门要求较高。如果学生数理统计基础较差的话,整个编程学习的过程则会显得异常艰难,从而不能达到最终的教学效果。笔者通过多年的教学、研究发现,通过引导学生利用R 语言命令行编程,不但轻松快速,而且可实现精美科研绘图的绘制。这样既能提高学生学习编程的自信心,也可以极大地激发学生编程学习的兴趣。因此,相辅于传统编程教学的途径和方法,对草业科学专业学生采用以R 语言绘图作为引导课程,对于辅助学生编程学习快速入门和编程能力的提高都具有积极的推动作用。
2 R 语言绘图引导教学模式设计
2.1 教学内容
2.1.1 R 语言、Rstudio 软件及ggplot 2 绘图包概述
介绍R 语言、Rstudio 软件及ggplot 2 包的起源、发展历程、应用现状以及主要优势和特点[7],使学生在了解R 语言本质特征的基础上激发学生在Rstudio环境下利用ggplot 2 包学习科研绘图和R 语言编程的兴趣。
2.1.2 R 语言绘图基本操作及原理
讲解R 语言和Rstudio 软件的下载、安装及升级方法。介绍R 语言常用CSV(逗号分隔文本)数据格式及数据导入方法。示范讲解常用R 语言包的安装、卸载、升级、帮助文件查看的方式及常见问题的解决方法。着重讲解ggplot 2 绘图基本要素、绘图语法以及关键、常用的绘图函数。
2.1.3 阶段性教学内容
根据编程语言学习的规律,在教学内容设计方面遵循由易到难、由点到面、循序渐进的原则,根据不同授课阶段设定相对应的教学绘图内容。教学过程总体分为基础阶段、提升阶段和补充阶段3 个阶段。紧密结合本专业学科特点选择每个阶段的绘图类型,尽量选择广泛应用于本学科研究中的图形,从而有利于学生学以致用,提高学习效率和学习兴趣。
基础阶段:在学生了解掌握了R 语言基础及数据格式特征的基础上,教授学生利用ggplot 2 包通过命令行绘制较为简单常用的图形,包括柱状图、线状图及散点图等(图2)。通过该阶段的绘图学习,使学生基本掌握ggplot 2 包绘图的基本语法及规律,感受利用R 语言编程途径绘制图形的优势,克服畏惧心理,建立学习自信心。
提升阶段:在基础阶段学习的基础上,进一步教授学生ggplot 2 包绘图的图层叠加语法体系。通过添加不同命令行的方法,在基础绘图的基础上绘制较为复杂的图形,包括误差图、饼图、回归分析图、分面图(图3)及多图合并(图4)等。通过提升阶段的学习,使学生能够通过自由编排绘图脚本达到绘制不同要求的复杂图形,做到融会贯通,举一反三。
补充阶段:此阶段学生已经掌握利用R 语言编程绘制不同图形的基本原理和方法,在此基础上,通过教授学生如何修改不同参数来完善和提升作图效果,包括修改坐标轴、图例、主题、背景、颜色、形状、注释及图片输出等,最后绘制出可发表级别的图形,并最终熟练掌握R 语言编程要领,为后续深入学习R 语言及其他语言编程打下理论和思维体系基础。
2.2 授课方式
图2 教学基础阶段不同绘图教学内容Figure 2 The teaching contents at the basic stage
图3 教学提升阶段不同绘图教学内容Figure 3 The teaching contents at the improving stage
图4 教学提升阶段多图合并教学内容Figure 4 The teaching content of multiple graphs merger at the improving stage
授课过程主要包括课堂讲解、学生上机实习以及课后辅导3 个主要部分。随着个人笔记本电脑的普及,课堂讲解和学生上机实习可以有机整合在一起,达到老师讲解和学生操作的同时完成,以提高教学效果。课堂讲解过程,应着重讲解不同命令行的具体含义及作用,要求学生在听课过程的同时敲入绘图脚本,并实时观察不同命令行的具体绘图结果,加深学习印象。课后通过构建雨课堂、微信班级群等网络工具对学生进行辅导。对学生提出的问题可通过文字、语音以及录制操作视频等方式进行及时反馈,精心呵护学生的求知欲和学习兴趣。根据教学进度和学生掌握R 语言编程知识的程度,有选择性推荐优秀的中英文R 语言编程社区和网站,引导学生自主学习,主动拓宽知识面,加强编程思维和能力。
2.3 考核内容及形式
鉴于编程语言实践性强的特点,为鼓励和加强学生平时对课程知识点的训练和复习,课程最终成绩应更注重平时成绩,采取平时和期末考试成绩为4 : 1 的比例进行计算。期末考试主要包括基础理论知识和实际编程能力考核。平时成绩除反转课堂(flipped classroom)[8]学生表现外,还应通过多次课后作业,要求学生根据任课老师提供的原始数据进行不同类型图形的绘制。平时考核根据学生不同水平,提供不同的练习内容,既要避免作业内容过于简单,使得程度高的学生觉得无趣,浪费时间;又要避免内容过于复杂,打击程度差学生的学习积极性。为了有效防止学生之间提交作业的抄袭,真正掌握学生学习效果,在提交书面作业的同时要求学生提交自己作图过程的视频,要求学生对每个步骤的具体含义和作用进行讲解,从而实时了解不同学生对课程知识点的掌握程度,进而可以有计划的对不同学习程度的学生进行区别化辅导。
3 教学中存在的问题及解决方案
3.1 学生基础差,具有畏惧心理,难以入门
“千里之行,始于足下。”熟练掌握一门编程语言是一个长期坚持不懈学习的过程,而是否能够很好地入门则决定着学生后续的学习效果。草业科学专业学生编程学习的显著特点就是编程基础差,对编程保有一种神秘感,导致其在学习过程中具有显著的畏惧心理,更容易因为入门难等问题而中途放弃。针对这类问题,在课程伊始即对R 语言的发展历程进行详细介绍,使学生对R 语言的内在特点及编程规律具有充分的了解和认识。为了达到快速克服学生畏惧心理及降低入门的难度,在R 语言科研绘图的众多内容中选择ggplot 2包在绘图中的应用及编程方法进行集中教授,避免过多课程内容对学生学习产生干扰,影响学生学习效果和学习动力。在绘图演示过程,利用R 语言命令行绘图脚本中可以在“#”后面直接添加文本注释的特性,通过对关键命令行内容进行注释并详细讲解,同时对照命令行出图结果,直观地让学生理解每行命令的功能,从而快速构建R 语言命令行绘图思想体系,提高学生学习效果(图5)。与此同时,根据不同的教学进度给学生推介不同类型优秀的国内外R 语言学习网站和交流社区,例如“Plotting in R for Biologists”(http://omgenomics.com/plotting-in-r-for-biologists/),“R 语 言 中 文 社 区”(https://blog.csdn.net/kmd8d5r),“R-bloggers”(https://www.r-bloggers.com/)等,通 过引导学生接触优质学习资源来拓展知识面,逐渐从被动教授变为主动学习,达到快速入门学习的效果。
3.2 提高学生学习积极性和主观能动性
在R 语言绘图中,对绘图数据的理解程度直接影响着学生编程的思维和作图结果的优劣。为了提高授课效果,对授课过程中每类绘图原始数据都不能直接沿用出版物或网上资料的数据,而应针对本专业学科的特点设计学生比较熟悉的数据,以便于学生理解和应用。例如,针对微观研究方向,可以利用不同基因在不同处理下的基因表达量作为原始数据;对于宏观研究方向,可以利用某野外实验站不同年份降水量、积温以及作物生物量数据等用以不同图形的绘制。
为了提高学生学习的兴趣,根据学生参与科研实践内容自由分组,利用反转课堂的形式,要求学生利用自己所学的R 语言编程绘图知识对自己参与的课题,例如国创、校创或跟随本科生导师开展的课题所获得的数据进行作图,并上台进行讲解演示,同时要求其他学生进行点评。通过该形式,不仅可以让学生进一步巩固和灵活运用所学知识,获得更多的满足感,而且可以让学生真正做到学以致用,提高科研能力。
另外,授课过程不拘泥于传统的教师讲授,学生听讲的形式。通过不定期的学生作业展示评比、作图脚本挑毛病小游戏以及作图擂台比赛等形式,以学生为主导,充分调动学生学习的积极性和参与性,在有趣活跃的互动气氛中,巩固学生已学知识,加深印象,拓宽编程视野,提高学生自主学习的能力和动力。
图5 脚本注释(图左绿色文字)和实时结果观测(图右)辅助编程学习法Figure 5 The assisted programming learning method with script annotation (the green scripts in left graph)and real-time drawing result observation (graph in right)
4 结束语
经过多年实践证明,通过基于R 语言绘图引导的教学模式不仅能够有效帮助草业科学专业学生克服对编程学习的畏惧心理,同时也能够激发学生编程学习的兴趣和热情,达到了快速入门编程学习的目的,起到了良好的教学效果。近年来,通过本模式学习的本科生和研究生已经基本能够轻松利用R 语言编程完成其科研工作中的绘图工作并发表了英文文章[9],部分学生也因此获得了良好的编程能力,最终被保送北京大学、中国科学院等高等院校继续进行生物信息学相关专业的深造。在此基础上,今后将继续总结新的教学经验,不断调整、优化教学设计和内容,进一步深化编程教学改革,从而更有效地培养具有较强编程能力和实践能力的复合型草业科学专业人才。