基于编程技能的Java课程教学创新与改革
2019-07-16亓晓静
摘 要:在大批普通本科高校向应用型本科转型的背景下,为了契合应用型人才的培养目标,提升学生的编程技能,福州大学至诚学院开设了“Java程序高级开发”课程,并以此课程为载体,开展教学改革,以实践教学为主线,以拓展训练为特色,将多种现代教育技术手段引入课堂,形成多元化的、混合的综合教学模式。
关键词:应用型本科;编程技能;实践教学;拓展训练
基金项目:2018年度福州大学至诚学院课程改革项目“Java程序高级开发”(项目编号:ZJ1831)
作者简介:亓晓静,女,副教授/高级工程师,主要研究方向为软件工程。
中图分类号:G712 文献标识码:A 文章编号:1674-7747(2019)06-0028-04
随着近年来一大批普通本科高校向应用型本科转变的办学方向改革,“以能力为中心”的培养模式已被大家广泛认可,福州大学至诚学院在向应用型本科转型过程中,经过全方位细致的走访与调研,把突出技术与实践应用能力作为培养为的核心,重新修订了各专业的人才培养方案。笔者以软件工程专业的“Java程序高级开发”课程为例,探索编程实践技能教学的改革与创新,以提高学生的技术应用能力。
一、“Java程序设计”课程现状
“Java程序设计”是大部分软件工程专业必修的一门课程,该课程主要有“面向对象基础”和“Java技术应用”两个部分的内容。作为面向编程学习的第一门课程,以往的做法是,将“面向对象基础”部分作为授课的重点,占用了总课时比例的60%~70%,导致“Java技术应用”部分的授课时间严重不足,技术应用能力方面的实践力度不够。学校为了弥补这一问题,从企业请来一线的工程师,安排了实训课程,希望通过工程师带来更贴近实际的项目实训,强化和提升学生的Java技术应用能力。但由于这样的实训项目通常综合应用了多项技术,而课堂上对“Java技术应用”部分的学习着墨不多,只停留在表面。學生普遍反应,如此直接面对项目实训,跨度太大,难于驾驭,实训效果差强人意。
为了契合应用型本科的人才培养目标,针对存在的问题,我们走访了用人单位、邀请企业技术负责人和专家共同研讨,同时,结合本学院学生的认知能力与学习特点,在新的培养方案中将“Java程序设计”拆分成“面向对象程序设计”和“Java程序高级开发”两门课程,旨在通过“Java程序高级开发”这门课程中的强化训练,来提高学生的Java技术应用能力。
二、“Java程序设计”教学中存在的问题
通过调研了解到,以应用型本科人才培养的目标来审视以往的“Java程序设计”教学模式,主要存在以下四个方面的问题。
(一)与人才培养目标脱节
“Java程序设计”课程往往是学习面向对象程序设计的第一门课程,教学过程中主要重视面向对象的基本知识及语法的学习,对其中的Java技术应用部分,仅要求学生了解和掌握基本的编程步骤,没有足够的时间突出和加强编程实践技能的训练,学生的实际应用技能较差,达不到人才培养的目的。[1]
(二)与学生的实际状况脱节
应用型本科往往是“本二”“本三”层次的学生,其学习态度与自主学习能力与“本一”学生存在明显差异,然而,现有的教学资源,如教材和案例等,没有足够重视这些差异,认为“Java技术应用”部分只需要做好相关的知识铺垫与必要的案例引导,学生就能够自主学习发挥,在实际项目中运用自如,而不需要花费时间、精力进行专项的学习和训练。然而实际情况却是,当学生在实训课上面对企业一线工程师带来的实际项目时,常常不能很好的驾驭,课堂上的学习与实际编程开发无法顺利对接。
(三)与岗位技能脱节
对于一线工程师岗位而言,仅靠课堂上学会的编程语言是不够的,还需要具备一些其他的综合技能,如程序的调试、诊断、测试等,但这些技能在一般的程序设计课程中鲜有涉及,使得学生完全是在一个真空状态下学习编程的过程,根本没有意识到自己写出的代码不够健壮,就更谈不上如何优化于完善,造成学生毕业进入工作岗位后,不能较快地适应岗位技能要求。
(四)排课方法不利于编程训练
高校中现有的排课规范是,按2:1或1:1的比例分配课堂教学和实验教学的学时,理论课与实验课相互交错安排。这样的排课方法,在时间和空间上将课堂教学(多媒体教室)与实验教学(机房)人为分离,不利于编程训练的强化。另外,由于本院学生学习特点,在实验课上大部分学生还需要教师再次梳理和演示后,才能进入状态开始实验训练,导致动手实践的时间比例严重缩水,达不到预期的效果。
三、“Java程序高级开发”教学创新与改革路径
为了有效地解决上述教学中存在的问题,学院以向应用型本科转型为契机,以“Java程序高级开发”这门课为载体,展开新一轮的教改实践,借助“互联网+”技术,融合多种教学方法,探索采用多元化的、混合的综合教学模式,提升应用型本科软件工程专业学生的编程技能。
(一)以实践教学为主线
“Java程序高级开发”这门课程的内容主要是Java技术应用,包含IO流、JDBC、多线程、网络编程等众多的技术主题[2],主要培养学生动手编程的能力,即技术应用的能力,属于技术实践类课程。它有别于工程实践类的课程,是专业基础课与工程实践课之间能否顺利衔接的关键。
这些技术主题都有自己鲜明的技术特征,拥有各自不同的编程套路,并且在实际应用时,并不是独立使用,而是互相渗透,演绎出多样的形态,如在网络编程中一定会出现IO流和多线程,会促使在这门课程的教学实践中淡化理论和实践的界线,以实践教学为主线,通过循序渐进的编程训练,反复实践来掌握相关技能。
(二)以岗位技能为中心的综合技能训练
在对企业的调研回访中了解到,软件工程专业学生的编程技能,不仅仅是会用编程语言写代码,还需要掌握一系列与软件工程有关的综合技能及实用小工具,这些技能及小工具在现有教材中几乎无涉猎,仅在“软件工程”课程中有简单介绍,没有专门的课堂训练,而这恰恰是软件开发工作中不可或缺的实用技能。因此,在“Java程序高级开发”教学内容的组织上,增加这部分内容的拓展训练,引入一些常用的综合技能、小工具,自编讲义、课件、编程任务集,使学生能够初步掌握更接近于实际岗位需要的编程技能,顺利地过渡到后续的工程实践类课程。
1.训练编程思路。编程的关键是编程思路,没有人天生就懂编程思路,编程思路是经过一定训练后养成的。对于学生而言,就是要从养成良好的编程习惯入手,拿到编程任务后,要认真分析得到正确的编程思路,不能匆匆忙忙敲代码。在开始阶段先由教师提供任务的编程思路,要求学生将编程思路作为代码的注释,将文档放在代码里,根据思路完成编程任务。经过一段时间后,学生就渐渐有了将大问题分解成小问题的模块化设计意识,到了中后期就要求学生自己先写出编程思路,再完成代码。同时,要求学生编写javadoc注释,并生成API文档。反复训练,养成习惯。
2.训练编码规范。所谓无规矩不成方圆,无规范不能协作。在实际工作中,良好的编码规范将有利于团队成员之间的协作配合,减少程序bug,提高程序性能及安全性,并可以减少软件的维护成本。在课堂上应引入主流的Java靜态代码分析工具,不仅学习代码的格式规范,更重要的是熟悉编码的经验法则,要求学生的作业都必须通过静态代码分析工具的检验,逐步养成遵循代码规范编写程序的习惯,能够写出优雅的、一致的代码。
3.训练单元测试。单元测试,是每一个程序员必须掌握的,是程序员对所开发代码质量的一个基本承诺。在开始的任务中,先提供JUnit单元测试的代码,要求学生学会用JUnit单元测试代码检验自己的程序,熟悉测试代码的使用,认识单元测试的作用与意义。后期,再要求学生自行设计测试用例,编写JUnit单元测试代码,检验自己编写的程序。通过不断的训练,锻炼学生的测试技能,养成测试意识。
4.训练调试诊断的能力。调试诊断的能力是编程必备的技能,但却无法从理论课堂上学到,只能在编程实践中,借助调试诊断工具通过不断纠错的过程来学习掌握。当学生在编程实践中遇到问题时,教师现场引导学生学会使用调试诊断工具,帮助分析诊断问题所在,修复程序缺陷,逐步培养调试诊断的技能。
5.训练优化代码的能力。能够编写更快更好的代码,是每一个程序员不懈的追求。引导学生使用性能分析工具,找出影响代码性能的瓶颈所在,对代码进行重构与优化。同时,通过回归测试,确保任何重构与优化都不能破坏代码的正确性。通过训练,让学生初步掌握代码优化的技巧,能够优化完善自己编写的程序,让程序“跑得快”。
(三)引入翻转课堂,提高实践教学的比例
翻转课堂正好契合“Java程序高级开发”这门课的特点,教师按教学进度在线上发布相应的视频课件,学生课前观看视频自主学习,初步掌握每次课的知识要点及课堂训练的要求,从而改变传统满堂灌的课堂教学方法,可以最大限度提高课堂实践教学的比例。[3]在引入翻转课堂教学法之初,学生们纷纷抱怨从小到大都是到课堂上去听课,习惯了跟着老师走的被动学习方法,突然在一门课上要转变成课前自主学习,不知所措,难以适应。因此,学院老师及时做出调整,将视频精简为以实例演示为主的微视频,并增加课前导读、线上讨论与答疑,经过几轮的磨合,学生已能从容应对,渐入佳境。为了配合翻转课堂,教师将课程的安排改为以3~4节课为一个单元,不再人为地分割课堂教学与实验教学,全部在机房完成,确保学生人手一机,可以边讲边练,保证了课堂实践教学的时间与质量。
(四)多种手段确保课堂任务的饱满度
翻转课堂实施的效果,很大程度上取决于学生的学习兴趣、自主学习能力,因此,学生之间的程度差异将被迅速放大,这样就不能按统一的标准来要求每个学生,所以设定分层次的教学目标是对翻转课堂教学法的一个很好的补充。根据学生的不同程度,设计不同层次的作业任务,既让每个学生都可以入手,循序渐进,又能较好地解决了学生间“吃不饱”与“吃不下”的现象。(1)第一层次:模仿练习。学生从模仿编程例题入手,完成相类似的任务,从而了解和熟悉基本的编程思路和方法。(2)第二层次:编程应用。根据要求,完成稍有难度的编程任务,自行解决些小问题,从而小有成就感,逐步提高学习的兴趣。(3)第三层次:拓展训练。引入结对编程的方法,适当提高编程难度,完成几个有意义的小工具,积累编程经验。
借助云教学平台,为每次上课发布的各层次的训练任务指定不同的deadline,并据此形成新的考核评价方式,即课堂评价、任务评价等。一方面,营造了真实岗位的工作氛围,让学生增加课堂实践的紧迫感,迫使每个学生都能自觉参与到课堂实践中;另一方面,也有利于教师掌控实践课堂的节奏,提高机房教学的效果和质量。
(五)通过电子教室加强现场实时指导
教师可以借助电子教室,通过监控巡回查看每个学生的编程训练情况,学生可以方便地通过电子教室向教师求助。对于学生在实际编程中遇到的各类题,教师通过电子教室的控制功能,直接操控学生端,实时地帮助分析出错的原因,引导学生逐步解决,并利用电子教室提供的学生演示功能,灵活地将纠错过程同步演示给特定的学生群体观看学习。通过个别指导、小组指导、全员指导多种形式加强现场指导,真正做到以生为本,个性化教学。利用电子教室,可以在课堂上加强教师和学生之间的交流讨论,启发学生认真思考,学会提问,善于提问。
(六)采用多样的课堂活动形式
在调查中发现,学生遇到学习问题解决的途径依次是:请教同学→上网百度→寻求教师的帮助。为此,教师在课堂上挑选一些学习能力较强的学生为核心,组建若干个学习小组,以好带差,展开互帮互学式的交流与讨论。在课堂上引入结对编程,两个学生一起交流与讨论编程思路,共同完成任务,并以一节课为单元,要求学生轮换驾驶员和领航员的角色,互相监督、相互学习,既培养了团队协作的意识,又提高了学习兴趣。借助云平台工具,每次课都组织开展讨论答疑的活动,并设立最佳问题奖,提高学生参与课堂互动的积极性,方便及时地进行线上和线下交流。
(七)线上线下的点评与交流分享
每次课上及时点评学生的编程思路和代码中存在的主要问题。除了教师点评外,还时常邀请作业优秀的学生上台演示和说明编程思路,同学之间互相讨论交流学习体会。课后,全班同学都可以在云教学平台上查看教师批改和点评作业的情况,交流和分享优秀作业,互相取长补短。
总之,通过两轮的实践,看到了学生们从开始的不适应甚至排斥,到喜欢上这种教学模式的变化,特别是在刚刚结束的课程中,学生给出的课程评议结果是98.93的高分,这大大增强了学院教师们继续探索实践的信心。经过课程实践训练,学生们逐渐培养起自主学习的能力,遇到问题不再发怵,能够沿着一定的路径摸索解决,编程实践能力得到了提高,并且在各类创新创业项目中都看到他们活跃的身影。
参考文献:
[1] 邓海生.新建本科高校Java课程改革研究与实践[J].电脑知识与技术,2016(21):106-107.
[2] 李秋菊,王长斌,杨鸿雁.高校转型背景下计算机专业Java课程改革与实践[J].鞍山师范学院学报,2017(4):68-71.
[3] 郑瑞强,卢宇.高校翻转课堂教学模式优化设计与实践反思[J].高校教育管理,2017(1):97-103.
Abstract: In the context of transition from a large number of ordinary universities to applied undergraduate education, we have offered the course Advanced Development of Java Programs and conducted teaching reform with this course as a carrier in a bid to meet the objectives of training applied talent and enhance students programming skills. We take the practice teaching as the main line, take the development training as the characteristic, introduces many kinds of modern educational technology means to the classroom and forms the diversified, mixed synthesis teaching pattern.
Key words: applied undergraduate education; programming skills; practical teaching; extended training
[責任编辑 李 漪]