启发式程序设计实训探索与实践

时间:2022-06-17 03:29:32

导语:启发式程序设计实训探索与实践一文来源于网友上传,不代表本站观点,若需要原创文章可咨询客服老师,欢迎参考。

启发式程序设计实训探索与实践

随着以工业互联网为代表的“第四次工业革命”的到来,以及“新工科”概念的提出,国家对工科学生的创新实践能力的培养提出了新的要求[1-2]。对于软件工程专业的学生而言,利用编程语言编写软件程序来解决实际问题是必须掌握的一项基本能力,然而在学生学习编程的过程中,依然存在着重理论轻实践的现象。首先,目前的教材多偏向于理论讲解且缺乏导向性[3],绝大多数教材中的示例比较乏味,而且脱离实际,以至学生不愿意主动去动手实践。其次,课堂教学受场地、设备等限制,往往只能采取讲授式教学。这种教学方法不能有效调动学生的学习积极性,导致学生能理解理论知识,但是实践能力还是没有得到锻炼[4]。最后,学生为了取得高绩点,主观上更愿意将精力放在理论的记忆和理解,而忽略了实际编程能力的训练,导致许多学生考试能得高分,却仍然不会编写程序。针对以上问题,一些教师将项目案例引入程序设计的教学过程中,对激发学生编程兴趣起到了促进作用[5-6],但是这些方法只是对课堂教学的一种补充。为了进一步提高学生的编程实践能力,越来越多的高校将程序设计实训作为一个独立的实践环节加入培养方案中。重庆大学软件工程专业将程序设计实训作为大一年级的专业必修课,作为实践教学体系中重要的一环[7]。

1程序设计实训实施现状分析

1.1程序设计实训的目标。学生在进行实训之前已经初步掌握了面向对象的程序设计思想以及基本的编程理论知识,通过实训,学生需要达到以下目标。(1)学生应理解面向对象程序设计的基本知识,掌握面向对象分析问题的基本方法。(2)学生应该具有运用一种主流程序开发环境(如MicrosoftVisualStudio),将面向对象分析简单问题并将其转化成C++语言代码的能力以及跟踪调试程序错误的能力。(3)学生应具备运用面向对象的思想分析实际问题,并将其进行编程实现的能力。1.2程序设计实训中存在的问题。(1)学生习惯了课堂教学中,教师讲授为主的授课方式,在实践环节中往往表现出主动性不强,过于依赖老师的指导。(2)学生缺乏将实际问题转换成代码的能力,同时也缺乏调试代码和独立解决程序错误的能力。(3)对学生的实训结果评价方式单一,导致学生又回到了以成绩为目的的应试思维模式,使得学生对实践能力的培养失去信心[8]。1.3问题的原因分析(1)学生第一次接触实践类课程,还不适应新的教学内容和教学环境,过于依赖老师的指导[9]。因此,教学方式一旦由老师教授,变为独立开发,就感到无所适从。(2)实训所涉及的项目除了需要用到面向对象程序设计的知识,还需要用到图形编程,网络通信以及数据库等知识。而这些知识并没有在大一的时候学习,因此对部分学习能力较差的学生造成了障碍。(3)学生还保留着高中时期的应试教育的学习习惯,还以考试为目的来学习。对于实训的认识不足,还是以分数为导向,忽略了自身实践能力的培养。

2项目驱动的启发式程序设计实训方法

2.1设计以兴趣激发为目的的实训项目案例。实训项目作为程序设计实训的重要依托,既需要涵盖一定范围的编程知识,又需要激发学生的兴趣。根据程序设计实训的课程目标,结合工程实践的特点,按每个人独立完成一个项目的要求,保证每位学生具有一定量的代码编写量;项目类型以基本单机应用、图形化界面等方面为主。结合学生基础和具体课程安排,拟定实训项目供学生选择。实施的时候将根据学生的测评成绩、兴趣方向等进行选择。表1中列出了部分实训项目案例。这些案例都是根据真实软件项目经过简化后的仿真项目。可以让学生真切地感受到从无到有的软件创造过程,将看不见摸不着的理论学习,变成可以得到实实在在成果的软件项目,从而让学生获得较大的成就感和自信心。2.2采用结合线上多媒体知识补强和线下项目实践的实训方案。为了有效对实训中涉及的知识进行补强,将程序设计实训分为2个阶段:线上知识补强阶段与线下项目实践阶段。2.2.1线上知识补强阶段。在进行实际的项目实训之前,利用网络资源,包括PPT课件、课程视频、慕课等多媒体技术,提前学习实训中所需要的知识。通过一个小课题的实践,结合理论知识的讲解,快速掌握项目开发必备的知识和技能。知识补强以边学边做的形式,避免学习的枯燥,提高学习兴趣和效果。同时,小课题的练习将极大地提升学生的学习信心,对后面的项目实践起到较好的示范作用。从而有效弥补学生实际能力与实训任务之间的鸿沟。2.2.2线下项目实践阶段。在此阶段学生将通过9天的线下项目实践,完成自己所选项目的任务。在实施过程中,通过以下步骤对学生的实训过程进行有效推进和管理。(1)学生根据自己的兴趣自由选择项目。(2)结合项目阶段需求进行重点和难点的理论讲授,同时结合项目进行练习,边学边练、学以致用,减少纯理论授课的枯燥感觉。(3)按照软件能力成熟度集成模型(CapabilityMaturityModelIntegration,CMMI),开展软件工程实践。学生将结合软件工程的理论知识和CMMI项目管理流程,逐步加强系统分析和设计建模能力,完成从项目启动到最后验收交付的全过程。(4)使用任务管理工具,明确个人的项目任务。在任务管理工具中记录任务完成情况,并以任务完成情况作为个人的考核。(5)通过网络提供有关的课件、视频、知识库等资源,使学生可以通过这些渠道学习、温习课程内容,加强对技术的掌握,加深对项目的理解。(6)通过现场指导老师每天的任务检查跟踪,查看学生日志,及时发现存在的问题并予以解决。通过阶段性评审和总结,使学到的知识和技术得到巩固。2.3建立多维度的程序设计实训的评价方法。鉴于程序设计实训的特点,需要改变单一评价方法。通过建立一种多维度的案例教学评价方法,打破学生一直以来的应试思维。该评价方法主要由过程监督及项目评价两个部分组成。1)过程监督。过程监督主要由出勤情况、日报制度、项目总结3方面组成。(1)出勤情况。实训的地点由学院统一安排,学生每天需要准时到达实训教室。学生的出勤情况直接反映出学生的学习状态,对于经常迟到、早退以及缺勤的学生及时纠正,并将出勤情况计入最终成绩。(2)日报制度。让学生每天将实训的进展情况形成日报的形式,总结当天的进展及存在的问题,制定第二天的计划安排,从日报中发现学生的总体进展情况。(3)项目总结。学生在项目完成后,需进行项目总结,评估实训成果,并以此收集学生反馈意见。2)项目评价。在完成了整个实训后,通过项目验收,完成项目交付。项目验收包括对代码规模、功能实现、文档质量等方面的验收。验收的结果与考核密切相关。对学生的项目主要从如下10个维度进行评价。功能:功能完整、准确,符合应用需求;界面:界面设计美观,符合规范;技术:应用最新技术,技术难度高;创新:是否有创新点;演示效果:讲解清晰、演示流畅、重点突出;文档:符合规范,主要是需求、设计、用户手册等文档;规模:代码数量、数据库记录数量;易用性:软件易于理解、学习和使用,如完善的表单验证等;可靠性:出错率低、容错性强、易于恢复;可维护性:可适应不同场景进行灵活设置,易于识别错误和改正等。

3项目驱动的启发式程序设计实训实施效果

将实训方法应用到重庆大学软件工程专业2017级大一本科生的程序设计实训中,取得了较好的效果。通过问卷调查的形式,了解了学生对实训效果的主观评价。本次发出问卷189份,收回144份,有效问卷133份。1)学生对实训的总体满意度。学生对实训的总体满意度如图1所示。该问题是针对学生对实训情况的总体评价,评价指标分为5个等级:非常满意、满意、一般、不满意、非常不满意。从图1中可以看出,“非常满意”加上“满意”为78%,说明学生对本次实训总体上是认可的。2)学生对自己编程能力的评价(满分5分)。学生对自己编程能力的评价如图2所示。该问题旨在通过量化的方式让学生对自己实训之前和实训之后的编程能力进行自评,评价指标由低到高分为1~5分。从图2(a)中可以看出,在实训前认为自己编程能力只有1分或2分(即编程能力较差)的学生总共占到了53%。而从图2(b)中可以看出,实训后认为自己编程能力只有1分或2分的学生仅占到8%。说明大部分认为自己编程能力较差的学生在实训后编程能力都得到了较大提升。图2(c)中,反映了学生编程能力的提升幅度,其中有82%的学生认为通过实训,自己的编程能力有不同程度的提升。通过分析具体的数据,我们发现在能力提升了2分和3分的学生中,大多是实训认为自己编程能力只有1分或2分的学生。说明通过实训,对于不擅长编程甚至畏惧编程的学生,编程能力得到了较大的提升。当然从图2(c)中,同样可以看出有18%的学生认为通过实训,自己的编程能力没有得到提高。通过具体数据分析,我们发现这部分学生大都在实训前就有4或者5分的自评分,说明他们在实训前已经拥有了较好编程能力。因此实训对于这部分学生的编程能力提升不明显。3)学生对线上知识补强的评价。学生对线上知识补强的评价如图3所示。该问题旨在分析线上知识补强环节对学生的帮助有多大,评价指标同样分为5个等级:帮助非常大、帮助比较大、有一定帮助、帮助比较小、没有帮助。从图3中可以看出,87%的学生认为线上知识补强对自己有不同程度的帮助。4)学生对项目选题的难度评价。项目选题难度的评价如图4所示。该问题旨在了解学生对所做项目的难易度进行评价,评价指标分为5个等级:非常难、比较难、适中、简单、非常简单。该问题实际上存在两个影响因素,一个是项目本身难易度,另一个则是学生自身的能力。即使同一个项目,对于不同的学生可能得到不同的评价结果。从图4中看出,41%的学生认为项目选题具有一定难度,55%的学生认为项目选题难度适中。说明项目选题具有较好的区分度,且学生可以根据自身情况,灵活选择不同难度的项目。5)学生对所选项目的主观评价(多选)。学生对所选项目的主观评价如图5所示。该问题为多选题,旨在了解学生对项目属性的评价,一共有4个选项:有趣的、实用的、创造性的、新颖的。由于选项无法穷尽,题目中仅列出我们关心的几个选项。从图5中可以看出,认为项目是有趣的学生多于其他选项,说明项目的案例设计达到了激发学生兴趣的目的。同时也有接近一半的学生认为项目是实用的。说明学生在选择项目时也关注项目的实用性。6)学生对项目评分机制的评价。学生对项目评分机制的评价如图6所示。该问题旨在了解学生对评价机制的认可度,评价指标分为5个等级:非常合理、比较合理、一般、不太合理、非常不合理。从图6中可以看出,91%的学生对项目的评分机制是认可的,对评价机制不满意的学生仅占1%。说明多维度、全过程监督的项目评分机制能够有效地对学生的知识、能力、素质进行有效的评价。综上所述,大部分学生对实训效果感到满意。大部分学生都认为通过实训自身的编程能力以及解决问题的能力得到了较大的提高,而且对编程不再畏惧,反而越来越感兴趣,同时也十分认可项目的评分机制,说明本项目达到了预期的效果。

4结语

目前软件工程专业的学生在学习程序设计时,普遍存在注重理论学习,而实践能力不强的问题。针对这一问题,许多高校将程序设计实训加入到了软件工程专业的培养体系中,以提高学生编程实践能力。结合重庆大学软件工程专业在程序设计实训中的实际情况,提出的一个项目驱动的启发式程序设计方法,通过让学生独立完成一个真实的程序设计项目来激发学生兴趣,从而锻炼学生的编程能力。实训过程采用模拟企业环境的管理方式,并采取多维度的方法对学生能力进行综合评价。通过对学生进行问卷调查分析,该方法受到学生普遍认可,并能有效提高学生程序设计能力。

作者:曾骏 文俊浩 熊庆宇 吴映波 单位:重庆大学