宋丽华 赵永升
鲁东大学信息与电气工程学院 山东烟台 264025
数据结构是计算机程序设计的重要理论和技术基础,对于计算机相关专业学生解决现实问题的能力以及学习后续的操作系统、计算机网络、算法设计与分析等专业课程起着非常重要的作用。
由于数据结构讨论的是非数值计算问题,内容多又较抽象,再加上学生只具备程序设计的基础知识,还不能熟练使用所学知识解决具体问题。特别是理论与实践的联系不够紧密是较为突出的问题,学生实践少,与主讲内容脱节。数据结构课程的特点是根据问题选择合理的数据结构,高效地解决问题。课上所讲授的知识绝大部分内容均可通过上机实现,有些内容,教师在讲授的过程中可以编程完成,而有些内容需要学生在课余时间继续完成。但由于种种原因,部分学生完成课上的学习内容后,由于缺乏学习兴趣,没有在课余时间抽出时间和精力自主学习,造成学生动手能力差和实践能力不突出。因此,加强实践教学是提高数据结构教学质量和效率的有效手段。
针对以上存在的问题,结合数据结构课程的特点,在应用型人才培养改革中实施了数据结构的教学改革。结合教育部对教育信息化的规划要求,积极探索STEM教育,并针对课程特点积极探索CDIO教学模式,本文将对在数据结构实践课程的一些探索进行总结。
2016年教育部出台的《教育信息化“十三五”规划》中明确指出有效利用信息技术推进“众创空间”建设,探索STEM教育、创客教育等新教育模式,使学生具有较强的信息意识与创新意识,养成数字化学习习惯,具备重视信息安全、遵守信息社会伦理道德与法律法规的素养[1]。
STEM教育研究最早起源于美国科技促进协会(AAAS)在1985年发起的一项致力于改革美国科学、数学与科技教育的长期研究计划—Project 2061,将科学、数学及科技三大领域分立的知识体系与日常生活联系,为学生提供更多应用数学或科技的机会,解决传统教学无法了解数学、科学与科技间的彼此关系的问题[2]。STEM教育聚焦了科学技术的应用与创新,关注学生创新精神和实践能力的培养,成为当今世界课程改革的新方向。不仅是把科学、技术、工程和数学知识进行简单叠加,而且特别强调将本来分散的4门学科自然地组合形成新的整体。更好地帮助学生不被单一学科的知识体系所束缚,促进教师在教学过程中更好地进行跨学科融合,鼓励学生跨学科解决真实世界中的问题。培养学生科学思维、理性思维,把科学和理性融于生活。通过动脑、动手促进学生健康、快乐地成长,培养学生的创新思维、实践能力和知识的积累能力,使学生成为具备良好的多学科知识、综合应用能力的创新人才。
CDIO工程教育模式是近年来国际工程教育改革的最新成果。CDIO代表构思(conceive)、设计(design)、实现(implement)、运作(operate),它以产品研发到产品运行的生命周期为载体,是让学生将实践与课程之间有机联系的主动学习工程。CDIO培养大纲将工程毕业生的能力分为工程基础知识、个人能力、人际团队能力和工程系统能力4个层面,大纲要求以综合的培养方式使学生在这4个层面达到预定目标。CDIO的理念不仅继承和发展了欧美20多年来工程教育改革的理念,更重要的是系统地提出了具有可操作性的能力培养、全面实施以及检验测评的标准。该标准对整个模式的实施和检验进行了系统的、全面的指引,使得工程教育改革具体化、可操作、可测量,并对学生和教师都具有重要指导意义。CDIO体现了系统性、科学性和先进性的统一,代表了当代工程教育的发展趋势[3]。
针对数据结构的课程特点,结合对计算机相关专业学生的实践能力要求,在教学模式、观念、方法、考试等方面进行了改革,以提高学生的分析、解决复杂工程问题的实际能力。尤其是实践教学过程中,注重结合STEM教育,融入CDIO工程教育模式,加强实践环节中实践项目的设计构思,充分考虑实践项目的趣味性,贴近生活;通过兴趣调动学生的积极性,对具体的实践项目进行分析,按照工程观点分解项目任务,细化构思,进而设计相应模型和结构,并对结果进行预期分析,最终实施完成并进行综合评价;让学生主动参与从理论到实践的转化过程中来,并在实践中培养学生的团队意识和创新能力。
数据结构实践教学主要包括课程实验和综合设计两部分。课程实验主要要求学生对各种数据结构的基本操作进行编程验证,综合设计则是对学生分析问题、设计解决方案、编程能力和测试能力的综合训练。
由于课程实验主要以验证型实验为主,为激发学生的实践兴趣,进一步培养学生的应用实践能力,在实验环节适当增加设计型实验项目的比重。例如,在队列的基本操作中,要求学生利用队列的基本操作实现舞会舞伴配对问题;在树的操作中,建立一个家族的族谱,要求根据给定的某个人的信息,找出该人的所有祖先等。对每个实验都有具体要求,并鼓励学生利用课余时间多实践,每次试验结束后要求学生完成实验报告及调试分析、算法的效率分析,为将来进行软件开发打下坚实的基础。在综合设计中,设立一些项目锻炼学生综合分析问题、解决问题的能力。可以搜集学生感兴趣的题目,并且收集毕业生在工作中用到的数据结构知识,组成项目案例库,为学生提供实践项目。也可以选择专业竞赛、创新实验项目作为综合设计题目。例如,在讲授树结构的问题时,可以增加如下的问题。
诗人李白一生好饮。一天,他提着酒壶,从家里出来,酒壶中有酒两斗。他边走边唱:无事街上走,提壶去打酒。逢店加一倍,遇花喝一斗。这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则babaabbabbabbbb就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数。
该问题是蓝桥杯程序设计大赛的真题,对于问题的求解可以采用多种策略,其中最关键的是解空间的有效组织。在介绍树的知识时,引入该问题,可以让学生进一步理解树形结构在实际生活中的应用,也让学生在学习这种数据结构时不再枯燥。
数据结构课程内容大部分属于抽象理论教学,学生对于数据的存储及存储结构看不到、摸不着,学习较吃力。考虑到课程本身的难度,为了使学生更好地学好本课程,在实践教学环节采取分层教学与评价,根据教学目标对实践内容精心设计,尽可能让不同层次的学生都能对所学知识进行强化训练,以达到巩固知识的目的。对于精选的实践题目,可以设置多问,难度逐步增加。编程能力稍差的学生可完成较为简单的基础题,即能使学生稍加努力便能完成,又能体验到成功的喜悦,更进一步巩固基础知识。对于一些操作,给出部分详细设计,使学生增强用程序实现算法的自信心,继而模仿编程,最终实现将理论知识应用到解决实际问题中,提高其应用能力。例如,利用栈实现括号匹配问题,给出表达式中只包含小括号的情况,然后要求学生完成表达式中含有3种括号的情况。对于编程能力一般的学生,要在大纲标准要求的基础上,适当拔高,以提高解决具体问题的能力。对于喜欢编程又肯钻研的学生,要广泛调动其积极性,挖掘其潜能,提高要求,引导其尽可能完成难度较高的问题,使其既发挥了自己的特长,又锻炼了独立分析问题、解决问题的能力。建立分层评价机制。教师对学生的评价具有导向、激励的功能。在教学过程中对不同层次的学生可以不同起点为标准给出相应评价,这样能使学生建立自信,有利于激发学习的积极性。采取分层评价机制还能形成一种“你追我赶”的学习氛围,共同提高学习成绩和学习效果。也可以采用小组合作方式完成综合性较强的项目,既锻炼了学生的思考问题、解决问题的能力,也学会了团队合作精神。
任务驱动教学法是一种以“任务为主线、教师为主导、学生为主体”的教学方式,主要体现在以下3点。(1)教学内容被巧妙地设置在具体的任务当中,学生带着真实的任务学习。(2)学生拥有学习的主动权,在教师启发式的教学方式下自主思考、分析、解决实际问题。(3)教师不断地引导、激励学生,帮助学生完成教学内容。
通过任务驱动教学法来改进数据结构实践教学,提高学生对知识的综合运用能力[4]。如在求最短路径的项目中,设计了一个具体事例,要求大家作为新生入学向导志愿者引导新生及家长考察图书馆、主要的几个学生餐厅、教学楼、宿舍楼、活动场所等,并在引导过程中进行情况介绍。这就要求学生开动脑筋、查询相关资料,并根据学校内部的道路情况设计一条理想路径。由于案例贴近学生具体生活,学生都很踊跃参与到讨论分析过程中,在路径设计方面甚至不仅考虑距离远近问题,还考虑到作为向导要完成的任务,还可能考虑到几方面的加权问题。引导学生将问题转化成数据结构中的求最短路径问题,通过分析,可以将每个地点作为图中的一个顶点,若从一个地方到达另外一个地方,可以利用求源点到其他各顶点的最短路径方法解决问题。学生既在此过程中增长了人文见识,又学会了知识点在实际生活中的应用。
由于课程教学尤其是实践教学改革引起了学生的兴趣,了解了相关知识点在实际生活中的应用,从简单到复杂,调动了学习积极性,教学效果得到改善与提高。与此同时,有效利用ACM、蓝桥杯大赛和学校对应的奖励政策组织部分学生组成学习小组、参加大赛,近两届学生成绩在不断提升,已经取得省赛、国赛的一等奖、二等奖。通过实践验证,课程改革的效果良好,同时实践课程的创新改革也带动了整个课程的进步,课堂气氛活跃,问题讨论热烈,学生的学习积极性得到了很大提高,真正做到了教与学的良好互动,提高了教学质量。