基于开源软件的地理计算研究生课程教学研究

2024-05-26 05:56杨叶涛
地理空间信息 2024年3期
关键词:编程语言开源代码

杨叶涛

(1. 中国地质大学(武汉) 地球物理与空间信息学院,湖北 武汉 430079)

掌握时空数据分析技能是地球信息科学研究生从事学习与相关研究的基础。近年来,从越来越多的遥感平台、现场仪器、传感网络和其他配备GPS的智能设备中衍生出的空间数据集出现了爆炸式增长。处理这类“大地理数据”需要强有力的软件工具,以实现复杂空间数据的高效处理与分析[1]。在本科学习阶段,处理空间数据的GIS 和遥感课程通常采用Arc-GIS、ENVI 等专业图形用户界面的软件进行教学[2],但这些平台的应用范围有限,无法满足复杂的数据分析需求,难以实现复杂的地理空间工作流程。GRASS、GDAL/OGR、PKTOOLS、CDO、Orfeo Tool-Box 等开源地理软件能快速有效地处理栅格、矢量等多种格式地理数据集,并能通过BASH、Python 等编程语言集成到复杂的工作流中[3]。然而,研究生阶段的学术课程往往不涉及这些开源软件及其相关的编程语言。在没有合适课程的情况下,获得编程技能往往需要长期的独立学习和强烈的个人动力。如果在研究生阶段开设开源软件地理计算相关课程,研究生通过该课程学习获得这种技能,将会对他们的研究工作提供巨大帮助。

1 教学内容设置

1.1 课程设计

为满足地球信息科学研究生对数据处理分析技能的需求,笔者开发并讲授了《GIS 编程》研究生课程。该课程主要讲授Linux 操作系统下的地理计算开源软件编程,包括课堂教学、小组讨论、项目实习、小组报告等环节。课程的教学内容基于OSGeo在线资源提供特定的教程和工具来分析地理数据[4],同时采用多种编程语言与AWK、 BASH、 PYTHON、GRASS、GDAL/OGR、PKTOOLS、Orfeo ToolBox 等开源软件来构建数据处理与分析工具。首先教授如何使用命令行来调用开源软件处理大型数据集的基本编程概念,通过简单脚本,演示如何自动化完成基本的数据处理与分析任务和如何修改简单程序以解决特定问题,同时实现最佳性能和可靠的结果;然后展示如何通过复杂脚本来定义流程复杂的科学分析与数据处理工作流,以及根据需要在开源工具基础上开发新的功能模块;最后根据课程讲授的知识,以特定研究为目标,从数据准备、流程设计、代码编写和结果分析进行开源软件编程实践。尽管第一印象是一门计算机编程课程,但实际上该课程的重点是科学概念的应用,在定制计算机脚本的帮助下,指导学生解决科学研究特定的问题。

《GIS 编程》不是专注于一种编程语言或开源软件,而是介绍多种开源软件和编程语言,并教授研究生如何组合每种开源软件和语言中最有用的功能。课程大多数的工作流程脚本实例都基于强大的开源地理工具,这些开源工具充当手头数据处理任务的模块。对于课程中涉及的每种编程语言或开源软件均按照以下结构进行教学:①程序语言的语法,包括各种关键字和选项的详细信息;②指导阅读编程语言或开源软件的帮助文档和其他可用文档;③解释编程语言中常见的语法问题和解决它们的过程(主要依靠程序调试来讲解);④学习编写能链接不同开源工具的脚本或不同编程语言开发的程序块;⑤处理计算输出,可视化和解释数据,讲解如何根据开源软件和部分编程实现数据结果的可视化,根据编程算法原理解释数据结果如何取得良好的效果;⑥基于开源软件和编程语言评价数据处理结果与验证框架。

1.2 课程内容

课程总课时为32学时,共9周时间,主要是针对研究生开设的课程。课堂课程和上机实验课程相结合,先完成课堂课程,再开始上机课程。

第一周进行课程导读与介绍,在上机实习中安装Linux 系统并建立实习环境;第二、三周讲授命令行语言Bash和脚本语言Python,并在实习中完成语言编写练习;第四周讲授GDAL/OGR开源库,提供了读取矢量数据和栅格数据的API接口,在实习中采用Bash和Python语言通过GDAL/OGR开源库的接口读取、查询、创建空间数据;第五周讲授GRASS 免费开源软件,在实习中学习软件使用和使用脚本语言Python调用GRASS库处理二维、三维空间数据;第六、七周讲授开源遥感影像处理软件Orfeo ToolBox 和开源GIS 处理软件QGIS/PostGIS,在实习中学习软件的使用,并使用Python语言编写插件,加载到软件中,快速便捷地处理空间数据;第八周在课堂上演示项目操作流程、脚本语言编写,回顾课程知识,在实习中引导学生小组项目开发;第九周学生上台进行PPT 项目答辩,演示项目运行,老师评估打分。

2 教学实践中存在的问题

地球信息科学开设研究生开源软件编程课程固然对研究生技能提升有帮助,但其本身也面对诸多现实问题,如研究生在本科阶段学习与训练的差异、学生的编程障碍、学生编程知识缺乏等。这些障碍并不是每个研究生都会面对和解决的,各种各样的因素塑造并影响着每个学生的经历。在课程教学设计中克服这些障碍,才能达到较好效果,使学生能够充分掌握这种技能。

2.1 本科专业背景影响

地球信息科学研究生的本科专业来源广泛,包含地质学、生态环境、遥感和地理信息等相关专业。学生进入研究生学习阶段发现,他们研究需要的数据处理能力和其他计算技能需要提高。尽管大多数相关专业本科生都认同编程和使用专业软件是学生必备的“硬技能”,但这些专业提供给学生的相关能力训练存在跨专业的差距,即便是同一专业在不同学校也存在差距[5]。笔者通过多年调查发现,大多数研究生只能使用ArcGIS、ENVI 软件处理空间数据,这反映了一个持续存在的问题。在接受调查的学生当中,缺乏训练被视为限制他们处理研究产生数据能力最重要的因素。在编程能力训练中,相关院校专业通常要求学生完成一门编程入门课程,学生缺乏应用编程解决实际问题的能力,因而在研究生学习阶段,缺乏将编程技能与研究方向联系起来的能力。虽然研究生的计算机知识因本科专业和研究生导师而异,但他们缺乏研究项目所需的必要的计算机知识和技能是地球信息科学研究生普遍存在的情况。

2.2 编程障碍

面对学习编程的艰巨任务,学生经常会有畏惧心理,认知和教育心理学家对此进行了很好的描述。与笔者交流过的大多数研究生反映,他们把编程作为一种工具来完成与其研究方向相关的任务,而不是专门学习编程,因此在处理数据时,倾向于使用他人编写的代码,而不是尝试自己编写代码,如在Smith 等2014年的一项调查中,有一半的英国学者表示他们不自己编写代码[6]。另外,学生突然接触到专业领域的复杂代码,且未学习过编写的语言,通常会认为编写类似代码是困难的,自己不能写出类似的代码,产生诸如“解决专业问题编程不适合我”“我只是不擅长这方面编程”“编程太难了,我不会”的想法。不幸的是,这种现象会在学生中普遍传播,形成一种风气。同时,作为学生获取编程开发相关信息的主要渠道,博客、论坛等在线文章含有大量的简单专业性代码,学生在学习初期不再自己敲代码,反而直接复制粘贴博客、论坛上的代码,当老师讲授的内容稍微加深一点,博客论坛上又没有与之匹配的代码,学生则写不出代码,产生畏惧写代码的心理障碍。

2.3 编程知识缺乏

在本科学习阶段,学生都是按照老师指定教学计划或指导书进行实践[7],缺乏对各种编程语言优缺点和局限性的了解。同时,面对开源软件,即使完成了复杂的安装和配置[8],想要使用开源软件解决问题必须首先学习编程的基础知识。编程基础知识包括编程语言的语法规则、如何以切实可行的算法解决问题以及如何用编程的方式完成空间数据分析的整个流程。编程基础知识的缺乏,导致学生面临着陡峭的学习曲线,无法通过传统课程的方式获得相关知识与技能,因而导致研究目标的进展缓慢。

3 教学建议

在本科专业背景、编程障碍以及编程知识缺乏的不利条件下,如何激发学生的学习热情、营造良好的学习氛围,对于课程的成功与否至关重要。在线讨论、小组合作以及项目工程导向都是营造这种学习氛围的重要因素。在课程学习中设置QQ 群或在线论坛,鼓励学生在线讨论问题,可以帮助发现更多问题,学生提出的问题可能也是其他学生正面临的问题;同时,学生在讨论中回答其他同学的问题,可以获得成就感,增强学习动力。学生还可以建立不同的学习群或社区,一起交流分享信息,使得在困难的编程学习上不显得孤独无助。任课老师也可以随时监测QQ群或论坛内信息,掌握学生的实际学习状况。

这门课程对老师也有极高的要求,开设相关课程老师必须具备地球信息科学与计算机科学两方面强大的背景知识,同时课程的成功与否与开课老师计算机科学方面的技能密切关联。由于专业限制,老师往往在地球科学方面知识背景强大,但计算机技能相对薄弱,导致授课过程中,老师往往局限特定的软件和单一语言,如老师更多习惯使用ArcGIS软件和其对应的ArcPy 语言进行编程或ENVI 软件和其对应的IDL 语言,而不是将课程讲授的重点放到数据结构、数据模型与算法等计算机编程的相关概念上来。这样就存在明显的问题,软件环境和计算机语言是不断变化的,如果只讲授一门语言和对应的语言工具,学生掌握的技能可能很快被淘汰,因此开设相关课程的老师必须具备地球信息科学与计算机科学双学科背景。

在笔者教学的两年间,经过系统完整的课程教学和上述教学措施,大部分学生都能弥补本科阶段的差异,克服心理上编程障碍,补充完整编程基础知识,还能开发出很好的GIS 项目,如利用Python 开发的GRASS项目——核电站冷却水水温分布和赤道中太平洋大气二氧化碳浓度变化与洋面温度变化的关系、基于QGIS的建筑物提取的Python插件等。

4 结 语

开设《GIS 编程》研究生课程,学习开源地理计算工具和编程语言,可以提高研究生解决地理空间问题的能力,同时通过激发批判性、分析性和创新性思维提出新的研究思路,帮助研究生对处理地理空间问题的可行性进行初步检验。由于时空数据处理的复杂性,开源地理计算工具繁多且不断演化升级,采用开源软件结合编程来解决科学研究问题是一个巨大的挑战,课程内容的设置、教学方式的研究相对于传统课程也是如此,但只有克服这些挑战,开源工具与编程才能真正成为研究生必备的科研技能。

猜你喜欢
编程语言开源代码
压力-体积转换在CFC编程语言中的实现解析
Java编程语言的特点与应用
五毛钱能买多少头牛
创世代码
创世代码
创世代码
创世代码
浅谈不同编程语言对计算机软件开发的影响
大家说:开源、人工智能及创新
开源中国开源世界高峰论坛圆桌会议纵论开源与互联网+创新2.0