您好, 访客   登录/注册

数学专业的程序设计、数据结构和计算机图形学课程衔接

来源:用户上传      作者:

  摘要:本文以《c++程序设计》、《数据结构与算法》和《计算机图形学》这三门课程为切入点,分析了数学专业的计算机类课程的教学面临的问题和机遇,对于这三门课的教学衔接做了有益的探索。
  关键词:成果导向教育;计算思维;课程衔接;数学专业
  中图分类号:G642.0 文献标志码:A 文章编号:1674-9324(2019)25-0200-02
  一、引言
  当前,国家实施了“一带一路”、“中国制造2025”、“互联网+”等倡议和战略,以新技术、新业态、新模式、新产业为代表的新经济蓬勃发展,这对本科生的培养提出了更高要求。从本科毕业生就业情况来看,数学专业和其他工科专业有着显著的不同。除高校任教和读研深造之外,绝大多数毕业生会进入教育、金融、信息、互联网、人工智能等新经济产业,或者传统经济产业的数据分析以及人工智能部门。用人单位普遍认可数学类毕业生的逻辑思维能力,同时都迫切希望毕业生进一步提高通过编程解决实际问题的能力。这点要求在本质上可以分解为计算思维、编程实践和沟通协作三个部分。可以对应到成果导向教育(Outcome based education,简称OBE)对于本科生毕业能力的12项设定:问题分析、设计/开发解决方案、使用现代工具、个人和团队角色承担、沟通等。为此,我们将根据新经济条件下,社会对于数学类本科毕业生的需求,从课程衔接的角度探讨一下针对数学专业学生的计算机类课程的教学改进方案,以期更好地实现相关教学目标,为数学类学生的升学和就业服务。
  二、存在的问题
  《c++程序设计》、《数据结构与算法》和《计算机图形学》在數学专业作为选修课程授课的时候,由于授课目标、课程体系、学生知识架构和学习方法的差异,其教学还存在以下两个问题。
  1.从学生的基础知识架构和这些课程本身的标准教学内容来看,《c++程序设计》本身知识点多,有一些涉及计算机基本工作原理等,由于不是计算机专业,受到总体课时的限制,缺少相关配套课程知识体系的相互促进。《数据结构与算法》中应用最频繁的c++知识在《c++程序设计》讲解的角度没有充分为数据结构服务[1]。其次,学生在从简单算法和简单数据类型到复杂数学算法和复杂数据结构的过渡上存在认知和实践两方面的不足。这一点在《计算机图形学》的上机实践环节表现得更为明显。图形学是理论和实践的紧密结合[2],往往强调实现的效率,需要借助高级数据结构和精心设计的计算方法。而授课时,学生往往已经遗忘了很多在《c++程序设计》和《数据结构与算法》中学过的知识,导致学生以完成任务的心态,使用低级的数据结构构建简陋低效的算法实现。
  2.从学生的学习习惯和态度来看,数学专业学生习惯的“实战”操作,是在纸上推演,整段代码书写完毕,才开始上机调试。这种反编程实践的操作,只会带来无数的编译错误,增加了学生上机的挫败感,使得他们转而为考试而学习,造成所学知识在考试后部分被遗忘,进而难以应对《数据结构与算法》的学习和《计算机图形学》的上机实践。
  三、教学改革思路和措施
  通过以上的分析可知,数学专业的计算机类课程授课存在两个基本矛盾:(1)计算机类的课程是选修课,不可能占用更多的课时,不能期望学生用学习本专业课程的心态和精力完成此类课程。(2)计算机类课程恰是最能培养计算思维,训练OBE所倡导的本科生能力训练的,对于本科生的就业有着实质性的帮助。为此,我们希望从课程衔接的角度入手,综合协调《c++程序设计》、《数据结构与算法》和《计算机图形学》的教学,精简对于数学专业学生而言不必要和不重要的内容,强调上述课程中会反复遇到的知识点,完成新旧知识之间的双向重构[3]。通过紧密的衔接,降低遗忘曲线和挫折感对于教学效果的不良影响,减少学生负担的同时提升他们的兴趣,以期解决上述矛盾,切实提高数学类学生的计算思维和编程实践能力。针对上述问题,通过近年来的教学实践,我们拟介绍以下三个方面的思路和措施。
  1.在《c++程序设计》教学中引入《数据结构与算法》和《计算机图形学》。我们尝试从数学专业的《c++程序设计》教学存在的问题出发,引入《数据结构与算法》和《计算机图形学》分别解决这些问题。首先,《c++程序设计》的授课相对其他数学课程略显平铺直叙,缺少逻辑思考和推理求证过程,学生往往将其当作文科类课程死记硬背,难以激发学习热情。因此,在授课时,介绍必要的排序算法,简单分析算法的复杂度,让学生了解算法设计和应用适当的数据结构可以大幅度降低算法的复杂度,增加思考和推理的乐趣。其次,与标准c++教材和课程配套的实例一般都是面向计算机专业的,诸如数据库和网站等方面的应用,对于数学专业的学生而言,这基本属于陌生且日后不再会接触的领域,对后续课程没有帮助。为此,可以引入《数据结构与算法》和《计算机图形学》中的问题作为上机作业,在为后续课程服务的同时,增加授课和上机实践的趣味性。如设计一个系列的动态数组实现作业,包括从过程式编程的定长数组实现,面向对象编程的定长数组实现,简单动态数组的实现,经过算法复杂度分析之后的动态数组实现,和对应的模板类实现。从这一系列的相关性极强的逐步改进式的实践,理解为什么要用指针、为什么要封装,为什么要泛型,为什么要用算法和数据结构。在《计算机图形学》方向,可以引入简单的图像处理、样条曲线编辑、三维点云数据的PCA分析和显示等直观可视的案例,增加学生对于编程的实用性的切身感受。
  2.《数据结构与算法》与《c++程序设计》和《计算机图形学》的衔接。在《数据结构与算法》教学方面,首先,采用c++作为实现语言,保证与之前学过的《c++程序设计》的衔接。其次,在授课时强调数据结构知识和《c++程序设计》的对比,从而促进旧知识和新知识之间的双向重构。如《c++程序设计》考虑的是数值型问题,简单算法,单个文件的简单程序;《数据结构与算法》则以非数值问题为主,复杂算法,需要实现多个文件的复杂程序等。此外,在介绍复杂的数据结构和算法的时候,既要深化拓展c++教学中已经简介过的结构和算法,又要不断地回顾其用到的c++的编程思想。如栈、树、全排列等都围绕递归这一角度展开;强调面向对象和泛型编程对于实现复杂数据结构的帮助。最后,加强《计算机图形学》中常用数据结构和算法的授课和上机训练。如深度讲解空间八叉树,适当介绍图形学中的隐式曲面表示、空间距离场插值和经典曲面重建方面的内容。讲解图上的一些算法,如最短路、最小生成树等,可介绍图形学中曲面的测地线、调和场和法向的一致定向问题。在讲解计算几何算法的时候,可以介绍图形学中的曲面消隐和碰撞检测等。
  3.《计算机图形学》与之前学过的课程的衔接。《计算机图形学》涉及多学科交叉,知识点繁多且更新速度极快。其教学既要满足核心内容的稳定性,又要兼顾国际上的最新发展趋势。各所学校,尤其是海外高校的《计算机图形学》的授课内容往往相差极大。为此,在核心经典的约束下,我们考虑从与之前学过的课程衔接的角度精选一些必讲内容和上机问题,如三维图形显示的面向对象实现,基于计算几何和数据结构优化的光照模型实现,各种三维表示和其背后的数据结构等。通过这些内容的介绍,完成之前学过的课程和《计算机图形学》之间知识结构的双向重构。此外,《计算机图形学》已经是计算机应用领域的一个巨大产业,理论与实践结合紧密。其上机实践任务相对复杂,可以以OBE为指导,切分为多个子任务,由多组同学协同完成。强化数学专业学生在提高问题分析、设计/开发解决方案、使用现代工具、个人和团队角色承担、沟通这五方面的能力。
  四、结论
  数学专业的计算机类课程的教学,除了要根据本专业的特色和毕业生就业需求做好内容上的调整、衔接之外,如何能将降低不同授课学习方式和上机实践的挫折感,如何进一步提高学生的兴趣和投入,如何提高教师对于这一类课程知识的通盘掌握,如何建立循序渐进的上机题目体系和易于配套的上级环境,如何展开能促进学生积极性的高效的考核考查方式,如何更加顺畅地完成计算思维的培养和OBE导向也都是亟待配套解决的问题。值得我们在今后的教学实践中不断地探索。
  参考文献:
  [1]郭艳燕,童向荣,孙雪姣,贺利坚.程序设计基础与数据结构两门课程的教学衔接[J].计算机教育,2014,(10):47-50.
  [2]徐岗,许金兰,陈临强,王毅刚,胡维华.数学建模驱动的“计算机图形学”课堂教学模式改革[J].中国信息技术教育,2016,(06):89-91.
  [3]赵榆琴,杨健,张晓玲,苏鹏.程序设计与数据结构“双向重构”教学衔接法探讨[J].计算机教育,2018,(08):151-155.
转载注明来源:https://www.xzbu.com/9/view-14940368.htm