汪晓妍,黄鲜萍,夏 明,胡海根
(浙江工业大学 计算机科学与技术学院,浙江 杭州 310023)
随着全球一体化的加快,我国的高等教育步入快速发展阶段。由于国际影响力的增强,越来越多的国际学生来中国接受高等教育,来华留学生教育已经成为我国高等教育的重要组成部分和建设国际一流大学的重要基础与保障[1],是教育是否开放、学术交流能力是否活跃的重要标志。教学工作作为留学生工作的关键环节,其质量的好坏关系着我国国际声誉的维护和留学生事业的发展。
招收国际本科留学生和培养来华留学生,目的是让他们成为适应国际竞争和符合国际需求的专业人才,培养他们独立解决问题的能力和创新能力。随着留学生数量的增加,留学生的国别、母语、宗教信仰等方面存在诸多差异,同时留学生的基础参差不齐,留学生教学对教学内容的设计以及教学的技巧和管理提出了很高的要求。
国际留学生计算机专业本科教学的根本目的是培养学生的计算机应用与编程能力[2]。然而,留学生与国内学生在基础、文化、语言等方面存在较大差异,现有的教学方式在留学生教学过程中遇到了诸多问题,因此亟须根据留学生特点,对现有教学方式作针对性的改革以切实提高教学质量。
计算机程序设计课程是计算机相关专业课程中最重要的基础课程,其目的是培养大学生程序设计以及系统开发的能力,同时培养学生的思维和动手能力。程序设计大型实验课程则针对已修程序设计基础C和C++程序设计课程的本科学生开设。实验中,需综合运用过程化、对象化和面向对象编程方法解决实际问题,学习大型程序的开发过程和相关技术。然而,目前国际留学生的程序设计大型实验授课过程中存在以下问题。
(1)留学生编程基础普遍薄弱,而大型实验综合性实践性强、知识点分散、难度大。虽然留学生有先修的语言课程知识,但是技术普遍不够熟练,往往对于大型的程序开发感觉无从下手。
(2)教师与留学生之间存在语言隔阂,而大型实验课程无独立的课堂教学时间,学生难以在短时间内理解实验重点和难点。目前教师一对多的教学结构很难保证在项目实践过程中对每名学生进行详细指导,而留学生缺乏自我分析和解决问题能力,遇到困难往往难以自己解决,难以按期按质完成实验任务。
(3)类似于其他留学生课程,文化差异在大型实验课程中也有非常明显的体现,导致难以按照中国学生的授课方式进行教学。海外留学生的基础不同,文化也不同,对课程有着自己不同的意见和观点。在不满意课程进度时,学生往往比较散漫,缺课甚至不提交作业,从而导致无法有效考核其实验完成情况。
综上所述,以上问题导致留学生在大型实验过程中疲于应付,甚至产生厌学、教学低效等现象,迫切需要研究适应于留学生教学的新理念和新方法,提升教学质量。虽然目前已有学者对计算机程序设计教学的方法进行了探索[2-4],但是由于留学生的特殊性,还无法很好地满足留学生教学的需求[5]。目前对于留学生程序设计大型实验的教学方法还缺乏相关探讨。
任务型教学法最早应用于语言教学[6],追求把语言运用的基本原理转化为具有实际意义的教学方式,体现了以学习者为中心的教学理念[7]。计算机语言是一种扩展意义上的语言,通过一套计算机能够理解的数字、字符和语法规则组成的指令或语句,控制计算机进行工作。与自然语言学习类似,计算机语言的学习同样需要大量的锻炼,在实际运用中提升对于语言运用的熟练程度。为了克服留学生对现有教学方式难以适应,导致程序设计大型实验效果欠佳的问题,我们提出任务模块化教学方式。
首先,将大型的实验任务分解为小型的相互关联的模块,将实验重点和难点提炼到各个模块中,这样可以避免学生突然接触到大型问题后无法下手的问题;引导学生进行问题分解并逐个解决模块中的小型关键问题,即使学生的编程基础较差,也可以通过逐个解决各个模块中的问题,逐步完成整个大型实验任务。
其次,通过大型实验任务的模块化分解,教师可有针对性地对每个小型模块的重点和难点进行讲解,并且通过图形化等手段对重点和难点进行形象化描述,从而有效避免语言隔阂对于教学效率的影响。
最后,通过引导学生分阶段递进式地完成模块化的实验内容,可有效避免因留学生缺课、不交作业而难以对其进行考核的问题;引导学生逐次提交模块化实验内容的作业,从而实现对学生进行过程化考核,降低留学生的管理难度,并有利于教师及时跟进指导。
整个程序设计大型实验项目的设计可采用任务模块化。首先,从项目的选型上选择具有清晰模块需求的项目,从设计的角度将系统设计成为模块松耦合的组织方式;其次,将一个完整的项目分解成相对独立的模块,依据所需要的知识点和难点,给予每个模块相对较完整的目标任务书和参考资料,并适度分阶段给出问题的解决思路;最后,对于部分基础薄弱的学生,对部分难度较高的模块提供范例程序框架,让学生在读懂和理解程序框架的基础上添加或修改代码,以完成实验要求,并逐步引导学生独立完成每一个模块任务的开发,最终搭建成为整个系统。
以实验内容为设计一个万年历为例,首先将其分解为3个软件开发阶段:设计阶段、实现阶段和测试阶段,并对每个阶段进行任务模块分解,以覆盖需求分析与数据结构、业务逻辑与算法、软件工程这3个方面的学习和训练。设计阶段的任务模块分解在时间轴上进行,包括需求分析、概要设计和详细设计。该阶段的任务模块分别要求学生根据总体目标分析软件需求并给出具体功能,根据软件功能设计总体框架和功能模块,并进一步细化所需要的数据结构、数据结构间的交互关系等;引导学生把现实的需求抽象成程序设计的语言,以面向对象的方法,把需求准确地表达出来并进行系统设计。实现阶段的任务模块分解则根据详细设计给出的数据结构进行,要求学生每次实现一个所设计数据结构的业务逻辑。对于基础较差的学生,可以提供参考程序框架,在框架内进行功能实现。该项目的业务逻辑中包含对分支、循环等基本编程要素的运用以及对常见的数组、链表等数据结构的使用,从多个角度对学生编写具有一定算法逻辑程序的能力进行训练。在程序测试阶段,引导学生对每个所完成的数据结构进行黑盒或白盒测试,并对整个软件的功能进行集成测试。在此基础上,模块鼓励学生对现有的程序进行扩展和优化,实践软件工程中有关软件生命周期的相关理论,学习如何应对需求变更、对已有的程序项目进行有效的维护、进行代码优化和问题跟踪、进行测试用例的设计等,以提高学生对软件开发流程的整体认识。
图1 所示为一个典型的万年历设计与任务模块分解示意图,其中,前序任务模块的结果作为后继任务模块的基础,在设计阶段将整个软件分解为Calendar、DateTime、Event等多个数据结构,并在实现和测试阶段进行分别实现和测试,最后进行集成测试。整个任务被分解成多个子任务,通过引导学生完成单个子任务,并对每个子任务学生的完成情况进行及时检查和指导,可以提高留学生程序设计大型实验的效率和效果。
图1 任务模块化分解
任务模块化的程序设计大型实验的关键在于分模块进行有效的课堂指导,对此,可以采用支架式策略,并适当运用范例法开展教学辅导。整个基于任务模块化的课堂指导执行流程如图2所示。
有效的任务模块化课堂指导要求根据每个任务模块的阶段目标,设计有针对性的指导内容和反馈方式。在设计阶段,主要提供给学生软件工程和设计模式方面的参考资料,辅导时则结合典型的设计模式案例对学生的设计方案作针对性指导;在实现阶段,主要提供给学生典型数据结构和算法实现设计甚至范例源代码,辅导时则针对学生代码中的错误和不合理之处结合范例作针对性指导;在测试阶段,主要提供给学生软件测试教材以及自动化测试软件使用说明资料,辅导时则主要针对学生测试用例覆盖完善程度和测试输入输出结果合理性作针对性指导。
分模块进行课堂设计和辅导极大地增加了教师负担,为了任务模块化的设计能够更好地得到执行,可对学生进行分组。如果没有将整体任务模块化,就很难考查学生进度并进行有效分组,而任务模块化由于任务模块逐步给出并不断考核,因此可以有效考查学生进展,选择进展较快的学生作为组长,负担部分指导组内学生的任务,从而在保证教学效果的情况下,降低教师负担。笔者尝试了一种在教学进展过程中动态分组的方法,在学期先不进行分组,在完成1~2个任务模块后,视进展情况,在30人左右的班级中选择5~6名任务模块完成情况好的学生作为组长,并让其自由选择同学作为组员,形成5~6个小组;组长负责将本组实验进展和问题向指导教师汇报。其次,为进一步保证对学生的充分指导,在进行实验课时,需要1~2名研究生助教进行辅导,这样一次实验,2个班级60人左右,分10个左右的实验小组,由3名教师和研究生助教指导,基本保证了每个留学生在整个开发过程中都能得到及时和足够的提示和帮助。在具体指导过程中,每名教师或助教负责3~4组,而教师可以更多地关注各组组长,检查其实验内容,对组长进行提问。每组在实验过程中碰到问题多时,由组长收集向教师提出。根据问题出现的频率,教师可选择集体解答或直接向提问的学生解释。
以往实验课考核主要根据最终的实验代码和实验报告的结果进行总结性评价,这种方式很难全面反映学生实验过程的真实情况。引入任务模块化有利于引入形成性评价机制,对于任务模块进行阶段性、递增式的考核,因此需要设计新的适应于任务模块化设计的考核方式。
基于任务模块化的考核设计关键在针对任务模块子目标设计有独立、有针对性的评价方式。教师可从两个角度对学生完成任务模块的方式进行评价。一方面是客观完成情况,以详细设计为例,重点考查设计模式运用、数据结构接口设计是否合理,能否实现概要设计阶段定义的模块功能;再如模块实现,重点考核正常和非正常逻辑是否合适处理、数据结构运用是否高效等。模块测试重点考核是否完整测试所有正常和非正常输入的场景,是否进行了压力测试,是否实现自动化测试。另一方面,情感、动机以及社会交互也是影响学习的极为重要的因素。因此,在进行基于任务模块化的考核评价设计时,需要考虑多种因素对学生的实验准备、实验过程和实验结果同时进行综合评价。其中,对于实验准备成绩,可以参照组长实验报告准备情况、回答问题情况等方面确定该组成员的基本成绩。实验过程成绩通过实验运行情况、回答教师问题情况、选做部分完成情况、有“奖”类实验完成情况等方面进行评定。每个任务模块结束前,教师根据学生情况,对每组学生给出差别成绩并告知学生,学生如有不同意见,可以及时反映,进行修正。对于实验结果部分的成绩,可以从实验报告规范完整情况、实验结果分析情况等方面进行评定。
如上所述,任务模块化的引导式教学方式可以贯穿在整个程序设计大型实验教学过程中,这种教学方法的引入,能够极大提升留学生应用计算机程序设计语言进行实践和开发的能力。
发展留学生教育教学工作,是我国教育国际化的一个重要方面和必要途径。总结留学生计算机程序设计教学的优势和特点,思考它所面临的新问题,认真开展留学生教育教学的研究和探索,建构具有中国特色的国际计算机专门人才培养平台,具有极其重要的意义。
程序设计大型实验对于留学生来说是运用计算机语言进行规模化开发的第一次实践,知识点分散、难度大,对于留学生来说尤为困难。借助任务模块化的新教学方式,将大型实验完整任务依据知识点和难点分解为多个任务模块,并按照任务模块设计实验内容、课堂指导方案和考核方法,引导学生逐步完成大型任务,既有独立的针对性建设,又结合各自需求联合优化,可以很好地解决留学生教学效率低、难以管理等问题。
[1]赵奇栋. 国际化对留学生招生培养工作的挑战及应对[J]. 经济与社会发展, 2017(2): 81-84.
[2]尹鸿峰. 面向对象程序设计(C++)教学方法探讨: 类的概念及应用的引入[J]. 计算机教育, 2017(5): 82-84.
[3]高枚, 龚沛曾, 孙丽君. 构建多层次思维培养的C/C++程序设计教学[J]. 计算机教育, 2016 (1): 81-83.
[4]郭银章, 王丽芳. 基于项目任务驱动的C语言程序设计课程教学改革与实践[J]. 计算机教育, 2017(2): 41-44.
[5]郭玲, 何新. 面向留学生的VC++程序设计课程建设与教学实践[J]. 课程教育研究, 2016(8): 244-245.
[6]李广凤.任务型教学的形成、引进、探索和趋势[J]. 课程·教材·教法, 2015(9): 108-116.
[7]李云凤. 浅谈职校计算机教学中的任务型教学[J]. 课程教育研究, 2017(3): 143-144.