“合作性学习”在软件设计模式课程教学中的实践
2017-02-25刘靖
刘 靖
(内蒙古大学 计算机学院,内蒙古 呼和浩特 010021)
“合作性学习”在软件设计模式课程教学中的实践
刘 靖
(内蒙古大学 计算机学院,内蒙古 呼和浩特 010021)
针对软件设计模式课程理论内容抽象、实践内容较零散,以及学生普遍缺乏规模化软件开发经验的现状,分析“合作性学习”方式在软件设计模式课程教学中的应用必要性,提出“合作性学习”驱动的软件设计模式课堂讲授内容和实训教学环节的设计方法,说明通过强化合作实践环节的教学激励,促进学生对课程理论知识内容的深入理解,培养学生主动探索的学习能力和切实可用的软件设计模式分析与应用能力。
合作性学习;软件设计模式;教学方法改革
软件设计模式(Software Design Patterns)是从许多规模化应用软件系统设计中总结出来且可复用的成熟设计方案[1],由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides等4人在1994年率先提出了23种面向对象设计模式[2],之后陆续出现非常多针对不同程序设计语言和软件架构的设计模式,其广泛应用有效提升了软件设计开发效率及可靠性。能够熟练掌握并应用软件设计模式的软件研发人员是我国软件行业迫切需要的高端人才。因此,在高校开设软件设计模式课程,使学生掌握其基础理论知识,并具备系统、扎实的软件设计模式分析与应用能力,对我国软件行业的快速、健康发展具有重要的现实意义。
已有相关论文从课程开设的必要性及可行性分析[3]、基于“做中学”的课程教学方法[4]等方面探讨了软件设计模式课程教学改革。通过课程教学实践,验证了“合作性学习”模式驱动的课程教学改革可以激发学生对软件设计模式相关内容进行探索性合作研究的主动性,学生能够较好的理解抽象的课程理论知识,提升了学生在实际软件研发中分析和应用软件设计模式的能力。
1 软件设计模式课程教学面临的问题及应对策略
软件设计模式课程教学关注如何让学生真正理解设计模式的指导原则、熟悉设计模式的适用性及意图动机、掌握设计模式的应用方式及利弊权衡。其中,与设计模式指导原则相关的理论内容较为抽象,而不同的设计模式因解决各不相同的具体问题又很难进行统一的讲授与总结。当授课对象为本科生或大部分硕士研究生时,由于教师讲授容易照本宣科,且学生非常缺乏实际软件开发经验,故而学生对所讲授的知识没有任何感性认识且非常难理解,认为软件设计模式是高深但没有实际应用价值的课程,造成学生缺乏进一步学习的主动性。此外,在实训教学实践中,利用2~3个典型实例程序让学生体会所有设计模式往往不现实(注:通常课程会涵盖20个左右具体设计模式);而对每一个设计模式完成一个实例程序又使得实训内容过于零散和庞大。这就导致大部分学生在有限的课时内只能选择1~2个设计模式完成实训教学,很难做到完整理解课堂讲授知识,并切实掌握不同设计模式的应用方法。
为有效解决上述教学难题,进一步改善教学效果,软件设计模式课程教学必须强化学生自主学习能力的培养,立足于加强实训环节教学及考核,真正培养学生具有切实可用的软件设计模式分析与应用能力。“合作性学习”模式[5]旨在促进学生在由不同学习个体组成的学习小组中互助合作、取长补短、相互激发与激励、达成共同的学习目标,并以小组总体成绩作为学习效果考核依据的教学策略模式。通过合作,强化了学生自主学习的主体地位,而教师不再成为唯一的知识供给方,学生共同学习的整体效果也往往大于每个学生独自学习效果相加的总和,即学生可以通过合作性学习收获超乎预期的学习效果。因此,将“合作性学习”应用于软件设计模式课程教学改革中是适合且有效的,一方面激发了学生的学习兴趣,提高了学生的积极性与主动性,知识获取不再是应付差事的被动过程,而是讨论分享的主动过程;另一方面,客观上要求学生必须通过编程实训理解设计模式的含义及应用方式,否则很难在合作学习中清楚回答并应对他人提出的技术疑问和教师考核。这种实训过程也有效提升了学生的软件设计模式分析与应用能力,可以在一定程度上弥补学生参与实际软件研发项目经验的不足,为学生今后的学术深造或工作奠定良好的知识和能力基础。
2 “合作性学习”模式驱动的教学设计
2.1 教学目标
“软件设计模式”是为计算机类专业,特别是为软件工程专业开设的一门高级核心课程。课程的教学目标是秉承“合作性学习”的教学理念,通过教师课堂讲授和学生合作小组自学,强化对“两类基础知识”的学习和“两种基本能力”的培养。具体而言,课程重点讲授软件设计模式的理论指导原则、软件设计模式的描述方式及应用原则等两方面的基础知识;通过合作性学习小组的自我知识学习及编程实训实践,使学生能够有意识地从设计模式的角度优化软件设计方案,培养学生的“主动探索性学习与知识分享能力”,即能够通过小组合作讨论和探索学习,完成一个独立设计模式相关知识的扎实掌握和不断提升,并能够讲解和分享所学知识,为其他同学提供技术支持;培养学生的“软件设计模式分析与应用能力”,即选择适合的设计模式,利用设计模式的具体实现技术解决特定软件设计问题,并完成设计方案的权衡优化。最终,通过本课程的合作性学习和实训,为学生今后设计并实现具有一定水准的规模化复杂软件项目奠定相关知识和能力基础。
2.2 教学内容安排
2.2.1 课堂讲授内容
以Erich Gamma等4人编写的经典设计模式书籍[2]为课程教材,以参考文献[6]为主要参考教材。课程学时安排包括教师课堂讲授8学时,教师参与的课堂合作性学习40学时,教师不参与的课外合作性学习没有强制学时要求,建议不少于24学时,即一次合作性学习为3学时,至少合作性学习8次。课堂讲授内容及学时安排见表1。
2.2.2 合作性实训环节设计
实训环节是合作性学习驱动的课程改革的核心,是整个教学活动的重点和达到教学成效的关键。本文所提出的合作性实训环节的设计从三个层面开展。
(1)建立合作性学习小组。小组成员构成采用“种子同学+角色同学+其他同学”的方式,通常由4~6人组成。将程序设计能力强、专业成绩好的若干位同学指定为“种子同学”,每个合作性学习小组包含1~2位“种子同学”;每个学习小组还要自主选择1位“角色同学”,要求这位同学具有非常好的表述能力和沟通能力,是合作性学习小组的“新闻发言人”;其他同学按照兴趣参与到不同的合作性学习小组中,每位同学可以评估自身能力参与到多个小组中,特别在“种子同学”参与其他小组的合作性学习时,身份等同于其他同学,每个同学建议只承担1次“种子同学”或“角色同学”的任务。
表1 课堂讲授内容及学时安排
(2)教师不参与的课外合作性学习过程。本课程教学内容覆盖设计模式教材中的至少20个设计模式(注:可根据学生人数进行设计模式个数的适当增减),每个学习小组将完成至少2个相关设计模式的合作性学习和实训。教师不参与的课外合作性学习主要是指学生以小组方式完成自主探索学习、交流理解及编程实训。针对每个设计模式,合作性自主学习内容包括4个方面:理解基于具体实例的设计模式意图及动机、结合示例代码掌握设计模式的类图结构(如抽象类与具体类的关联、客户端调用方式等)、定性分析设计模式的优势弊端及使用方式、编码实现采用设计模式与未采用设计模式软件程序的对比并比较设计模式应用效果(要求对比软件程序必须可运行、可测试)。教师不参与的课外合作性学习过程由每组的“角色同学”负责组织实施,由“种子同学”负责制定学习目标并评估学习效果,由所有同学以文档方式记录上述4个方面的学习成果,并制作成PPT,供教师参与的课堂合作性学习过程使用。建议设计模式的学习内容及学时安排见表2。
表2 合作性实训环节中设计模式学习内容及学时安排
(3)教师参与的课堂合作性学习过程。在合作性学习小组完成课外自主学习后组织实施,主要方式为每个小组课堂汇报所负责的设计模式自主学习内容(按2学时计),即以教师身份讲解一个具体设计模式,并接受组外学生的提问。教师负责指正错误、补充遗漏并点评学习成效。课堂汇报的重点就是课外合作性学习过程中完成的4个自主学习内容。
综上,课外合作性学习过程重在培养小组内的学生为深人系统学习一个具体设计模式而共同努力、相互激发、取长补短的自主学习能力,以及基于编程的设计模式应用能力和权衡优化代码设计的能力;课堂合作性学习过程则重在强化学生对非自主学习设计模式的深人理解与合作学习,培养小组间学生的知识讲授和经验共享能力。
从表2可知,合作性实训环节教学内容设计具有知识点覆盖广、可操作性和实用性高、学生易理解易动手等特点。合作性实训环节持续至少10个教学周,有助于学生持续、全面理解抽象的课程理论知识,并切实掌握重要软件设计模式的分析和应用方法,完成教学目标中“两类基础知识”的深人理解和“两种基本能力”的实际培养。
2.3 考核方式
“合作性学习”驱动的软件设计模式课程教学强化了自主合作实训环节是整个教学过程的重点,所以在学生成绩考核方式上,同样需要突出实训环节所占的比重。本文建议课程成绩考核的总成绩=期末考试成绩(不高于30%)+ 实训环节考核成绩(不低于70%)。其中,合作性实训环节考核成绩所占分值百分比、考核方式和要求见表3。
表3给出的合作性实训环节的各分项成绩是按照“基础分+提高分”的方式进行评定的,完成考核基本要求的可获得表中给出的基础分,而对具有一定创新性的学习报告、实现非常出色的对比程序代码以及精彩的课堂汇报都可以适当地加上一些提高分,但最终得分不超过基础分的1.2倍。这样既可以要求所有学生完成“两类基础知识”的巩固和“两种基本能力”的锻炼,又可以使思考深人、实践能力强的学生脱颖而出。
2.4 教学效果分析
软件设计模式课程改革的教学效果主要表现在两个方面。
从“教”的角度,教师通过合作性实训环节的效果可以更直观地发现应重点讲授对学生合作性自主学习产生重要影响的理论知识和方法,如软件设计模式指导原则中的里氏替换原则、依赖倒转原则、合成复用原则等,而课程涉及的其他知识可以通过学生合作性自主学习获得更扎实有效的学习成效,如具体设计模式动机、结构、适用性及应用方式等。这样,课堂讲授更具针对性和含金量,避免出现教师照本宣科的现象。
表3 合作性实训环节的考核方式、要求及成绩
从“学”的角度,学生在灵活考核机制的激励下,能够更好地发挥主观能动性和学习潜力,很多学生的实训作品具有很好的创新性。通过分析近3年期末考试成绩发现,成绩超过80分的学生数在逐年递增,不低于学生总数的40%,并且超过70%的学生能够在一个或多个方面获得提高分,说明合作性学习模式能够有效增强学生学习积极性和主动性。期末考试内容通常要覆盖绝大多数设计模式的知识点,但在学生答卷中并没有出现只能答对合作学习过的设计模式题目,而其他设计模式题目丢分严重的情况,说明课外和课堂两种合作性学习过程能够相辅相成,有效避免了学生只记得一两种设计模式的问题。在合作性实训环节表现突出活跃、得分较高的学生,总成绩也很高,说明学生通过有效持续的合作性学习实践,能够更好地理解并掌握课程理论知识和方法。此外,通过课堂讲解汇报和部分毕业、保研学生的反馈可以确认,学生能够在课程学时内提升软件设计模式分析和应用能力,为学生后续学术深造或技术工作奠定了扎实的软件设计知识和能力基础。
3 结 语
“合作性学习”驱动的软件设计模式课程教学有助于学生利用高强度、持续开展的合作性小组学习及实训来更好地理解抽象的理论知识,同时有效地提升学生主动探索性学习与知识分享能力和软件设计模式分析及应用能力。
[1] Khwaja S, Alshayeb M. Survey on software design-pattern speci fi cation languages[J]. ACM Computing Surveys, 2016, 49(1): 1-35.
[2] Erich G, Richard H, Ralph J, et al. 设计模式——可复用面向对象软件的基础[M]. 刘建中, 译. 北京: 机械工业出版社, 2002.
[3] 张利军. 开设设计模式课程的探讨[J]. 计算机教育, 2010(4): 66-68.
[4] 黄洪. PBL的改进及在“软件设计模式”课程教学中的应用研究[J]. 计算机教育, 2008(8): 56-57.
[5] 刘振环, 白非.大学教学模式的重构——基于合作性学习的理念[J]. 教育教学论坛, 2012(16): 100-102.
[6] 刘伟. 设计模式[M]. 北京: 清华大学出版社, 2012.
(编辑:史志伟)
1672-5913(2017)01-0105-05
G642
国家自然科学基金(61262017)。
刘靖,男,副教授,研究方向为软件测试、云计算,liujing@imu.edu.cn。