遥感科学与技术专业的程序设计课程设置与教学改革探讨
2021-11-09王彦芳尚国琲谢宝妮
王彦芳,尚国琲,谢宝妮
(河北地质大学 土地科学与空间规划学院,河北 石家庄 050031)
1 引言
遥感科学与技术专业是2011年教育部正式新增的测绘类本科专业,是在测绘科学、空间科学、电子科学、地球科学、信息科学以及其学科交叉互融的基础上发展起来的一门新兴交叉学科[1~3]。该专业是顺应新一轮科技和产业变革,满足国家对地观测技术发展对人才的需求而成立的符合国家新工科发展战略的测绘类新专业,在现代国防和国民经济建设中有着广泛应用。遥感利用非接触传感器来提取客观世界中各种目标对象的几何与物理特征信息。该专业培养掌握现代计算机技术并具有较强分析和处理地球空间信息能力的专业。毕业生能够在国家基础测绘、工程测量、资源环境调查与管理、地理信息服务等领域,胜任测绘遥感工程项目设计、遥感数据采集与分析处理、遥感新技术开发与应用等工作,能够从事遥感工程项目设计、实施、组织和管理等专门技术工作。
掌握计算机操作和信息管理的基本知识,具有程序设计和开发能力、掌握软件体系架构、软件设计和开发技能该专业重要技能之一,也是实现专业目标的关键支撑。对遥感专业的学生来说,程序设计是一门必备的技能[4]。因此,掌握计算机科学尤其是程序设计相关技能对该专业的学生来说非常重要。非计算机专业的程序设计教学改革研究很多,但针对遥感专业程序设计课程改进方面的论文较少[5]。本文在分析十余所开设遥感科学与技术专业高校的程序设计相关课程的基础上,结合课程设置和学生能力培养,剖析存在问题,在此基础上提出相关建议。
2 遥感科学与技术专业程序设计课程开设概况
2.1 主要程序设计课程
遥感科学与技术专业的毕业生要求学生能够应用数学、自然科学和工程科学的基本原理,并通过文献检索、资料查询及运用现代信息技术获取相关信息,识别、表达、分析复杂的遥感技术问题,以获得有效结论。为达到这个目标,学生必须掌握相应的计算机系统和软件开发等计算机科学与技术基本理论和主要技能。但不同的高校对于学生开发能力的要求不同,因此,在课程设置上存在一定的差异。表1为不同高校的遥感科学与技术专业所设置的几类程序设计相关课程。大致可以分为如下几个阶段:计算思维导论—计算机基础语言(面向对象程序设计)—数据结构—遥感图像程序设计。此外,其他部分相关课程如空间数据库、计算机图形学、软件工程、GIS系统开发、Matlab应用、R语言等也作为部分高校的选修课程。
表1 遥感科学与技术专业几类程序设计相关课程
综合以上高校遥感科学与技术专业的程序设计系列课程可以看出,不同高校在考虑学生的具体情况分别制定了差异化的导入课程,例如部分高校充分考虑了大一新生薄弱的计算机程序设计基础,学生在中学时期主要以基础学科知识学习为主,虽然涉及到计算机的相关课程,但是大部分学校并没有涉及程序设计。因此,在大一阶段开设计算思维课程,引导学生理解运用计算机科学的基础概念进行问题求解、系统设计、以及人类行为理解等思维和活动,培养计算思维。在具备计算思维的基础上,进行以C(VB、C#、C++)等语言为例的编程实践,计算思维课程有独立课程或者是与编程实践(C)进行合并。在语言选择上,大多数高校选择功能强大、难易程度适中且易于移植的C语言,也有高校选择面向对象的程序设计语言。在掌握一门基础语言之后,为了强化对算法的理解,提高程序设计能力,下一阶段的课程是数据结构与算法或者数据结构与数据库。数据结构与算法有助于后续掌握算法设计的思路,遥感图像处理、遥感参数反演、遥感应用往往涉及各种类型的算法,因此,该课程有助于学生更好地理解算法思想和提高算法设计能力。
在系统掌握遥感科学与技术的专业基本技能和程序设计的基本技能的基础上,需要培养学生综合考虑经济、环境、法律、安全、健康、伦理等因素,对遥感领域的复杂工程问题能给出合理的解决方案与流程。例如能够合理地管理遥感实验数据,设计有效算法、数据处理模块,并能够就设计的算法和软件模块进行评价优化。能够依据专业知识分析遥感领域的工程问题及影响因素,并设计满足需求的全周期、全流程解决方案。因此,需要开设遥感图像处理程序设计、测绘遥感程序设计、或者相关的GIS工程设计与开发,针对遥感工程应用领域复杂工程问题,设计/开发满足特定需求的解决方案,并在此基础上,能够实现一定程度的创新。
最后根据学生的兴趣所在,提供丰富的程序设计选修课程,在语言方法涉及Python、R、JAVA、Matlab、IDL等,与遥感相关的程序设计课程如空间数据挖掘算法与实现、GIS二次开发。学生可以根据自己的兴趣和未来职业规划进行选修,例如有升学研究计划的同学可以选修Matlab、IDL、R等科学计算研究性较强的语言,而打算从事开发工作的学生可以选择JAVA、GIS二次开发等课程。
2.2 课程特点与学生能力培养
合格的编程人员要具备的四个基本能力,即计算机思维能力、算法和设计能力、程序设计和实现能力、计算机系统能力[6]。虽然不是所有的同学未来都会成为编程人员,但随着时代的发展未来无论从事什么相关工作,都或多或少需要这些能力,通过感受程序设计逻辑,培养学生不仅运用编程解决问题的能力,同时形成探索问题的科学精神。
遥感科学与技术专业的程序设计相关课程对学生能力的培养如表2所示,以计算思维为基础的课程主要培养新生计算思维,大学一年级是学生树立正确学习态度和培养计算思维的重要时期,要引导学生从学习中获得乐趣,养成热爱学习的好习惯尤其重要。C语言等程序设计基础语言的学习不仅仅是掌握一门程序设计语言,更重要的是在实践中逐步掌握程序设计的思想和方法,并培养问题求解和语言的应用能力[7]和与专业应用相关的应用[8]。通过学习数据结构,拓宽学生的思维模式,提高他们的逻辑分析能力和理解能力,引领学生深度思考,也是提升编程最重要的基本功[9]。遥感图像程序设计是程序设计基础与遥感专业相关知识的碰撞和结合,提高学生的遥感及相关学科相关的技术改造与创新和组织管理能力。最后,各高校提供的各种选修课程,具有一定的综合性、理论性、技术性和实用性,学生可以根据自己的兴趣自由选择,也是对学生专业知识和计算机编程能力的综合运用和体现。
表2 程序设计相关课程的特点与能力培养
3 课程实施中存在的主要问题
各所高校在相关程序设计的课程设置上总体是从基础性-进阶性-专业性-扩展性的逐步过渡,学生的编程思维和能力也得到逐渐加强和锻炼。但在具体的实践中,会存在以下问题。
3.1 学生对程序设计的学习兴趣和动力普遍不足
在教学实践的过程中发现,学生普遍反映程序设计课程的概念和知识点多,跨度大,课程内容抽象,系统性差等特点,课程风格与其他课程差别很大,不容易理解。一方面,由于程序设计课程难度大,处理专业问题的特殊性和复杂性,导致实际应用的效果并不理想,学生对程序设计课程普遍缺乏动力。尤其是受入学基础差、缺乏兴趣,很多同学对程序涉及有抵触情绪,甚至在还没有开始学习之前,就感觉程序设计很难,自己学不会。另一方面,学生未认识到专业课程与与程序设计之间的密切关系,从而导致学习兴趣和动力不足,对自己的程序设计要求降低,例如在学习C语言时,认为C语言的用处不大,只是应付考试,对语言缺少兴趣。
3.2 学生对多门相关课程的关系不明确
学生往往搞不清学习程序设计的用途,且不同阶段所学知识不能建立有效连接,形成体系。例如学生学习C语言之后,大多数学生处于似懂非懂阶段,感觉会用,但是不知该怎么用。紧接着学习一门更加抽象的数据结构,且涉及到伪代码,学生难以理解伪码和C语言之间的区别,而且不同的数据结构书目采用的语言包括C、C++、JAVA语言等,这些复杂的关系给学生的理解造成很大困扰。同时,学生感觉这两门课和遥感科学与技术专业似乎并没有直接的联系,导致学习的积极性较低。在后续的学习中,学生仍会接触程序设计课程,包括如IDL、Matlab、Python等语言,如果学生无法把握课程之间的关系,直接影响学生的学习效果。
3.3 常规教学方式不能达到预期教学效果
具有多年的程序设计教学经验的老师,容易惯性地认为所讲授的知识比较容易,难以理解学生差异化的个性感受,未能因材施教,因而教学效果不如意[4]。在教学方法上,传统以教师讲授为主的教学方式,抑制了学生主观能动性的发挥,尤其是缺乏系统思维和综合练习的锻炼机会,导致学生对指导书过度依赖,提高创新能力无从谈起。而编程是需要不断地实践,通过练习把海量的知识转化为技能,培养编程思维。从学生角度看,缺乏有效的锻炼机会,因此对知识的运用不够,实践能力得不到强化。同时,在教学管理方面,程序课程通常在机房上课,如果不能加大对课程的管理,上机课程学生自控能力查,没有监督学生容易走神,甚至去做一些与该课程无关的事,导致达不到教学效果。
4 相关教学改革建议
4.1 强化程序设计课程在专业中的作用
在新生导论课程或者相关的专业介绍课程中,向学生强调程序设计的重要性,在学习C语言、C#等程序设计基础课程时,就强调让学生认识到程序设计在专业学习中的重要性,从大一起开始对程序设计建立起兴趣。学习编程还能锻炼思维,使我们的逻辑思维更加严密,并强调学会编写程序会给工作带来哪些方便,在遥感批处理中的作用。但同时告知学生程序设计只是一个工具,并不是遥感专业的终极目标,老师应该进行引导,让学生体会程序设计所带来的优势,并在对专业兴趣的驱动下,由兴趣带动程序设计语言学习,行成良性循环。
4.2 构建程序设计课程群体系
各高校根据各自的人才培养目标构建起适合本校学生的程序设计课程群体系。首先要让学生了解不同时期所开设的程序设计课程在设置上的考虑,理解不同课程之间的递进深入关系,明确每门课程在程序设计能力培养中的位置和作用。其次,让学生明白语言学习主要是为了掌握编程思维,虽然不同的高校开设了不同的语言课程,但并不是每个学生都需要熟练掌握C、C++、C#、Python、Matlab、IDL等不同类型语言,根据自己的习惯和优势选择一个自己喜欢的语言和方式深入和进阶型学习就可以。关键是学一种思想,有了思想,是可以触类旁通,无论是初级阶段的基础程序语言还是在专业中的应用。
4.3 探索更加有效的新方式组织教学活动
注重产学合作,科教融合,在课程设计中,适当增加综合实验和探索性研究,让学生充分体会到程序设计的作用,能够到综合实验和研究探索中获得成就感,从而促进学生兴趣的培养。例如可以采用项目教学法提升实用性,依据项目的内容进行教学内容的设计,并在教学过程中实施应用[10~12],教法上采用反转课堂、教学-科研融合、故事教学等方式[13,14],培养学生解决问题的能力。加强学生与学生、学生与老师之间的交流,由于各人的思维方式不同、角度各异,教学中通过分组,让大家进行合作,让学生通过交流可不断吸收别人的长处,丰富编程实践,帮助自己提高水平。同时,加强教学管理,关注不同类别的学生,不要让部分学生因为暂时遇到的挫败而对程序设计失去信心。最后,可以采用校企合作模式,让学生的能力最终落地并得到强化[15]。
5 结语
程序设计能力是遥感科学与技术专业的关键技能之一,通过调查研究发现,目前各高校遥感专业的程序设计课程通常涉及多门课程,大体分为计算思维-语言基础-专业程序设计-选修拓展等过程,逐渐培养学生计算思维逻辑能力和专业问题解决能力。但针对目前相关课程实施效果并不理想的问题,以后要在课程与专业的关系、课程和课程之间的关系,以及改革程序设计系列课程的教学方法等基础上,提升遥感科学与技术专业学生的整体程序设计能力,能在应用开发与科学研究上不断提升,以达到提高教学质量、培养工程应用型人才的目标。