高职程序设计课程中“大组互助,小组结对”计算思维培养模式探究
作者: 张乐吟
摘要:针对高职院校程序设计课程的教学现状,文章从培养计算思维的视角出发,构建“大组互助,小组结对”教学模式,并且以九九乘法表案例说明教学实施过程。Java程序设计基础课程教学实践表明,此教学模式能够提升教学效果,得到学生的高度认可。
关键词:计算思维;结对编程;小组学习;协作学习;程序设计;教学模式
中图分类号:G642 文献标识码:A
文章编号:1009-3044(2024)31-0164-04
开放科学(资源服务)标识码(OSID) :
0 引言
计算思维是21世纪的人们应具备的关键技能。计算思维(Computational Thinking) 的概念,最初由麻省理工学院(MIT) 的Seymour Papert[1]教授在1980年提出,而后于2006年由美国卡内基梅隆大学的周以真[2]教授在Communications of the ACM 这一权威计算机期刊上进一步阐述并明确定义。她认为:计算思维是运用计算机科学的基础概念进行问题求解、系统设计,以及人类行为理解等涵盖计算机科学之广度的一系列思维活动。计算思维是认识世界和改造世界的工具,有助于跨越“知识鸿沟”,促进计算机科学家与其他学科专家的沟通[2],在科学研究、工程设计、经济金融、教育等多个领域内都发挥着关键作用。
校园内实施的编程教育是提升学生计算思维能力的主要途径。编程能力的提升非常依赖于学生的上机实践。而高职的程序设计课程以灌输传授为主,过于注重培养学生语法知识基础和低水平实操技能,并没有把计算思维培养放在首位。学生仅仅是在模仿教师演示的编程范例,当同类问题以全新情境再现时,多数学生无法通过分析问题本质来解决问题。传统程序设计课程主要采取独立编程实践与小组合作两种教学模式,然而两者均存在局限性:独立编程实践过程中,学生遇到困难常常倾向于求助教师;然而教师由于时间和精力有限,难以在课堂上关注所有学生。部分学生因为代码错误频发、编程学习枯燥乏味而产生了退缩和厌学心理,限制了计算思维的发展。至于小组合作学习,通常每组4人以上,组内只有少数成员实际参与了编程实践,小组讨论也常常被学优生所主导,学困生缺乏独立思考及自主学习的机会,只能扮演旁观者或倾听者的角色,计算思维没有得到有效提升,长此以往将加剧组内的两极分化局面。
传统教学模式已经难以适应信息科技的快速发展需求。相较于传统课堂的编程教学方法,结对编程作为一种高效的计算思维培养手段,受到了广泛关注。结对编程双方均能充分参与编程过程,这在一定程度上减轻了学生在独立编程时可能产生的焦虑与畏难情绪,不仅增强了学生的学习效率,还缓解了实践指导教师的教学压力,有助于营造全员参与和互动的教学环境。当前,结对编程教学策略,正处于研究与发展的初期阶段,尚未得到广泛应用。本文从培养计算思维的视角出发,根据国内外计算思维和结对编程的研究进展,创新“大组互助,小组结对”的教学模式,旨在为编程课程的教学改革引入新思路,为高职高专学生计算思维培养提供可行的方案,同时也为其他致力于结对编程研究的学者提供参考。
1 结对编程
结对编程(pair programming) 是敏捷软件开发领域的一种实践方式,属于极限编程(XP,eXtreme Pro⁃gramming) 所倡导的12个最佳实践之一[3]。在传统的开发流程中,每位开发人员各司其职,分别负责软件系统不同模块的开发任务,彼此间工作独立,互不干涉。结对(pair) 构成了最小的团队单元。结对编程要求两位开发者共同使用一台电脑来完成指定任务。
在此模式下,两人分别担任驾驶员(Driver) 和领航员(Navigator) 的角色。驾驶员聚焦于当前的具体目标,负责操作键盘和鼠标来编写代码;而领航员则依据“地图”(如模型或文档)来规划整体策略,并负责代码审查。双方需保持持续的沟通交流,一旦发现问题,就暂停编码,共同商讨解决方案。结对双方会根据工作内容灵活、定期地交换角色,确保平等参与并共享工作成果。在软件开发和改进过程中,合理地应用结对编程策略,有助于推动知识的共享,营造团队协作的氛围,进而提升产品质量和缩短开发周期。
软件行业中结对编程的成功案例,迅速吸引了计算机教育工作者的高度关注。国内外研究人员从多维度深入探究了结对编程在实际应用中的成效。结对编程蕴含出声思维、合作学习等促进深度学习的核心要素,结对双方的对话交流促使编程思维得以显性化,提高了即时反馈的速度与效率,有助于学生更好地学习和掌握计算思维的逻辑[4]。这种教学策略在促进学生深入理解编程概念、提升编程信心、改善编程态度,以及促进同伴间的知识共享等方面,均展现出了积极作用。
在结对编程教学实践中,结对策略发挥着极其关键的作用。教师出于互助合作的考量,倾向于让学优生与学困生组成结对。以学习者性别或者能力水平作为结对依据的研究表明,男-女异性结对方式和高能力水平-低能力水平异质结对方式更能显著提高学生的计算思维[5]。然而,也有研究表明,异性或者异质结对策略更容易导致权威角色出现,弱势学生可能因为难以跟上进度而转变为旁观者[4],进而加剧个体间的成绩差异。相比之下,性别相同或编程能力相近的学生进行同质结对,更倾向于采用平等协商的方式[4],这对于激发女生和学困生的编程学习兴趣具有积极作用。此外,将结对编程用作培养学生计算思维的教学策略,必须兼顾考虑同伴之间的学习风格匹配程度以及结对伙伴的合作意愿。学生自由结对,可以带来更积极的同伴关系和学习动机,从而提高互动合作效果[6]。
结对编程过程中,双方需要在同一计算机上轮流承担不同角色,可能会出现合作不愉快,比如说意见不统一、能力水平差距等造成的分歧与抵触情绪。此外,部分学优生可能会长时间占用计算机,从而使得学困生参与度不足,双方缺乏有效的互动与交流。为了弥补常规结对编程策略(即教学全程运用结对编程)的潜在缺陷,研究人员提出了诸如混合结对编程[7]、部分结对编程[8]、协作结对编程[9]等变体形式。这些结对编程变体的共同特征,在于它们巧妙融合了独立编程与结对编程两种模式。独立编程鼓励学生自主构建并反思新知识,而常规结对编程则有助于学生之间的知识共享与迁移。结对编程的变体形式既保留了独立编程的优势,又吸收了常规结对编程的长处,展现出独特的价值。
2“ 大组互助,小组结对”教学模式的构建
本文根据结对编程原理,按照“大组套小组,小组结对子”的形式,提出“大组互助,小组结对”教学模式,如图1所示。
2.1 教学准备阶段
1) 敏捷开发文化建设,创建结对编程情境(第一次上课时)。
在编程实践正式开始之前,教师向学生简要讲解敏捷开发与极限编程的基本概念,阐述结对编程的准则与要求,并指导学生们依据性别、学习风格、能力水平等因素进行合理的分组结对。同时,教师还介绍结对编程的优势及其对个人发展的积极影响,让学优生了解费曼学习法的原理,意识到解答同伴疑问的过程能增强自身的学习成效;而对于中等生和学困生,则强调“集思广益”的道理。即使是普通的程序员团队,通过极限编程也能创造出优秀的产品;同理,普通学生通过结对编程也能实现互帮互助、共同进步。此外,结对编程还为学生提供了模拟IT企业职场环境的机会,有助于培养学生的职业素养和团队合作能力。
2) 引导学生结对,均衡大组实力(3天内)。
教师对全体学生进行摸底调查,依据学生的前置课程成绩或者入学考试成绩水平,将他们分为高、中、低三个层次。首先,允许学生自由选择结对伙伴,随后教师根据优势互补的原则进行适当调整,并将结对小组均衡地分配到各个大组中,每个大组包含2~3个结对小组,确保学业水平在大组内异质、大组间同质。根据实际班级人数和具体情况,结对小组可以包含2 ~3名学生,遵循“高高联合,高中互补,中低互助,高低互动,中中互学,共同进步”的原则。通过高高联合,让学优生得到更好的发展;采用高低互动和中低互助的方式,确保学困生有人指导。在结对小组的基础上,搭建以高能力结对小组带动中低能力结对小组的大组结构。这种模式旨在改善传统小组合作学习中存在的分组不均衡、学困生参与不足等问题,从而避免学困生状况进一步恶化。
3) 团队建设,制定规则(2天内)。
教师为每个大组设立一名组长,并指导学生共同制定大组与小组的目标与规范,旨在强化团队凝聚力,并激发组内成员的责任感与主人翁精神,促使每位学生都充分认识到自身对于团队的重要性,进而强化他们的自我管理意识以及组内互相监督、共同进步的观念。每次上课,教师及时公布各大组的得分情况,注重激发大组之间的竞争意识,以此来调动每位学生的学习积极性。
2.2 教学实施阶段
1) 提出问题(15 分钟)。
教师首先依据教学目标,构建教学情境,提出待解决的问题,以此激发学生的求知热情和学习动力。随后,各结对小组展开交流讨论,以明确学习任务,将实际情境问题转化为编程问题。教师指导学生创造性地探寻最优的问题解决策略。
2) 分析问题(20分钟)。
教师讲解语法基础知识,并为学生展示具体的操作步骤。同时,教师引导结对小组对问题进行剖析,将解决问题的关键步骤从自然语言描述转换为算法流程图。结对组员间进行互动讨论与交流,驾驶员承担算法设计职责,导航员负责算法的审查工作,双方协同合作,共同完成算法流程图的绘制任务。在此过程中,学生逐步培养算法思维能力,并思考如何将算法设计转化为代码实现。大组内的各小组相互监督,共同维护课堂纪律。
3) 实践探究(40分钟)。
实践探究环节采用混合结对编程策略[7],该策略在常规结对编程的基础上融入单独编程元素。基础任务采用“独立编程+代码互查+实时讨论”模式,每位学生均配备一台电脑,双方在编写个人程序时都扮演“驾驶员”角色。每隔5~10分钟,教师提醒结对小组互相审查同伴的流程图和代码,讨论各自的想法。双方则需转换为“导航员”角色,审查对方的作品思路及代码质量。此策略一方面为学生提供了独立创作个人作品的机会,有助于提升个人编程技能,减少滥竽充数的现象;另一方面,它也潜移默化地促进了学生合作学习习惯的养成。
综合任务采用结对编程方式,结对双方共用一台电脑完成同一任务。“驾驶员”承担流程图绘制与代码编写的任务,而“导航员”则负责监督与审查工作。为了避免“驾驶员”长时间占用电脑,教师每5~10分钟提醒结对小组实施“驾驶员”与“导航员”的角色轮换。
结对双方交替执行编程任务,确保高效完成协同任务。
课程大作业由大组内各结对小组合作完成。如果遇到困难,结对小组可以随时向大组内其他小组求助,大组无法解决的问题可以求助教师。教师负责巡查学生的实操情况,解答学生问题。
4) 分享交流(15分钟)。
在分享交流环节,教师应鼓励学生主动表达观点,对作品的思路、创意、问题等进行交流分享;同时,也激励听众积极思考,勇于提出自己的看法,培养其批判性思维能力。借助展示与交流,帮助学生认识到其作品的优点与待改进之处。
本环节实施了多维度、多主体、多元数据的综合评价,运用线上数据分析、课堂观察、随堂测验、作品评价、学生个体的自我评价、大组内和小组内的同伴互评、大组间的交叉评价,以及教师评价等多种手段,全面考查学生的行为、态度与知识技能掌握程度等各项指标,重点观测并记录结对成员的合作互动状况。最后,教师进行点评总结,并对本节课的程序设计知识进行概括与梳理,旨在加深学生对所学内容的理解与掌握。
2.3 评价反思阶段(课后1周内)
学生依据所获得的反馈信息,对作品进行修正与完善,并且完成课后拓展任务。与此同时,教师进行教学反思,不断优化教学设计、改进教学方法、提升教学质量。学生进行学习反思,以便更好地发现问题、总结经验,认识自身优缺点,从而改进学习方法。教师积极关注学生动态,给予及时的帮助,指导学生形成良性的互动模式,营造良好的合作环境,提高结对编程的有效性,确保每位学生都能积极参与学习任务。
3 教学案例
通过“九九乘法表”双重循环的教学实例,深入探讨教学实施过程。在“提出问题”环节,教师以“九九乘法表”作为综合任务,引导学生观察与思考乘法表的结构特点。在“分析问题”和“实践探究”环节,教师布置独立编程任务,要求结对小组展开算法思路的讨论,结对双方均扮演“驾驶员”角色,分别写出伪代码和流程图,并且分别编程输出乘法表的第6列与第8 行。每隔5~10分钟,教师提醒结对小组成员转换为“导航员”角色,互相审查同伴的代码。通过编程实践,加深学生对编程逻辑的理解,并锻炼其将抽象思维转化为具体代码的能力。