程序设计课程中校企协同育人的实践模式探索
2019-09-26徐健锋
胡 然,徐健锋
(南昌大学 软件学院,江西 南昌 330047)
0 引言
中国程序设计人才紧缺,而且缺口还在快速递增。一方面,企业对程序设计人才需求量旺盛;另一方面,在大量的毕业生中又难以找到令用人单位满意的程序设计人才。造成这种尴尬情况的主要原因是学生缺乏工程实践能力、职业素质和解决实际问题能力的训练,达不到企业的用人标准,恰说明以往的校企合作或工学结合的培养模式有资源不足[1]、认识不到位、深度和广度不够[2]等问题,难以得到真正实施或取得较好的成效。
1 以学生为中心的程序设计课程“校企融合”实践模式设计
程序设计系列课程是软件工程专业的专业课程,要从一年级学生的程序设计课程就开始融入校企协同创新实践能力,让更多的学生成为企业需要的程序设计人才,这种教学上的改革直接促进高校工程教育中校企共同体的构建[3]。校企协同创新和程序设计课程群的关系如图1所示,在厘清这些关系的基础之上进行低年级产学研实践模式的思考和建构,设计中要考虑到如下几方面的问题。
图1 校企协同创新下的程序设计课程群
(1)以学生发展为中心的教学理念。重视和体现学生的主体作用,同时又不忽视双师(教师和工程师)的主导作用,在校企合作过程中采用团队协作式、个别化、小组讨论等组合的教学形式进行实践教学。把大学生放在学习的中心位置,发挥学生的特长和创造性,增加学习的选择性,加强管理的弹性,满足学生学习的愿望,实现学生的学习自由。
(2)新工科软件人才的实践性要求。相对于传统的软件人才,未来新兴产业和新经济需要的人才不仅应在某一学科专业上学业精深,而且还应具有“学科交叉融合”的特征;不仅能运用所掌握的知识去解决现有的问题,还要有能力学习新知识、新技术去解决未来发展出现的问题,对未来技术和产业起到引领作用;不仅在技术上优秀,同时懂得经济、社会和管理,兼具良好的人文素养[4]。
(3)软件工程专业课程内容更新快的要求。企业与市场利益攸关,企业具备应对市场变化的较高敏感度和反应度,只有企业深入参与软件人才培养过程中,并将这种不断变化中的新发展和新需求应用在软件工程专业课堂教学体系中,才能使软件工程专业由老工科转变为新工科,才能培养出工程实践能力强、具备国际竞争力的高素质复合型新工科人才。
(4)学习是一个由浅入深、由易到难的循序渐进的过程。通过教学项目和现实项目的设置,学生的思维有一个递进和加深的过程。应用教学项目中学习的本领和知识来解决现实项目中出现的新问题,通过了现实项目洗礼的学生才能成长为合格的项目经理和开发工程师。
2 程序设计课程中校企协同育人实践模式的实现
软件学院与中兴软件技术公司合作的项目有基于ARM9 S3C 2440芯片的智能手持设备(PDA)的设计、音乐播放器、博客阅读器、手机软硬件信息查看助手、GPS Google地图实时更新、坦克大战、消防报警联动监控系统等,与江西微软技术中心合作的项目有婚恋交友网、移动营业厅管理系统、基于LPD协议的打印监控服务器系统、基于HAMA技术的呼叫中心服务系统等,与文思创新软件技术有限公司合作的项目有基于Linux的智能视频监控系统、电信宽带运营支撑系统等。根据该实践模式的思考和设想,将这些企业的实际项目引入程序设计课程教学中,实现产学研在课堂教学上的统整,通过图2所示的实践模式来说明低年级程序设计课程的项目引入过程。
图2 校企协同育人实践模式的实现过程
(1)遵循由易而难的学习过程,图2中用交叉的双圈表明相同项目基础架构开发的教学项目和现实项目。要从合作企业的实际项目中,精选出有代表性的能揭示所学理论和知识体系的案例用于程序设计课程教学,通过授课内容贴近企业实际情况以达到程序设计理论联系实践的效果。学生在学习阶段就接触软件企业的真实项目,有利于尽快把课堂知识转化为实际能力。
(2)以学生成长为企业所需的软件人才为主线,图2中用3条箭头表示了学生成为应用型软件人才的过程。学生分组进行软件项目开发训练,然后通过教学项目学习基础技术架构,再根据项目任务分工学习相应的案例模块,这些教学案例模块可根据真实项目需求进行调整,可选择课程内容和进度,最终让学生参与企业项目的部分环节中。这样,学生通过从教学项目到现实项目的实训,成为面向应用、面向实践和面向企业的新工科软件人才。
(3)学校教师和企业工程师对项目的架构和流程管理是校企协同育人的依托,图中用长方形表示双师在人才培养过程中所承担的工作和责任,可以通过与现实项目有相同框架的教学项目,并建立企业真实软件开发全流程信息化管理与高校实训教学管理相融合的信息化教学项目平台来实现。
(4)有工程师资质的学院教师,按照企业真实项目制作相同技术构架的教学项目,建立教学项目案例库。考虑到课堂教学时间有限,双师将精选的教学项目编写成教学试题库,可以让有学习热情的学生在课余时间能够大量地涉猎丰富的优秀真实案例,帮助他们巩固理论知识的同时又开阔眼界。
3 程序设计课程“校企融合”实践模式应用和原则
课题组与企业合作的实验模式初步完成了项目基础技术架构的开发以及教学案例库的建设,已在一年级、二年级和三年级的部分班级进行使用,并在实际教学改革中验证了教改设想,且持续改进教学方式和手段。我校软件工程专业2016级、2017级和2018级的部分本科生在程序设计专业课程时,就开始加入到完成企业项目任务中。
3.1 学生选择现实项目的部分环节和教学项目的原则
教学项目的设计有综合应用性,且现实项目选择的可行性由老师把控,教师应根据教学需求调整教学项目的不同内容和难度。
3.2 项目工程实训的要点
(1)本实践模式下,小型软件项目工程实训的注意要点有:不适合高年级学生进行训练;一年级学生在学习了C语言、C++后才可以开始跟进;低年级适合单人编程训练,偏重编程风格和良好编程习惯训练。
(2)本实践模式下,中大型综合软件项目工程实训的注意要点有:不适合低年级学生进行训练;在掌握了至少2种编程语言以及基本的数据结构、数据库等知识之后,学生可以进行小组团队训练,学生组长职责类似于企业中的项目经理;侧重团队协作和项目设计、开发和管理,学生组长要相对固定。
4 校企协同育人的实践模式应用效果分析
从2016年9月开始至今,校企协同育人的实践模式在各个年级的程序设计课程中顺利实施。在该实践模式下,学生的发展是中心,具有工程资质的教师和校企深度协作是必要条件。从低年级专业课程开始该实践模式,学生的创新能力、自我学习能力、团队合作能力和职业素养能得到充分的培养和锻炼,并逐步凸显出良好的教学效果。
4.1 校企协同育人模式的教学效果分析
1)通过动手实践,学生能更好地掌握原本不容易理解的程序设计概念。
例如,面向对象的三大基本特征是封装、继承、多态,其中,封装是学生首先需要掌握的重点知识,也是难点,对于刚刚从面向过程编程转到学习面向对象编程的学生来说,封装、抽象等概念比较模糊、抽象、难懂。例如,类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏,以及如何在实际项目中识别、设计类等。在实践学习的某个银行系统中,可以根据定义后的系统需求来识别系统中所存在的对象,可以通过寻找系统域描述和需求描述中的名词进行系统对象的识别。根据系统需求分析出的名词有银行Bank、账户Account、客户Customer、资金Funds等对象图中的候选对象。判断是否应该为这些候选对象创建类的方法基于与该对象相关的身份和行为,如果答案是肯定的,那么候选对象应该是一个存在于模型中的对象,就应该为之创建类。此外,还要对账户进行存钱、取钱、转账操作保留业务记录,因此,在系统中还应有代表这些业务记录的对象存在,可以为这些对象建立如下3个类:存款业务记录Deposit、取款业务记录Withdraw、转账业务记录Transfer,由于这3个类都属一种业务记录,可以抽象出父类Transaction。
2)通过真实项目的引入,学生能尽可能地经历完整的项目生命周期,深入学习可行性分析、需求分析、调试、测试等以往课堂教学缺失而在企业项目中是很重要的开发环节。
以往的教学往往侧重于软件开发阶段的内容,即设计、编码和测试,而现代软件行业的高速发展对开发者的综合素质要求越来越高,不仅是编程知识点,其他维度的知识点也会影响到软件的最终交付质量。由此可见,问题定义、可行性分析、项目计划、项目成本评估等也应该是学生必须掌握的重要知识,这样才能应对数据意外丢失和需求变更可能带来的软件上的架构缺陷或性能风险、工程结构混乱导致后续维护艰难、没有鉴权的漏洞代码易被黑客攻击等在实际项目中经常能碰到的种种问题。
针对以往教学中缺失、薄弱的环节,我们在校企实际案例二手货交易平台项目中,添加了项目成本估计这项内容。在项目成本评估中,对项目完成过程中耗费的人力、物力、财力资源进行了分析,将成本估计按照类别进行估算,如直接人工、直接费用、间接成本、制造费用、管理费用、不可预见费用等。再例如,项目学习过程中,由企业方进行案例的风险分析,并且形成案例文字材料供学生学习,项目实施过程中可能遇到的风险有哪些,需求变更、技术水平无法完成设计、数据意外丢失等造成的重大风险事件如何预防及处理等。
3)通过团队攻关,学生在相互探讨和分工设计中培养了合作、宽容、理解等程序设计人才必备的心理素质。
在完成项目的过程中,每位小组成员都要完成相应的项目模块,组内必须协调好有直接联系的各个模块进程。程序设计语言和软件架构需要一种普遍认可的统一规范和标准,以提升协作效率,降低沟通成本[5]。在教学项目中,由双师型讲师组织提炼这方面的素材和学习资料,增进学生的协作。例如,我们在校企实际案例二手货交易平台项目中,和学生一起制订命名规范,数据库表和字段全部以英文字母或下划线命名,长度不能过长;表名中含有的单词采用单数形式,单词首字母大写;字段名中含有的单词全部为小写,单词之间以下划线分隔;私有变量以“_”开头的小写英文字母命名,其他变量用小写英文字母开头;所用函数用小写英文字母开头的驼峰式命名;所有类用大写英文字母开头的驼峰式命名。
4.2 软件人才培养的目标靶向效果分析
1)培养目标为软件开发工程师,学生动手能力和专业素质得到提升。
所有学生都要学习C/C++、Java、Web开发、Android、iOS等多个技术主流方向,重点锻炼学生项目开发能力及综合素养,积累软件项目开发经验,并在训练中注意各种主流开发语言代码的规范性和编码质量。
2)培养目标为软件开发项目经理,有助于拔尖软件人才的培养。
在初期的团队合作中,成绩中等及偏上的每位学生定时轮换履行项目组长职责,经过一段时间实践后,学生团队和学生组长较为固定。学有余力的学生组长还要在团队管理、项目组织、应对项目需求变化、保障项目质量、降低项目开发周期和费用等方面进行学习。
4.3 校企协同育人的实施成果
在国内外各大项目和比赛中,软件工程专业学生连续取得优秀的成绩。2016年以来获得国家级大学生创新创业项目7项;2017年,3位学生获得美国大学生数模竞赛一等奖,12位学生获二等奖,5位学生获三等奖;4位学生获得“中国软件杯”双创大赛一等奖;多位学生获得2项第八届蓝桥杯全国软件专业人才设计与创业大赛一等奖,2项“华梦2017”全国大学生开源软件技术创意大赛一等奖;此外,2位学生获得全国高校互联网应用创新大赛二等奖,并有第四届“发现杯”全国大学生互联网软件大奖赛国赛二等奖一项,首届中国“互联网+”大学生创新创业大赛三等奖一项,还有1位学生获得中国软件杯大学生软件设计大赛三等奖,6位学生获得全国移动互联创新大赛三等奖。2018年伊始就有3位学生获得中国大学生计算机设计大赛二等奖,5位学生获得全国大学生人工智能创新大赛铜奖等。
4.4 不足与反思
合作企业提供的项目周期一般很长,而且项目的进程和课程的时间总是不能同步,因此教师要熟悉该项目并能持续跟进,才能根据现实项目及时更新教学项目,这对于教师本身有较高的要求,在后续的推广中如果不注意,很可能出现教学案例库更新不及时的问题。
要把握好学生个人学习和团队学习之间的度。合作学习固然对促进学生全面发展具有深远意义,但是过早实行团队学习的方式反而不利于学生个体在专业上的进步。
5 结语
我们通过当前校企合作育人问题的实践来检验和发展“以学生为中心”的教育理论,运用更加灵活的混合教学方法和智慧教学手段,从新生开始的程序设计系列课程入手,增强学生的动手实践能力和创新能力,不仅从理论上建立或检验校企协同育人框架和假设的课程经验研究,更重要的是,在今后还将根据更多的学生反馈和教学效果进一步完善该模式,为培养出工程实践能力强、具备国际竞争力的高素质复合型新工科人才提供经验素材和实现路径。