项目驱动的Java课程研究性教学实践
2014-07-02孙丽张利锋岳峻
孙丽 张利锋 岳峻
摘要:针对目前Java教学中以知识点为线索的教学模式导致学生解决实际问题的能力不足的情况,介绍将项目驱动的研究性学习理念引入Java课程教学中的实施过程和评价方法,阐明项目驱动教学模式对软件工程能力培养的显著提高作用。
关键词:Java程序设计;项目驱动;研究性学习;教学改革
0 引言
目前,高校计算机编程人才的培养模式与软件企业对开发人员的技能需求之间尚存在一定的差距。软件工程类应届毕业生的实际动手和编程能力普遍不能满足企业需要,企业更希望毕业生能立刻参与到项目中为企业带来实际的生产力,而不愿意花额外的培训成本,所以他们对有过软件设计、开发经验的毕业生较为青睐。导致这一问题的原因是多方面的,但教材和教学方法无疑是最为重要的两个方面。已有的教材往往根据一个个孤立的知识点设计例题和练习题,导致学生在学习完课程后虽然掌握了各个知识点的作用,却不能很好地理解它们的应用场景,无法将知识点融会贯通并应用到实际问题的解决中。这些知识点如同一个个齿轮,学生即使掌握了每个齿轮的作用,但仍然无法根据需求将其装配成用户需要的机器,而且,Java程序设计课程也一直沿用传统的讲授模式。要改变这种局面,就必须从课程设计和教学方法人手,以实际的项目为牵引,统筹各个知识点,提高学生的学习兴趣、学习主动性和知识的应用能力。
1 研究性教学的关键是师生角色的转变
软件开发是一项充满挑战的创造性劳动,不断地主动学习是从事软件开发人员的基本能力和素质,而研究性教学正是培养学生这种自主学习能力的理想方法。当然,研究性学习给学生带来了学习的乐趣、动力,也带来了挑战。要实现研究性教学,就必须实现角色的转变,充分认识师生合作的重要性。长期以来,在教与学、师与生的关系中,始终存在这样的误区:课堂教学布局以教师为中心,学生思维的培养是同向思维,学生的学习方式也是接受式,很少有体验式学习,更没有研究式学习。而学生也惯性地认为,老师先生于我,必先学于我,凡疑问只问老师。而从学习的走向和趋势看:获得知识本身已经不是最重要的了,重要的是如何获得知识,这已上升为教师教学的出发点和最高目标。在学生思维方式的培养上,强调学习的平等性,注重激发学生的主动性思维,鼓励学生质疑和刨根问底。教师给出问题,由学生与教师共同找出问题的解决方案而不是由教师提供现成的答案。教师与学生是合作伙伴的关系,是项目经理与程序员的关系,也是用户和软件工程师的关系。
综上,研究性教学模式下,Java程序设计课程中教师的主要任务是:设计难度适中、有实际应用背景的开发项目;将项目的开发过程投影到课程的主要知识点中;帮助学生理清项目需求和解决思路,整合各个知识点中的实验内容,形成项目框架;帮助学生分析可能遇到的问题,并共同讨论解决的方案,建立解决问题的信心;向学生推荐相关的书刊、网址和论坛等;为学生做好各项服务,包括知识上的、思想上的和实践上的。因此,研究性教学对教师的素质及能力的要求也相应提高。教师应在学生学习及项目开发的过程中当好指导者、激励者和引路人的角色,这就要求教师应该具有一定的项目开发经验,能够从项目经理的角度对项目进行总体规划;从程序员的角度对程序进行具体分析与评价;从用户的角度来客观评价软件的人性化与实用性程度。否则,当遇到软件开发的实际问题时将难以做到正确的指导。
2 Java课程研究性教学的实施
2.1 建设学习资源仓库,提供多渠道知识来源
研究性教学的形式与内容是开放的。因此,优质的教学资源是实施研究性教学的重要保障,笔者持续跟踪Java语言发展的最新动态,不断丰富和补充Java课程的教学资源,以提供研究性教学需要的资料和信息。几年来笔者建设了一个资源相对丰富的FTP服务器,为学生提供各种学习资源,包括各种参考书、视频讲解、项目文档、问答记录等,并推荐相关的著名论坛。
2.2 精心设计教学内容,项目驱动不断演进
Java语言课程的学习重点是突出实际动手解决问题的能力,如果学生在学习过程中带着具体问题、具体任务,那么学生的学习目的就很明确,知识点的应用场景就能得到实际的操练。因此,在教学过程中,笔者转变了教学的总体思路,整理出切合实际的典型案例和项目,并使之成为贯穿整个教学的一条主线。这些案例都具有较强的实际应用价值,能够模拟真实的环境,学生在分析案例、解决问题的过程中,会自然地与所学知识进行融合,而解决案例中较为复杂的问题,能够突破学生原有的知识范围,拓宽学生的知识领域,从而使学生学会综合运用知识灵活地处理各种各样的问题,提高项目的实际运作能力。这样使学生在不离开学校的情况下能在短期内接触并学习到一些不同类型的实际问题,以充实实践经验。
2.3 项目分解,迭代整合
Java语言课程不是单独设课,其传统实验教学模式是根据课程安排,分章节、分知识点设计一些基础性较强、突出验证语言特性的实验。这样的实验对巩固知识点的掌握有利,但内容往往缺乏灵感,思维较单一,容易遏制学生们的创新思维。笔者采用项目为中心的实验方式,把知识点融入到项目中,将项目分解到知识点的实验中,这样既解决了项目集中开发时间不足的问题,又有利于培养学生的大局观,能使其从整体上把握系统的构建和设计,了解Java这一特定语言的组成规则和运转规则,实现业务“零距离”,提高其工程性意识及工程性设计能力。随着课程的进行,笔者指导学生不断整合各个知识点的实验,构建项目的多个版本,并持续融合新的实验点,丰富项目的功能。根据Java程序设计课程的特点和实际情况,笔者在完成面向对象基础知识之后,就开始了项目的实施过程。通过系统性的Java实验,学生更容易领悟软件工程的思想,也更容易独立完成项目的设计与开发。
由于新设计的项目比单纯实验中的项目规模大得多,学生一时难以理解和接受,所以要较好地把握课堂实训项目的难度,并对这些项目进行合理的分解,循序渐进地向学生讲述需求分析、软件设计及软件开发过程。下面是一个项目设计的实例。endprint
项目名称:即时通讯工具MyQQ。
项目需求描述:设计一个学校内部使用的简易的通信工具MyQQ。
要求实现如下功能:人员列表(人员信息)已经存在于文件friends.txt中;人员有2种类型:学生、老师;他们分别显示不同的信息,学生的信息有姓名、班级、电话,而老师的信息有姓名、所授课程、上课地点;文件保存格式:学生为人员类型、姓名、班级、电话,老师为人员类型、姓名、所授课程、上课地点。能发送消息,接收消息;能够同时与多人聊天。
表1给出了项目MyQQ的知识点分解,而图1给出了对应的类图结构,在项目推进的过程中,要求学生自己绘制顺序图和交互图,以便更清楚地理解项目中各个部分的协同工作过程。
以项目为中心的实验教学在操作过程中会对学生进行多角度的培训,包括项目可行性分析、需求分析、系统设计或是测试维护等方面能力的培养。这也在无形之中加深了学生在计算机程序设计中的软件工程意识,将对日后企业项目的编码设计产生积极的影响。
2.4 以小组为单位进行项目开发和评价
每个学生独立完成项目虽然能锻炼学生独立承担项目的能力,但极大地增加了教师的工作量。同时,不同的学生,能力高低不同,学习进度不同,所获资源也不同,因此,对知识的认识层次也有差别。笔者将若干名学生分组,让其协作完成一个项目,这样,不仅可加强学生之间的交流、提高项目实施的成功率,还可增强学生的自信心。教学中笔者发现,通过学生之间的交流、沟通和争议,不但能使资源共享,还能产生新的教育资源。因为,优秀学生灵敏的悟性和良好的学习技巧,不同层次的学生提出的各种问题,学生的不同智慧,不同的思维方式等都可以成为小组内相互共享的学习资源。
在项目题目确定后,根据学生的选题情况进行分组,每组6~8人。然后,以小组分工协作的方式由组长协调方案(比如代码编写风格、注释风格、版本控制等),并控制项目进度和完成质量。对于每个部分,组内同学先按照自己的理解提出设计方案,经过组内讨论后再编码,这样可以避免重复工作。
当任务基本完成时,就进入结题评价阶段。各小组在教师的指导下汇总整理项目资料,并制作演示文稿,准备项目展示和答辩。指导教师对研究成果进行评价,总的原则是肯定和鼓励为主,重过程轻结果,并对项目的成果进行答辩,根据项目各个环节的完成情况进行打分。项目评价表如表2所示。
答辩的过程同时也是相互交流的过程,“独学而无友,则孤陋而寡闻”。学生分享项目开发中遇到的困难和解决方案,可以锻炼学生的文案组织能力和表达能力。通过相互交流,一方面通过展示项目成果形成竞争氛围,另一方面也扩大了大家的知识面,增加了解决问题的经验。可以说,持续不断的交流是研究性学习一个必不可少的环节,也是项目成功的重要保障。
2.5 建立以过程为中心的课程考核方式
以前,Java程序设计的考试是以闭卷的方式进行,以最后的试卷分来评定学生的期末成绩,缺乏实验教学的考核标准。这样的分数只能反映出学生对知识点的掌握程度,却不能很好地体现学生实际的编程能力和对问题的分析能力。所以,近两年笔者一直在探索Java课程的考核方式,也取得了一些成效。将学生研究课题的完成质量、项目答辩成绩、实验完成情况作为考核的重点,以项目答辩结合平时实验的考核情况代替闭卷考试,不但可以引导学生重视编程实践,而且提高了学生学习的积极性和主动性。
3 结语
项目驱动的研究性教学是一个教学相长的过程,通过多轮教学实践的摸索,笔者发现学生在层次上、知识的掌握度上、编程能力的高低上大相径庭,所以项目难度和复杂度的选择和设计要有一定的区分。同时,在项目推进的过程中,教师要扮演好项目经理的角色,给有潜力的学生增加需求,进一步完善项目。对于进度不同、项目难易程度不同,在考核时需要说明,在考核成绩上要有所体现,激发优秀学生的潜力并塑造学生的成就感。
当然,项目型驱动的实验教学增大了教师的工作量,对教师的工程实践能力也提出了更高的要求。在具体实施过程中,项目案例可以进行循序渐进的设计,不断积累和完善。在实施过程中笔者也惊喜地发现,研究性教学激发了学生的求知热情,不少同学提出了一些很有价值的想法甚至建议,展现了很强的创造性。他们在参与开发过程中查阅资料、自学有关理论、请教高年级同学,这表明学生渴望自主探索、自主发展,也渴望表达个性。另一方面,学生热情和积极的参与也极大地推动了教师的教学热情,增强了教师的改革意识和教学的创造性。因此,笔者认为,Java程序设计的项目驱动教学方法是一次成功的尝试,在今后的教学实践中需不断完善,不断增加新的项目案例,让更多的学生从研究型教学实践中获益。
参考文献:
[1]金义富,胡文泰,杨志华.地方院校计算机类专业人才培养模式探讨[J].湛江师范学院学报,2001,22(6):100-103.
[2]王素文.大学教学中的研究性学习:特点与模式[J].教育发展研究,2007(12):29-32.
[3]屈波,程哲,马忠.基于自主性学习和研究性教学的本科教学模式的研究与实践[J].中国高教研究,2011(4):89-91.
[4]朱小英.Java实验教学改革[J].考试周刊,2008(13):2-3.
[5]余远富,王庆仁.高校研究性教学评价体系的构建[J].高等工程教育研究,2011(6):111-115.
(编辑:孙怡铭)endprint