王颖
乐山职业技术学院 电子信息工程系 四川 乐山 614000
Java是目前市面上应用场景最广泛的程序设计语言之一,它是一款面向对象的高级程序设计语言,具有学习入门简单、功能强大、应用面广,就业需求巨大的特点。在我国各大高校的计算机、物联网、软件开发、人工智能等相关专业均开设有该门课程。但长期以来,各高校程序设计语言教学往往都只从语言本身出发,重点教学语法,再进一步教算法,学生在学习Java语言后,即使掌握了Java语言的基本语法,具备一定Java程序开发思想及开发技巧,但在面临实际软件项目,特别是与工程项目实践相结合时,仍存在较为严重的理论与实践脱节的问题。导致我国高校计算机专业学生普遍存在动手能力差的问题,难以满足用人单位的需求[1]。
目前很多高校相关专业毕业生存在两大不足:一种是知识停留在纸面能力,学了程序设计语言缺乏动手能力无法编写软件,二是理论和实践结合运用能力差,能够编写小的应用,但是没有工程应用经验,到岗后无法直接胜任工作,还需要再培训或较长时间的学习。对于侧重培养理论研究型人才的普通高校的学生,这种情况尚可以理解。但高职院校学生培养目标本就侧重于学生毕业即可上岗,强调学生拥有一技之长及较强动手能力,而且这本也是高职院校毕业生与普通本科院校毕业生在就业竞争时的主要优势。因此比普通高校学生具备更强的动手实践能力,更直接的操作运用技能就显得尤为重要。在某些时候,高职院校课程体系安排上还可以通过减少理论课程学习占比,提高工程实践课程的占比,做到一切以实践出发,与工程应用行业内容紧密结合,最终达到高职院校学生毕业就能上岗,用人单位拿来就能用的教学目的。这都要求学生在校学习期间就必须将工程实践真正融入平时教学中。
在计算机科学里面的软件工程就是一门专门研究用工程化方法构建和维护有效的、实用的和高质量的软件的课程,这门课程强调软件开发的工程性,通过让学生了解软件需求分析、软件设计、软件测试、软件维护和软件项目管理等内容,达到培养能够从事软件开发、测试和软件项目管理的高级专门人才。将软件工程课程直接融入Java程序设计课程中,同时融会贯通两门课程,将极大提高学生的项目综合工程能力,紧跟社会工程项目方法,毕业以后就能直接上岗,从而达到真正提高学生的就业竞争力,达到提升学生就业率的目的。
当前本院已经开设的程序设计语言课程教学包括了Java、Python、C语言等多种高级语言,均采用项目化教学方法。项目化教学法就是教师将需要解决的问题或需要完成的任务以项目的形式交给学生,在教师的指导下,学生以小组协作的方式共同制订计划,共同或分工完成整个项目[2]。采用项目化教学法,可以提高学生的学习兴趣和学习积极性[3]。但我们目前的教学方式局限于根据知识点不同,将项目的某模块的开发引入其中,而没有让学生完整经历一个软件工程开发的全寿命周期。所谓的项目化,其实质只是让学生完成了的一个项目工程的某个片段。学生并没有经历从需求分析、软件设计、软件开发、软件测试等全工程流程。相当于运用了作坊式的技术来学习了程序设计构建某个小的应用而已,但却没有实践过现代工业化的工程化软件开发模式,到企业也是不能满足企业的用人需求。企业反应刚毕业的学生不能立马转换为劳动力。现在也有一些其他院校开设了软件工程课程,但也仅仅是单纯将软件工程课程作为一门独立课程开设,程序设计语言课程与软件开发课程各自独立存在并无交集,学生学习以后反映无法将二者有效结合,没有真正理解到软件工程的精髓,实际运用情况并不理想,对软件工程理解不够深入,无法学以致用。如何将这两者有效融合入实践教学中,将两个学科融会贯通,是提高学生动手实践能力的关键。
本院物联网应用技术专业开设的《Java程序设计下》课程,是建立在《Java程序设计上》课程学习之后的应用实践课程。和其前导课程相比,课程重点不再是理论基础知识,也不仅仅是代码编写,而更强调Java语言在软件生产开发当中的实际运用。以这门课程作为软件工程与Java程序设计课程相融合的教学改革研究的试点课程就很恰当,并具有很高的试点意义。当前《Java程序设计下》课程主要还是采用传统的基于项目化的教学方式,将知识点拆分为若干实际项目让学生完成,这虽然有利于学生更牢固掌握单个知识点,但在实际的企业软件开发工程中,不论使用哪种程序设计语言进行开发都不会仅仅只做代码开发,都会运用软件工程中的软件分析、软件设计、软件开发、软件测试,完成全套的开发流程,形成大量的工程文档,拥有大量的固定的工程应用模式。因此如果学完整个Java程序设计课程,学生水平仍然只停留在对代码编写的认知,后续进入公司后,学生仍需花大力气继续学习软件工程相关内容。只有获得了软件工程和Java程序设计能力相结合的实践能力,才能让我们学生拥有进入软件公司就能直接胜任软件开发岗位的工作水平。因此在《Java程序设计下》课程现有的教学项目里融入运用软件工程进行开发的要求,是对现有项目化教学的进一步提升,是提高我们学生的综合技术能力、竞争力、快速上岗能力的必要性改革。
我们通过将两个入学成绩水平相近的教学班进行实验,在《Java程序设计下》课程中进行区别教学,然后进行教学效果的综合比对评测,用数据论证两种教学方法谁更能提升学生动手能力。一种是在传统项目化教学为基础再结合软件工程运用的试点教学班我们命名为A班。作为对照,我们将只采用传统项目化教学的班命名为B班。A班46个人,B班47个,人数接近,学生均为同一年级属物联网应用技术专业二年级学生,已有学习知识结构都接近。都在上一学期完成了《Java程序设计上》的课程学习,但都未接触过软件工程课程基础。
在课程教学初期,就向学生说明本门课程教学需要达到的目标,让学生做到心中有数,并将本学期的项目要求以任务书形式下发给A、B两个班级学生,由学生自主完成项目的选择和分工。让学生对项目有一个总体的建设目标。
2.2.1 给两个班学生提供相同的9个项目去选择,也允许学生依据标准自拟符合要求的其他项目。
2.2.2 要求学生每3至5人组成一个项目小组。每个班分为11个项目小组,每个小组设组长一名,项目所有文档代码由组长负责收集管理和上报。
2.2.3 小组内人员具体分工由组员协商决定,由项目小组组长上报小组项目选题及组员分工情况。
2.2.4 本门课程一共48学时。
2.2.5 最后每个小组推选一名成员进行项目展示。
2.3.1 A班项目实践过程。在下发项目任务要求时,穿插软件工程的内容,并对项目开发提出具体的要求。每个时间节点要求提交不同的工程文档成果,利用文档提交时间来严格约束软件项目的工程进度。在第8学时前要求提交软件需求说明书,在第16学时前要求提交软件系统设计说明书,在第30学时前进行软件编码,在第38学时前提交系统测试说明书,在第46学时前进行最终成果提交并分组展示项目成果。每个阶段文档的形成有效控制了软件开发的质量和进度。同时在每个阶段初期插入讲解一定软件工程的内容,但因课时有限,要求学生课后需自学老师没有讲到的软件工程课程内容。一方面老师起到了点拨的作用,另一方面学生也提高自学能力。
2.3.2 B班项目实践过程。沿用旧的教学模式,单纯进行项目开发实践教学,根据课程进度进行开发推进,最终在第46学时进行成果提交并分组展示项目成果。两个班均可以在课后与老师利用聊天软件实时沟通开发技术方法和知识。
A班设置11个开发小组,其中有8个开发小组完成全部项目内容:软件工程文档(含需求分析和系统设计说明书)与源代码开发,软件开发进度与质量均较好,余下3个开发小组仅完成软件工程文档的编写,未实现代码开发。
B班设置11个开发小组,其中有5个开发小组完成代码编写,软件项目质量一般,均未提供软件文档。余下6个开发小组未完成源代码开发。具体成绩考核如表1所示。
表1 成绩考核对比表
由考核结果可以看出:采用将软件工程融合项目教学的A班优秀人数虽比B班少2人,但80-89分阶段的学生人数占比很高,占班级总人数的76%,远超过B班在这一分段的学生人数。A班实际项目开发成果,其设计基本能覆盖所有需求、软件可读性更强、运行效率更高,整体成果质量优于B班,且A班班级平均成绩也高出B班2分,可见这种新型教学方式对于全面提升全班软件开发的综合水平、提升整体学习效果确有显著作用。在实践中还发现,仅仅采用项目化教学的B班存在从网上复制代码的情况。而A班因为有软件工程文档的要求大量精力在撰写文档上面,反而未发现复制代码的状况。
采用软件工程融合教学的A班学生反馈,对软件开发的工程项目应用有了一定的认识,基本摸清软件开发全流程,对未来自己的发展方向有了较明确的目标,自己也有了自学的方向。单纯采用项目化教学的B班学生反映,对工程项目过程还是一头雾水,拿到一个项目仍犹如无头苍蝇,感觉无从下手,今后毕业到单位还需要培训才能胜任工作。
项目化教学的课程教学手段已经在高职院校施行多年。在软件开发类课程教学中我们一直以来采用以项目为导向的实践教学,这一改革曾经一度使我们的学生实践能力上了一个台阶。但目前,学生在应对工程化的项目开发时因为缺乏软件工程知识的支撑,导致还存在一定理论实践脱节的情况出现,学生普遍反映在单独学习Java程序设计和单独学习软件工程课程均缺乏深入的理解或工程实践能力,学生往往在上岗后还需要较长时间的培训。由此得知现有的教学模式在这方面是有所缺失,需要进一步的改进提升。
通过上述研究实践,将程序设计语言的学习与软件工程能力有效融合的教学新模式除了填补了目前高校在此领域研究的不足,也能有效提高高职院校计算机相关专业学生项目工程开发能力,从而提升他们的整体动手能力,最终达到提高职院校学生就业竞争力的目的。