测绘地理信息   2017, Vol. 42 Issue (5): 122-126
0
专业背景下Visual C++程序设计课程教学方法研究[PDF全文]
刘亚文1    
1. 武汉大学遥感信息工程学院,湖北 武汉,430079
摘要: 针对目前Visual C++程序设计课程学习与专业应用实践环节脱节的局面,提出了专业应用为向导的Visual C++程序设计课程教学方法。该方法在教学内容上增加与专业应用相关的实例及项目实践,教学形式结合课堂教学和课下学习模式,课堂教学以专业实例剖析和小组项目实践为主,知识点的学习以课下教师课件、在线课程、维基百科等方式完成。实践证明,该方法有效衔接了Visual C++课程理论、实例及专业应用实践,极大提高了学生专业应用实践程序设计能力。
关键词: Visual C++程序设计     专业应用实践     教学方法    
Teaching Method of Visual C++ Programming Course Based on Professional Background
LIU Yawen1    
1. School of Remote Sensing and Information Engineering, Wuhan University, Wuhan 430079, China
Abstract: To solve the disconnection between Visual C++ programming course learning and professional application practice, this paper presents a teaching method of Visual C++ programming course based on major background. With this method, examples of professional application and project practices are added into the teaching content. The teaching mode combines classroom teaching and off-class learning together. Classroom teaching is based on professional example analysis and team project practice. Knowledge points of Visual C++ course are learned through teacher's courseware, online courses, Wikipedia and so on. Experiments verifies that this method effectively connects the Visual C++ course theory with examples and professional application practice, thus greatly develops students' programming ability of professional application practice.
Key words: Visual C++ programming course     professional application practice     teaching method    
1 专业背景下的Visual C++程序设计课程面临的问题

Visual C++作为功能强大的可视化应用程序设计语言, 已成为计算机界公认的优秀应用开发工具[1, 2]。教学实践证明,Visual C++程序设计课程对引领学生进入编程世界,激发学生的编程兴趣,完成从传统思维方式向计算思维方式的转变,培养学生分析问题和解决问题的能力,提高学生的实践动手能力和创新精神等方面起着决定性的作用[3]。因此,我国许多高等院校的工科专业均开设Visual C++程序设计课程。随着计算机信息技术与遥感科学的交叉渗透,对于遥感科学与技术专业而言,Visual C++程序设计课程不仅仅是一门计算机基础课程,同时也是培养遥感科学知识应用实践能力的课程,该课程在遥感科学与技术专业课程中占有重要地位。

由于Visual C++程序设计课程本身难度大(知识点难、概念复杂、规则多),且需要大量实践的特点,因此课程常常面临教师难教、学生难学的局面。目前大多数学校开展的是传统教学模式:以课堂理论教学为主,上机实践教学为辅,最终利用期末测试评定学生的学习效果[4]。显然,这种先理论后实践的“填鸭”式教学模式无法解决当前Visual C++课程面临的问题,为此,许多教师对该门课程的教学方法进行了研究[5, 6]。为了激发学生的主动性和参与度,文献[7]将启发式理念引入到教学环节中,该方法从具体问题出发,通过巧设悬念,激发学生兴趣,引导学生积极思考,让学生在一种成就感的情景下寻求解题方法,从而达到掌握教学内容的目的。文献[8]提出实例驱动教学法,在这种模式中,教师先演示程序执行后的结果,然后以这个为目标,进行实例和知识点的全面渗透讲解。该方法启发学生积极思考,使得学生带着目标,积极、主动地进入到教学过程中。为了加强所学知识与实际应用的联系,文献[9]提出了项目剖析法,以剖析项目结构、并把每个部分实施现场编程为引导的教学模式。该方法将所学的内容与实际项目开发结合起来,目标明确。考虑到教与学的同步,文献[10]提出“一个方向、两个平台、多元融合”的教学方法,强调“以项目整体构建为主导的教学平台”和“以项目模块构建为主导的教学平台”,以研究性教学模式为指导,综合利用多元化的教学方法,进一步提高学生的学习兴趣与教学效果。

上述教学方法均有效推动Visual C++程序设计课程教学效果的改善,但是我们发现,学生在学习Visual C++程序设计课程之后,面对专业应用的程序设计实践环节,仍然感到无从下手、困难重重。这种情况直接影响了学生后续的专业实践课、毕业设计及大学生科研等活动,因此,如何在课程学习过程中培养学生专业应用实践程序设计的能力是专业背景下Visual C++课程面临的关键难题。

2 专业背景下Visual C++程序设计课程教学方法分析

在加强高水平大学建设的新形势下,大学更加注重人才实践能力及创新能力的培养,教学理念转向强调“学生为主、成果为驱”。本文主要从成果导向教育理论OBE(outcomes-based education)和翻转课堂模式(flipped classroom)两个主流教学改革理论分析目前遥感科学与技术专业Visual C++课程面临问题的原因,同时提出可行的教学方法。

William Spady将OBE定义为“在教学体系中,围绕学生经过教学过程应该取得哪些关键成效而开展的相关教学工作”,该教学法强调以学生为中心,注重学生获得的能力与成果[11]。OBE的学习成效评估强调学生能做什么,而不是知道什么, 要求学生具备从解决有固定答案问题的能力拓展到解决开放问题的能力。在OBE教学方法中,目标完成度是学习成效评估常用的衡量指标之一,针对遥感科学与技术专业的Visual C++程序设计课程而言,目标完成度可以细化为以下3个级别。

1) 能够用基本Visual C++语法和编程思想进行程序设计;

2) 满足相关专业课的算法程序设计要求;

3) 能够结合程序设计思想和专业知识实现一定的遥感应用实践。

从学生后期的专业课程序设计表现可知,目前Visual C++程序设计课程目标完成度可以实现第一级。

根据OBE理论,我们由学习成效评估结果反向分析和调整教学过程。第一级目标的达成反映出现阶段的Visual C++程序设计课程注重实践性,教学过程中不断加强了程序设计实验环节,因此学生在完成课程学习之后,能够编写一些简单的算法程序。第二级和第三级目标未达成,反映出课程教学内容设置得不完整,缺少专业算法的实例讲解及与专业应用相关的综合性实践活动。这些教学内容和实践环节的欠缺导致学生在程序设计与专业应用实践结合过程中出现困难。我国工程教育专业论证明确要求,工科学生必须具备综合运用所学科学理论和技术手段分析并解决工程实践问题的基本能力。因此,在Visual C++程序设计课程教学中需要有效衔接理论、实例及专业应用实践。

近年来,翻转课堂[12]理论对中国传统的教学方法产生了极大的影响,它改变了知识传授的单一模式,结合了网络课堂、在线课程等信息化教学模式,在教学活动中,强调教师的引导和学生的主动,将学习知识的过程转化为师生共同发现问题、探讨问题和解决问题的过程。

按照翻转课堂的理论,学生反映出的专业实践程序设计困难的问题说明课程教学过程中知识的内化不够,目前的Visual C++程序设计课程教学重点应由集中知识的传授转向帮助学生知识的内化。因此,对于面向专业的Visual C++程序设计课程,在课堂教学中应该压缩基本知识点的讲授,增加有利学生知识内化的专业应用实践活动,帮助学生实现程序语言描述专业应用的思维转换。在课堂学习模式上采用分小组协作完成实践活动,加强讨论与合作,教师应更多关注学生小组实践过程中碰到的问题,并引导学生解决问题。

在综合分析目前遥感科学与技术专业Visual C++程序设计课程问题产生原因的基础上,课程改革考虑课程学习产出导向和知识内化力加强,本文提出了专业应用为向导的Visual C++程序课程教学方法。该方法首先在教学内容上增加与专业应用相关的实例及项目实践,其次课堂教学以剖析专业实例和分小组项目实践为主,知识点的学习以课堂外课件、在线课程、维基百科等多种方式完成,最终达到学生具备一定程序设计思维解决专业应用问题的能力。

3 专业应用为向导的Visual C++教学方案

本文提出的Visual C++程序设计课程教学方案具体是结合了专业应用实例、项目及实践,在课堂教学过程中通过剖析专业应用实例、项目的实现过程及分组实践,进一步内化理解Visual C++程序设计课程中抽象的概念、编程原理及相关专业应用的程序设计思维。教学方案的学习阶段、内容安排及组织形式见图 1,其中最重要的环节是课堂上专业应用实例、项目的剖析及分组实践。

图 1 教学方案 Figure 1 Teaching Scheme

3.1 Visual C++知识点学习

Visual C++知识点的学习主要以课下观看教师课件、在线课程及查阅维基百科等方式由学生自主完成。在这个阶段,教师要根据教学大纲、教材等准备教学课件、对应习题和推荐相关的在线课程或视频参考。教学课件以知识点划分,如类的概念、继承、多态等,同时每节课件需要配备难易适合的习题,用来检查学生知识点的学习情况。学生以教师的课件为主,兼顾推荐的相关参考资料进行学习,通过完成习题来发现知识学习的难点。

课前知识点的学习阶段是教学方案中非常重要的一个环节,是后续课堂进一步内化学习的前提。学生通过课前学习,应该达到对课程知识点的基本了解,并对难以理解或模棱两可的地方进行标注,作为课堂上需要讨论的问题。教师在课前要对学生提交的习题进行批改,了解学生对知识点掌握的整体情况,确定课堂内化重点。

3.2 专业应用实例、项目剖析与分组实践

专业应用实例、项目的剖析是在真实场景中分析Visual C++的知识点、概念及Visual C++实现专业应用程序设计的过程。这个阶段是建立在课前学习的基础上,以学生已经对Visual C++的知识点有基本了解为前提。专业应用实例通常来源于实际科研项目或工程项目,与专业发展方向及实际应用紧密相关。本文以多态概念为例,选择相机检校模块来分析Visual C++中多态的概念、实现及如何用程序设计语言描述相机检校的过程。

假设相机检校类CCalibrarion为基类,二维格网相机检校类CGridCalibrarion及三维控制点相机检校类C3DCalibrarion为派生类,如图 2所示。

图 2 类CCalibration、CGridCalibrarion和C3DCalibrarion Figure 2 Class Definition of CCalibration, CGridCalibrarion and C3DCalibrarion

图 2中的CCalibration类中,VERTEX为控制点三维坐标结构,fPoint为影像点二维坐标结构,CAMERA为相机参数结构。CGridCalibrarion类的成员函数DLT为二维直接线性变换,用于二维格网相机检校。C3DCalibrarion类的成员函数Resection()为后方交会,用于三维控制场相机检校。CCalibrarion、CGridCalibrarion及C3DCalibrarion三类都有相机参数解算函数CamParameterCal(),但它们的功能是不一样的,分别为返回相机初始值、调用DLT函数、调用空间后方交会函数。这表明3个不同类的对象对于同一消息CamParameterCal()做出完全不同的响应,即根据相机检校参数精度要求不同,选择不同的检校方法,这可以用来说明多态的特征。图 3为通过CCalibrarion类的指针对象pCalibration1和pCalibration2调用成员函数CamParameterCal()来实现CGridCalibrarion和C3DCalibrarion类的成员函数CamParameterCal()调用,这体现了多态“一个接口,多种实现”。

图 3 类CGridCalibrarion和C3DCalibrarion成员函数CamParameterCal()的实现 Figure 3 Implementation of Function CamParameterCal() of CGridCalibrarion and C3DCalibrarion

在多态概念剖析之后,结合讲解DLT()和Resection()函数程序设计,达到理解如何用程序设计语言描述专业应用问题。以Resection()函数为例讲解用程序语言描述空间后方交会的循环迭代解算方法。后方交会解算过程包括相机参数元素赋初值,经过循环迭代,在满足一定限差时,得到最佳相机参数值,图 4为后方交会的相机参数解算过程及对应的Visual C++程序。

图 4 程序语言描述空间后方交会的循环迭代解算方法 Figure 4 Iterative Solution of the Space Resection in Program Language

通过一一对应空间后方交会的5个步骤和Visual C++程序语言描述,学生可以具体体会从程序设计到专业应用问题实现的过程。比如可以用Visual C++语言中do{}while结构实现相机参数解算循环迭代的过程,相机参数改正值的限差约束可以用循环结构终止条件表达,相机参数值的更新用循环结构中每一次方程解加上初值来动态实现。

在多态概念和相机检校程序剖析之后,可以进行课堂分组实践,主题为继续完善相机检校模块中的DLT()算法。每个小组由5~6人组成,搭配不同层次和水平的学生,保证小组内可以互帮互助。在DLT()算法程序编写过程中,学生实际上是对课堂内容的进一步内化,即通过实践来内化相机检校程序设计过程。教师主要观察小组实践过程中出现的问题,比如遇到哪些困难,解决方案的切入点是否可行等,同时针对具体情况进行适时有效引导。分组实践过程中,小组成员对实践的贡献作用是不同的,教师要积极督促每位成员积极参与,贡献自己的想法,主动学习,达到共同进步的目的。

4 专业应用为向导的Visual C++程序设计课程教学效果评价

专业应用为向导的Visual C++教学方法在实践中取得了较好的效果,尤其加强了学生专业应用程序设计的能力,在后续专业课学习及毕业设计过程中得到了很好的表现。在教学内容方面,加强了与专业知识的联系性,不再是孤立、单纯的Visual C++程序设计课程学习。针对遥感科学与技术专业的不同方向,Visual C++程序设计课程结合GIS、遥感及摄影测量应用等实例项目,创建了Visual C++知识点的应用场景。通过对比发现,结合专业的Visual C++程序设计课程学习,学生学习的目标、兴趣及主动性明显加强。在教学形式上,结合课下和课堂学习,提供了学生更多的知识学习途径,极大调动了学生学习的自主性、探究性及创造性[13]。在线课程、视频、维基百科等自学方式增加了学生学习的灵活性,改变了学生以往被动学习的状态,大多数学生经过思考,带着问题进行课堂讨论,主动接受知识。分组实践则进一步促进学生专业应用程序设计能力的提高,通过理解课堂专业应用实例和项目的剖析过程,在实践中摸索由程序设计到专业应用实践的转换,极大改善了以往面对专业课程序设计无法下手的局面。从课程测试成绩上看,本方法的学生测试平均成绩要高于以往教学方法,尤其在综合考查题中体现明显。试卷的基本知识点和综合考查部分(程序改错、编程)各占50分,相比较而言,本方法对于学生基本知识点的得分改变不大,但对于程序改错、编程得分提高较大。从后续专业课及学习上看,专业课程序设计问题较少,参加大学生科研项目的学生数增加,毕业设计的深入度加强。

5 结束语

对于遥感科学与技术专业而言,Visual C++程序设计课程不仅要让学生掌握程序设计语言的知识、思想和方法,更重要的是培养用程序设计思维解决遥感科学知识应用的实践能力。

目前的Visual C++程序设计课程教学方法面临学生在专业课的程序设计实践环节存在困难的问题。本文针对该问题,分别从成果导向教育理论和翻转课堂模式分析了成因,缺少专业相关算法的实例讲解及与专业应用相关的综合性实践活动是造成Visual C++程序设计课程学习与专业应用实践环节脱节的根本原因。在此基础上,本文提出了以专业应用为导向的Visual C++程序设计课程教学方法,该方法结合课堂教学和课下教学模式,课堂教学以剖析专业实例和分小组项目实践为主,知识点的学习以课堂外课件、在线课程、维基百科等多种方式完成。

教学实践表明,该方法不仅提高了学生Visual C++程序设计的能力,而且极大地促进了学生后期的专业课学习和科研项目的参与度。

参考文献
[1] 钱燕, 赵桂龙, 桑运川, 等. VC++课程教学中的发现式项目驱动法研究[J]. 计算机教育, 2014, (12): 68–71 DOI: 10.3969/j.issn.1672-5913.2014.12.018
[2] 王育坚. Visual C++面向对象编程[M]. 3版. 北京: 清华大学出版社, 2013
[3] 邓红卫, 魏书堤, 王樱, 等. 基于计算机思维能力培养的程序设计课程教学改革[J]. 衡阳师范学院学报, 2013, 34(6): 146–148
[4] 陈晋音, 俞山青, 毛国红. 面向C++程序设计课程的翻转课堂教学改革[J]. 计算机教育, 2015, (10): 39–44 DOI: 10.3969/j.issn.1672-5913.2015.10.011
[5] 赵宏, 王恺. 我国大学计算机课程现状及改革探索[J]. 中国大学教学, 2015, (2): 50–54
[6] 沈泽刚, 刘杨. 计算机专业程序设计课程改革探索[J]. 渤海大学学报(自然科学版), 2012, 33(2): 161–164
[7] 孙娜. 基于启发式的Visual C++程序设计教学改革[J]. 计算机教育, 2011, (22): 29–32 DOI: 10.3969/j.issn.1672-5913.2011.22.008
[8] 曹西征, 孙志勇. VC++教学中实例驱动法和模糊评价研究[J]. 计算机教育, 2015, (21): 82–84 DOI: 10.3969/j.issn.1672-5913.2015.21.022
[9] 李元金, 王正山, 王涛, 等. 项目剖析现场实现教学法在VC++程序设计课程教学中应用探讨[J]. 新乡学院学报, 2014, 31(8): 73–76
[10] 林科学, 钱燕. 《VC++程序设计》课程研究性教学改革方案——以南京农业大学工学院为例[J]. 福建电脑, 2014, (11): 81–83 DOI: 10.3969/j.issn.1673-2782.2014.11.031
[11] 石秦峰. 基于OBE的程序设计类课程教学改革探索[J]. 计算机教育, 2016, (3): 106–110
[12] 辛晓霞. 基于Blackboard平台的翻转课堂模式的构建与应用研究——以高校《C程序设计》课程为例[D]. 西安: 陕西师范大学, 2015
[13] 张晓如, 潘克勤, 刘永良, 等. 课内课外多元化VC++课程教学改革实践[J]. 中国校外教育, 2008, (8): 839–840