1概述
自1946年第一台计算机ENIAC面世以来,驱动计算机运行的“代码”经过1946—1955年的程序设计阶段、1956—1968年的软件设计阶段(此阶段由于软件产品质量不高而导致“软件危机”),最终在1968年以“软件工程”概念的出现为标志,软件开发活动进入了工程化时代,并一直发展至今。软件的工程化发展之路并非一帆风顺,几十年来至少经历了四次升级换代:①20世纪60年代末至70年代中的结构化程序设计;②20世纪70年代中期至80年代的计算机辅助软件工程;③20世纪80年代中期至90年代的面向对象方法学及其应用;④近年来出现的面向问题、敏捷开发编程思想与方法等。毫无疑问,随着软件开发思想的快速发展,技术人才的培养方式也随之变化。其中,人才培养模式是发展、改革之纲,是在教育理论、思想指导下,按照特定的培养目标和人才规格,以相对稳定的教学内容、课程体系、管理制度和评估方式实施人才教育过程的总和。面向企业对软件开发人才的需求,本文研究了更为合理、有效的人才培养模式。
2市场需求分析
软件开发是一个非常宽泛的概念,从岗位来看,有架构设计、软件研发、软件开发、软件测试等;从技术方向来看,有嵌入式方向或底层系统方向、Web开发(包括J2EE、.NET和PHP等)方向、移动应用开发(包括安卓、Windows、苹果系统)方向、后端开发(数据库、系统服务等)方向、客户端或桌面程序开发方向等。本文之所以选择Java类课程作为软件开发类人才培养模式改革研究的切入点,主要是出于以下两方面的原因:①目前,在移动应用开发领域和Web开发领域,市场占有率高的安卓和J2EE平台均基于Java,即Java教学的改革研究更具实际意义;②各高校目前普遍开设了Java类课程,即Java教学的改革研究的结论具有普遍的指导意义。为全面了解市场需求现状,首先以人才市场上为本科毕业生设立的Java工作岗位为研究内容,通过调研国内某知名招聘公司,统计人才需求单位性质得出,民营或合资企业占绝大多数(74%),因此Java软件开发类人才处于较为激烈的竞争环境中。通过统计毕业1年内Java工作岗位的月薪范围得出,虽然大多数情况是“面议”(82%),但除去“面议”,从月薪6000~7999在数量上的优势可以看出,市场对于符合要求的本科毕业生还是不吝薪水的。因此,这一月薪范围的岗位要求也应该是对合格开发人员能力的“刚性”需求,这些需求应该作为学校对软件开发人才培养的核心内容。聚焦于月薪6000~7999的岗位,研究市场对软件开发人才的具体需求。通过调研,软件开发人才的市场需求总结起来可以分为以下四类:①基本技能类,比如团队协作能力、文档写作能力、操作系统的熟练运用能力和英语阅读能力;②专业课程知识点掌握类,比如要求熟练掌握J2SE的API、基础结构、异常处理、日志处理、集合的使用、单态模式、工厂模式、多线程并发安全处理,软件工程概念、异常处理、集合、软件模式、J2EE的各个组件、数据库基本概念等;③专业课程群的融会贯通类,比如熟悉一种数据库的操作及其访问接口编程、熟悉HTTP协议及其编程、软件工程概念及其应用、数学概念及其应用等;④对更高能力的期望,比如能够独立开发程序,能够攻关开发难题,能够开发调试高性能、高稳定的程序等。四类需求总结如表1所示,其中,最后一类(期望型)能力需要长期实践经验的积累,通过本科教学培养不太现实。因此,学校应着力于前三类能力的培养,同时软件开发属于实践科学,实践培养模式具有关键性作用。
3研究目标与研究内容
已有的教学模式并不是不重视实践,而是存在待改革之处。以Java类课程为例,目前,主流的授课方式是集中讲解理论内容,学完两三节课后安排一次集中实验;更好一些的授课方式是,学生人手一机,课堂上教师讲完知识点后,学生立即动手验证操作,两三节课后安排一次阶段性实训实验,课程最后安排一次项目实训实验。实践证明,现有教学模式中的实践环节非常重要。但在运行过程中,也发现不少问题:①实验教学模式中的实验环节大多都是验证性的,在课时有限的情况下,即便有阶段性实训,学生对知识点的融会贯通依然存在问题。②在现有教学模式下,学生容易具备“小应用场景”下的开发能力,但是离真实开发环境下的能力要求(比如表1中的高级知识点和专业课程群类能力)还有着不小的差距。③现有教学模式下的阶段性实训实验的培养效果并不显著,主要原因是实验作业规模不大,学生做完后,仍然达不到预期效果。④在现有教学模式下,阶段性实训实验和项目实训实验是提高学生能力的重点,但目前这两个环节还有很大的提升空间。比如,学生分工不合理,容易导致“瓶颈点”,小组成员间形成“死锁”,最终无法实现实训目标。对于以上问题,必须确立以下两个研究目标:①研究作业内容及要求,使阶段性实训实验能够帮助学生完成高级知识点的掌握;②研究项目实训实验内容及其运行机制,使学生融会贯通专业课程群。基于以上两个研究目标,以Java类课程为研究对象,提出以下研究内容:①设计涵盖高级知识点的课后作业题目;②设计阶段性实训实验的内容及运行环节;③以专业课程群的融会贯通为目标,设计项目实训实验的内容及其运行环节;④以提高学生能力为目标,设计各实训环节的学生成绩评估与反馈。
4课后作业、实训实验及其评估
课后作业是补充或扩展高级知识点的重要环节,必须要以学生牢固掌握课堂基本知识点为基础,可以通过加强知识点验证环节来解决。如果不具备学生人手一机的条件,授课教师需要在课堂上对知识点亲手编程并演示给学生看。以Java课程为例,除了正常的课后作业,结合课程授课计划,可以添加如表2所示的课后作业。课后作业的关键是由教师建立合适、明确的目标。作业评分与讲解也很重要,评分目的不仅仅是督促学生去做,而是助于教师了解学生的难点,从而通过讲解来补足。阶段性实验采用个人实验,内容上应统筹考虑表2中课堂基本知识点与课后作业扩展知识点。运行环节方面,分两个步骤实施:①教师综合一个教学阶段的知识点设计实验题目,布置给学生,由学生课后完成。②评分及讲评。教师对学生的完成情况打分并讲评,讲评的重点是学生综合运用知识点的程度。在此步骤中,教师可以对实践不够好的部分编写详尽的实验指导书或亲自演示编码过程等。由于实验内容的复杂度与工作量都较大,项目实训实验需分组完成,具体分三个步骤实施:①分组。分组的总体原则是组内成员水平差别平缓,从而保证良好的相互协作、共同提高。②任务分工。分工的均衡程度由分工模块的完成难易度差距来评价,难度要有阶梯。不少实验教学,学生只是形式上在一组,没有合理的分工,随意性很大,有一部分学生没有参与进来,成了旁观者。③评分。项目完成后,教师根据项目完成情况打一个集体总分,再根据各组中每个同学的完成和努力情况打个人分,最后根据集体成绩与个人成绩的综合情况评定等级,以保证评定的合理性。在项目实训实验的实际运行中,评分环节起到“指挥棒”的作用,评分环节的设计应从以下两个方面考虑。一方面是个人分。一个小组内每个学员的能力高低不等,组员个人分的差异在所难免。评估个人能力的要素有三点:①学员自身任务的完成度;②学员对所做项目的理解深度;③学员与其他组员间的配合,考核学员的小组合作能力。另一方面是小组分。即使组内成员能力有差异,但如果安排得当,分工合理,依然能够组成强大的团体。评估小组分的要素有两点:①项目总体完成度。项目完成度越高,表明该小组的合作效率越高。②项目分工的合理程度。通过参考组内成员的分数差距考核分工的合理性。
5总结
本课题基于南京邮电大学通达学院教学改革项目JG0041423。通过对软件开发类人才市场进行调研,本文研究了市场对软件开发人才所具备能力的预期与要求,并以Java类课程为研究对象,分析了现有培养模式的不足,设计以课后作业为基础,实训实验为关键的培养模式。通过对南京邮电大学通达学院2012级一个班级开展实验,结果证明学生的学习成绩和软件开发能力都得到了大幅提升。与上一届相比,这次实训实验的最后作业更加贴近实际的开发场景,从而使学生更加适应市场需求。本文所提出的培养模式对教师提出了更高的要求——教师不仅仅要掌握教学大纲,也要非常熟悉所教授科目的高级知识点。同时,实训实验环节的内容设计也要求更加贴近实际的软件开发场景。因此,学生培养模式的改革不仅仅是教师如何教学生的改革,同时也是教师如何提升自我、主动适应市场以及迎接变革的改革,这也是本课题下一步要研究的内容。
作者:刘尚东 闫晗 李丹 李嘉怡 陈诗语 单位:南京邮电大学通达学院 南京邮电大学计算机学院