项目教学法在程序设计实践课程中的应用
2010-03-27朱旻如郭剑朱立华
朱旻如 郭剑 朱立华
(南京邮电大学计算机学院,江苏南京210003)
1.引言
鉴于程序设计能力在计算机人才培养中的重要性,各个高校愈来愈重视程序实践课程。在课程设置上,程序设计能力的培养主要从三个方面进行:一是通过计算机语言如C、C++、JAVA的学习,使得学生基本掌握程序设计的原理和方法以及相关的程序开发工具,初步理解程序设计思想;二是通过数据结构、程序设计实践培养学生实际解决问题能力和动手能力,进一步加深对程序设计思想的理解,领悟程序设计方法;三是通过W indows程序设计、ASP.net程序设计等选修课,帮助学生完成程序设计能力的自我实现[1]。
而我校C/C++程序设计课程除了在理论教学过程中根据教学目标安排学生完成相应的实验,更在本科二年级安排了为期两周的程序设计实践集训,用于完成综合性、较大规模的程序。但是这两周的程序设计常常是有悖于初衷,学生以为只是一次综合实验,参考的也仅仅是以前学习的教材,学习积极性不高,抄袭现象严重。
为此,我校在程序设计实践环节中引入项目教学法。基于建构主义的项目法和传统教学法有很大差别,强调以学生为中心,以“项目”为导向,以“基于问题的解决”去引导学生进行相关知识的学习[2-4]。在程序设计实践中,学生已具备相应的语法知识,他们缺少的是知识的融会贯通,缺乏独立探索、进一步自主学习的能力,缺乏对完整项目各个环节的把握能力和切身体验,项目教学法正好可以弥补这些缺陷。
2.项目教学法的组织
这两年我校逐步在各个专业的程序设计实践课程中引入项目教学法,使学生能以项目为核心完成软件设计的综合训练,培养了程序设计整体思想,锻炼从问题的分析、总体框架设计、代码实现、测试到项目展示等一整套的实践能力。具体的实施过程如表1所示,程序设计的每个阶段都有明确的任务和教学目标。
3.项目教学法实施细节
项目法的实施强调学生的主导地位,但是在项目实施前应充分考虑实施细节,以保证达到预期目的。
表1 项目教学的组织实施
3.1 分组
考虑到学生个体之间的差异,项目按分组形式进行,团队的形式有利于学生互相学习,避免了个别学生的畏难情绪。但是如果项目组成员过多,又会“意见不统一”,难以协作,甚至个别组员坐享其成。结合项目的工作量、难度和我校两周的实践周期,一般控制在3人左右,在项目组成立的同时选定组长负责组员的分工协作,保证项目的顺利执行。
3.2 课题的选择和设计
课题的选择应该是项目法教学过程中一个核心问题,除了要考虑到工作量、学生的兴趣、课题难度等等多方面因素,更应该结合对程序设计实践课程的目标,有针对性地设计课题。
作为计算机语言课程的延伸,安排在C/C++课程之后的程序设计,其教学目标不应仅仅停留在计算机语言知识的掌握,能力培养是这个阶段的重点。因此我们的教学目标设定如下:
(1)巩固加强课堂中学习到的计算机语言知识;
(2)理解面向对象或面向过程的程序设计思想;
(3)进一步培养计算思维能力,按照计算机求解问题的基本方式去考虑问题的求解,构建相应的算法和基本程序,并掌握常用算法的实现,如排序、查找等;
(4)引导学生独立探索,掌握文献检索、资料查询的方法,初步体验自主学习的成功;
(5)初步培养计算机程序设计技能,理解算法和数据结构在程序设计中的作用,掌握用计算机软件实现算法和数据结构的基本程序设计技能。
表2是我校的程序设计任务书示例,其中基本功能是必须完成的,而学有余力的学生可以在任务书的提示下进行深入的开发,满足不同层次学生的需求。该课题与实际应用关系密切,学生易于理解项目的背景知识,同时又涉及到C/C++课程中学习的主要要素:文件操作、菜单实现、数组或链表的存储结构、排序和查找算法等。
和常见的课题不同的是,每一课题都有要求学生自行设计的部分,如表2中试题的存储形式和成绩指标的设计。这部分的引入使得学生主动将日常生活经验与项目进行联系,同时利于学生展示个性化的内容,提高学习兴趣,培养学生的创造能力。如成绩指标设计上,学生刚开始非常直观地设计成答对一题得一个基础分,如10分,结果可想而知,当题目数量不一致时,成绩根本不能反映任何问题,于是会有进一步的设计,如引入答题时间、在题库设计时引入难度系数等……学生在设计的同时理解了实际应用和计算机程序之间的映射关系,并自主地学习了课堂上没有学到的知识,如时间的应用方法等。
3.3 考核方式
考核环节在程序设计课程中一直是教师比较头疼的问题,工作量的界定、程序的正确性、学生抄袭程度等难以给出客观的评价[5]。考虑到程序设计实践课程的教学目的重在学生综合能力的培养,因此没有必要准确地给出每一个学生的成绩。在项目法教学中,成绩是项目组的,项目组每一个成员都对项目的成败负有直接的责任。
在考核中引入答辩环节,不仅给学生提供自我展示的平台,激发学生的竞争意识,还有效地避免了抄袭的现象。比如表2的课题,在答辩过程中,要求项目组设计的成绩指标、试题存储等问题往往成为展示和提问的焦点问题,同学们的提问又引起如何保证随机抽取的题目在一组试卷中是唯一的,答题过程能否暂时中断等问题的思考。这些问题将在后期完成的程序设计报告中得到进一步探讨,学生的自主探索意识得到了有效的培养。
表2 程序设计任务书示例
3.4 教师的引导作用
在项目法教学过程中,教师的作用不可忽略。教师首先要选择合适的课题,创建协作学习的环境,并完成学习资源的建设工作。在项目实施的过程中,要适时给予适当的引导,比如分组时成员的搭配、设计过程中关键问题解决途径、答辩中项目完成情况和存在问题的点评等。可以说,项目法教学成败的关键在于老师自身的专业素养。为保证教学质量以及教学过程的顺利,要求教师在课程开始之前完成课题实施预案,对课题实施的目的和可能存在的问题有一定的预见性,如表3所示。
表3 课题实施方案
4.实施效果
通过这两年的实践,项目教学法在程序设计实践课程中的优势是明显的,表4是我校08级两个班中采用传统方法和项目教学法的成绩对比,表明项目法实施后,学生成绩得到提高,特别是成绩为“及格”的人数大幅减少。在教学过程中能明显感觉到:
(1)学生积极性提高。程序设计期间,小组成员之间的讨论非常热烈,不同层次的学生能主动参与,哪怕只解决一个小问题也非常具有成就感。
(2)完成的程序功能明显加强。为了展示自己的特色,每个小组都尽量完成可能实现的功能,例如表2中的“考试管理系统”在采用项目法后,学生除完成基本的试题库管理、学生管理、考试过程管理外,还注意到题库修改时必须经过密码验证、系统进入后可根据用户是教师或学生给予不同的使用功能等。这些充分体现了学生的自主思考过程,同时也大大丰富了题库的建设,为后续课程的开展提供了很好的素材。
(3)解决问题的能力加强。和以往依赖于教材不同,现在多数学生会去图书馆、教师提供的教学资源中寻求帮助,思维得到拓展。不少学生在程序设计中敢于尝试学习过程中让他们害怕的链表、教材中没有教过的算法、函数等,充分体现了学生的自信,也很好的培养了学生的自学能力。
(4)有效避免了抄袭现象。由于答辩环节的引入以及题目中要求的设计成分,抄袭几乎是不可能的,并且学生也不屑于抄袭,他们更热衷于展现自己程序的优点。
表4 对比数据
5.结束语
程序设计实践课程的关键在于培养学生的兴趣,使他们自觉主动地参与,项目教学法能提供一个较为合适的学习氛围,受到大多数学生的好评。但是,项目法的成功实施和教师自身的素质有直接的关系,在教学过程中教师需要不断地充实、学习,拓展自身的专业技能。
[1] 司友华,赵芸,罗显贵.本科院校计算机专业程序设计课程设置分析[J].合肥工业大学学报(社会科学版),2008(12):146~148.
[2] 郑涛,陈清华,周亚.程序设计课程教学模式的研究与实践[J].理工高教研究,2010(2):122~125.
[3] 储卫中.项目教学法在程序设计课程中的应用[J].计算机教育,2008(16):111~112.
[4] 孙庚.项目教学法在“C++程序设计”课程教学中的实践[J].计算机教育,2008(2):51~54.
[5] 郭伟,李文新.程序设计实习类课程如何准确考察学生学习情况[J].吉林大学学报(信息科学版),2005(8):99~103.