卢华灯,李婷妤
(湖南广播电视大学 网络资源系,湖南 长沙410004)
理实一体化教学法即理论实践一体化教学法,它突破以往理论与实践脱节的现象,使得教学环节相对集中。它强调充分发挥教师的主导作用,通过设定教学任务和教学目标,让师生双方边教、边学、边做,全程构建素质和技能培养框架,丰富课堂教学和实践教学环节,提高教学质量[1-2]。理实一体化教学将某一知识技能模块的理论课程教学与实践教学融合交替进行,达到学习、实践、理解、掌握螺旋上升的正向循环,符合学生的认知规律;在理实一体化程序设计类课程的教学实践过程中,存在理论教学和编程实践切换门槛高、巡堂指导工作量大且效率低等问题。
迭代式项目驱动教学模式是对项目驱动教学模式的细化,它将项目按照知识点进行分解、重新排序,形成前后知识相关的多个功能迭代项目,通过项目的迭代开发过程完成对知识的学习、运用[3]。这种教学法有利于学生掌握项目开发所需的知识,有利于从整体上把握课程各个知识点的运用场景,为以后开发完整的项目提供借鉴作用。将迭代式项目驱动教学法应用于理实一体化教学环境,更好地发挥理实一体化教学的效果。
Gitee(码云)是一个国内云代码托管服务,与Github类似,利用开源分布式代码版本管理工具Git构建。码云专为开发者提供稳定、高效、安全的云端软件开发协作平台,无论是个人、团队或是企业,都能够用码云实现代码托管、项目管理、协作开发[4]。
迭代式项目驱动教学法结合了项目驱动的目标准确和知识递进有序的优点;理实一体化教学强调理论与实践的相互作用,提高教学效果。在两者相结合应用于程序设计类课程的编程实践的过程中,笔者发现存在如下一些问题:①课程教学进度不容易把控,往往会因为学生的某个非本次课程的技能要求而拖延整个教学进度;②学生实践指导环节费时耗力,并且学习效果难以有效跟踪、记录、重现,不易形成共有经验;③课内实践内容与课外实践内容不易共享,编程过程不能无缝延续。
基于Gitee理实一体化迭代式项目驱动教学法,致力于克服上述困难,发挥两种教学法的优势。利用Git的代码版本管理功能,构建细粒度的教学案例,包括迭代式项目实践案例、编程实践错误案例等,并为各个案例打上Tag(标识);利用Gitee中的云代码共享实现项目案例的分享,提高程序设计类课程理实一体化的教学效果。
理实一体化教学实施过程中,理论教学和实践教学之间的切换较普通教学模式要更频繁,要求单次理论和实践循环覆盖更小的知识技能范围,从而使得理论学习和实践运用之间的门槛更低,知识技能更易掌握。根据学生注意力集中曲线,理论学习的时间最好控制在13分钟以内,以减少注意力失焦现象的发生[5]。因此需要更加细粒度地构建知识模块和实践模块,使得理论学习环节和实践学习环节的切换更加顺畅。
细粒度教学案例库包括知识讲解案例库和知识实践项目库,前者用于知识的理论学习和验证,后者用于知识的运用实践。构建细粒度迭代式项目案例库一般分3个步骤:①整理项目所需知识列表;②构建知识讲解案例库;③构建细粒度迭代式项目库。以HTML5高级编程课程的“移动端旅游网站页面”项目为例,使用Gitee构建细粒度的教学案例库的过程如下。
3.1.1 整理项目所需知识列表
移动端旅游网站页面项目的开发步骤主要有:①构建页面的整体结构代码;②使用样式表调整整体布局;③细化各个模块的结构代码;④细化各个模块的样式代码。根据开发步骤,项目所涉及的知识见表1。
3.1.2 构建知识讲解案例库
根据表1的知识技能要求,构建对应的理论讲解案例库。教师在介绍所需的理论知识时,利用讲解案例库验证所讲授的知识,学生可以根据案例库模仿验证。每个案例都提供一个基础框架,放置于一个项目中,存放在Gitee云代码托管服务上,并利用Git打上Tag(标记)和注释,以便案例的快速定位和选用。知识技能与讲解案例对应见表2。
以case1为例,从案例准备和使用两个方面,详细介绍讲解案例框架代码的使用场景。
案例准备环节:教师在编写“案例1:整体结构”代码框架时,给当前代码打标记和注释(见表3命令1),教师在当前项目中继续编辑代码,完成案例1的功能,为其打上case1_ok标记(见表3命令2),依次继续完成case2、case3、case4、case5等教学案例。
案例使用环节:教师课堂知识讲解完成后,切换到案例1进行知识验证实验演示,首先查看项目中所有的标记(见表3命令3),找到案例1对应的标记,然后使用checkout切换到对应标记(见表3命令4)。这时的代码就是案例1的框架代码,教师和学生都可以在案例1的框架代码基础上,进行案例1对应知识的验证实验。
表1 移动端旅游网站页面知识技能分析表
表2 知识技能与讲解案例对应
表3 Git 标记使用示例
3.1.3 构建细粒度迭代式项目库
项目库的构建与讲解案例库的构建和组织类似,它用于学生对知识技能的实际运用,这是学生知识内化的重要环节。项目库的构建顺序依据项目编码实现的一般顺序进行,各个版本之间存在递进关系,前面迭代项目的成果就是下一个迭代的开始。
以移动端旅游网站页面项目为例,细粒度迭代式项目库的构建设计见表4。根据网页设计的一般步骤,将移动端旅游网站页面项目细分为10个迭代步骤。各个迭代步骤中所用到的知识技能分别对应前期知识讲解和验证实践环节中的讲解案例代码,这为完成项目提供了技术参考。
理实一体化教学要求教师关注学生的实践过程,纠正学生在实践过程中错误。
教师在巡堂指导纠正学生编程实践的错误过程中,对于有共性的错误,利用Gitee的云服务功能,将有bug代码、修正后代码打上不同Tag和注释共享到代码云中,整理成编程实践常见错误库并共享。使得一个错误及其解决途径成为所有同学的经验。
以移动端旅游网站页面项目为例,介绍实践错误库的具体构建过程:
(1)进入项目实践环节后,教师巡堂指导,其中某位同学向教师提问“我的文字怎么不能居中显示,我是按照案例库中的方法进行的”;
表4 移动端旅游网站页面细粒度迭代式项目库
(2)教师在检查代码的过程中,觉得这是一个有共性的错误,于是就将其打上Err1标记和“文字不能居中显示”(见表5命令1);
(3)然后跟该同学讲解如何修正该错误,在解决问题后,将正确的代码打上Err1_ok标记和注释(见表5命令2);
(4)完成后将两个标记的代码均上传到Gitee云代码托管服务中(见表5命令3),实现错误的共享;
(5)教师在课上检索(见表5命令4)和查看(剪标5命令5)编程错误及解决方式,与其他同学分享错误经验。
上述过程收集并共享了一个编程错误及解决方案,教师可在课后整理本次课程的有价值的错误,形成编程实践错误库,便于课后检索和使用,形成共同经验,提高巡堂效果。
表5 构建实践错误库Git命令使用示例
文献[6—7]中提出的师生协同教学法、问题驱动式教学法,是由教师发布实验任务项目,学生Fork后完成,并提交到任务中。这是一个有效的提高学生编程能力的方式。
由于GitHub对于国内用户而言,访问速度比较慢,笔者选用Gitee布置课后编程实践作业,并要求学生分步骤提交编程的各个环节,以此记录学生编写代码的全过程。通过学生所提交的共享编程作业项目,分析学生所提交的代码,教师可以观察作业项目从无到有的一个完整的过程,以及学生的编程步骤,从而判断学生编程思路是否清晰。
利用Gitee云代码服务器的共享特性,可以将课堂项目进行扩展,所编写的验证性实验代码,可以为课后编程实践提供参考,实现课内编程与课外编程无缝衔接,实现编程思路的无间断。利用Gitee分阶段提交作业时所留下的时间戳,可以分析学生的编码时间,减少作业抄袭的现象,培养学生编程习惯。
我们以HTML5高级编程课程的移动端旅游网站网页设计项目为例,基于Gitee云代码托管服务平台改进了理实一体化环境下程序设计类课程迭代式项目驱动教学的过程,充分利用该平台分布式代码版本管理、云共享等特性,构建细粒度迭代式项目库,降低了学生理论学习与实践切换的难度;构建错误代码库,利用Gitee共享能力,将个别学生的编程错误经验,转换为所有学生共同经验,提高了巡堂指导的效果;利用Gitee的软件项目协同开发功能,记录了学生编程实践过程,培养了学生编程习惯,有效提高了教学效果。