徐传运 张杨 李刚
摘要:当前业界对高校培养的软件工程人才的满意度较低,该文基于建构主义思想,以工程项目实践为教学内容的核心,从项目实践类课程时间先行、课时最大化,教学活动围绕软件工程能力的形成和提升而设置与展开,专业教师设置主题问题对教学过程进行旗帜式导向,督导教师采用过程与结果相结合的综合评价方式全程监督控制,以全面提升本科生的工程能力。
關键词:工程能力培养;软件工程本科教育;建构主义
中图分类号:G642 文献标识码:A
文章编号:1009-3044(2022)05-0173-03
软件工程专业自2002年设置为独立专业,已经存在多年,产业界对高校培养的软件工程人才的满意度仍然较低,主要表现为多数应届本科毕业生不能迅速适应开发环境、难以较好地满足技术岗位的能力要求,用人单位需要进行较长时间的二次培训才能使其达到所在岗位的基础水平[1-2]。出现这些问题的根本原因在于当前工程教育受传统“知识本位”的影响,将人才培养的重点放在学生对专业理论知识的了解和掌握,忽视工程能力的训练和职业素养的培养[3]。而一提到强化工程能力,就将其等同于强化实践教学,片面地认为只需要增加实践教学环节的时间和内容即可。
1 软件工程专业特点
1)产品不可见、复杂性高。不同于其他工程专业的产品,软件产品不可眼见、不可触摸。由于问题域的复杂、管理开发过程的困难、软件实现的灵活、系统行为的离散描述,使得复杂性成为软件的一个基本特征。此特点使得学生在学习初期对软件开发过程及其产品的“真面目”难以得到直观的认识,从而提高了学习软件开发的“入门门槛”,导致学生在学习后期由于难以厘清复杂的逻辑关联而产生较强的挫败感。
2)技术更新周期短、种类多。软件技术发展迅速、更新周期短、技术种类纷繁复杂,导致课程内容安排比较困难,时常出现入学时制订的培养计划在大三、大四课程实施时就已过时的现象。面临各种技术流派,课程设置如何取舍?教师如何讲授技术背后相对稳定的基本原理?学生如何理解到技术表面后的本质?如何提高知识迁移能力?如何提高自学能力?这些问题都是软件工程专业课程体系的组织者、参与者必须面对和解决的。
3)设计与制造交错融合。软件项目的设计和制造不存在明确的时空分割(虽然软件工程的理论研究者试图把二者区分开来,但实践起来比较困难,敏捷开发的广泛使用即是证明),难以分别培养设计师和制造工人,因此软件专业的教育既要培养学生的设计能力,又要训练学生使用工具、方法、技术的制造技能。
4)过程规范性要求高。由于软件产品的不可见性,软件过程的质量在过程中难以直接被度量、控制、优化,因此软件工程通过过程的可控确保质量的可控。过程规范性要求软件工程教学既要提高学生的技术应用能力、又要提高学生的过程规范意识,但是技术相对容易讲授,而意识、习惯的形成却需要在真实场景中长时间的实践训练。
5)学习环境搭建成本较低。因为大部分商业软件都提供免费的教学授权,迅猛发展的开源软件也为教学提供免费资源,所以相对于其他专业,搭建满足商业标准的软件工程实训环境的成本相对较低。而成本低廉、满足达到商业标准的学习环境,使得创建真实的校内实训环境成为可能。
以上特点决定了软件工程教育在教学内容设置、教学过程组织等方面都应该有其自身的规律和特点,而软件工程教育要充分利用这些规律和特点,才能提高软件工程专业学生的工程能力。
2 面向工程能力的教育理念
2.1 软件工程教育的目标定位
当前,软件工程教育存在两个具有代表性的流派。1)理论派。目标定位主要遗传自计算机科学专业的培养目标,认为软件工程专业的本科生应该系统地掌握计算机科学的理论知识体系,主张学生只有掌握系统的理论体系,才能理解方法、技术、工具后面的科学原理,才具备长期发展的根本动力。因此,课程体系强调数学、物理、电子等工程基础课程,强调计算机组成原理、编译原理、数据结构与算法、数据库原理、操作系统原理、网络等专业基础课程。2)实用派。以商业的计算机培训机构为代表,将掌握特定软件开发方向的特定技术作为培养重点。为了最大限度地降低时间成本和经济成本,更快更好地适应市场的即时需求,实用派的培养方式为直接面向软件开发岗位的短期实际需求,从短平快的案例教学法入手,快餐式地训练学生使用当下主流、十分有限的几种技术和若干工具的技巧。
理论派提倡知识传授,所培养的学生实践能力较差,在解决实际问题的时候难以理论联系实际,软件企业不得不根据其所在研发岗位的技术需求进行较长时期的二次培训。实用派提倡技术培训,所培养的学生存在后续发展潜力不足、自主学习习惯缺失、终身学习能力较差等先天问题,无法促进甚至跟随企业和行业的观念换代与技术更新。
产生上述问题的本质原因在于前文提到的“设计与制造交错融合”这一固有特点,软件企业希望软件工程人才能够主导软件工程,发现和解决软件项目中出现的问题,收集和分析需求、提出有效的解决方案、实现客户满意的系统,并能够协调项目涉及的各种资源,推进工程达到预期的目标。这就需要软件工程人才既要有坚实的理论基础,也要有丰富的专业技能,还得有分析和解决问题的能力、实践能力、创造力、沟通能力和领导力、商务与管理能力、伦理道德、终身学习能力等全面的职业素养,以确保其胜任软件工程项目的综合开发、进而促进软件产业的迭代更新。
2.2 基于建构主义的核心思想
“工程教育”一方面是工程的,因为其课程和教学内容必须通过工程加以规定和充实;另一方面是教育的,因为其关注社会进步和个人发展。知识是客观事物的属性与联系的反映,是客观世界在人脑中的主观映像[4]。根据建构主义的观点:知识的获得不能直接传递,必须经由建构,任何没有经过重新构建的知识记忆都是无效的学习。基于建构主义的观点认为教育有两大目标:引导学生对新信息进行解释,强调学习的结果,价值有限;训练学生构建解释的能力,强调学习的方法更为关键。
完善的工程教育所培养的人才,首先是一个心智健全的社会人,有良好的身体素质和心理素质;其次需要有扎实过硬的专业技能;最后还应该具备一系列专业相关的工程特质。由于软件产品的不可见、高复杂性,软件质量保证的有效方法就是进行开发过程控制,“可控的开发过程可以得到可控的质量”。因此,在软件工程教育过程中,要特别训练学生对质量负责的意识、按照规范进行开发的意识。由于软件技术更新周期短,开发人员需要持续更新自身的知识和技术,因而较强的自学能力尤为重要。因为一方面软件主要服务于其他应用领域,需要与其他领域的客户进行深入沟通,而沟通的质量直接影响软件产品的正确性;另一方面软件不可见,使得项目人员需要使用各种语言和工具来描述开发过程、中间和最终的结果、过程和结果中存在的问题、相应的解决方案等,所以良好的沟通与精确的表达在软件工程中非常重要。除基本的工程特殊素质之外,软件工程教育需要特别强调规范意识、质量意识、责任心、自学能力、沟通能力等素质的全面培养。但工程素质是开发人员的内在品质,简单的知识讲授难以直接转化为学生的综合素质。因此,基于建构主义中“行动、反馈、修正解释”迭代往复的基本思想,本文认为必须在一个又一个的软件项目开发过程中进行反复的闭环式研磨,才能真正培养软件工程专业本科生的工程特质。
3 面向工程能力的教学内容
软件工程专业学生技能和素质的形成和提升需要依托基于具体软件工程项目的技能实践训练,而知识体系的构建也需要在实践中进行修正、提升。因此,面向工程能力的教学内容组织应以工程项目实践为中心展开,项目实践类课程时间先行、课时最大化,其他课程都服务于项目实践类课程,其教学内容组织的基本原则如下:
1)教学内容以项目实践课程为中心,即全部课程或为项目实践课程提供必要的知识、技能储备,或是项目实践课程的理论总结和提升,所有课程内容都应与实践课程相关联。
2)项目实践课程分为个体编程项目实践、团体软件开发技术项目实践、系统分析与设计项目实践、综合项目实践等不同层次。个体编程项目实践是在学习编程语言之后,以训练程序思维、熟悉编程语言为目的的实践;团体软件开发技术项目实践是在学习高级软件开发技术后,以学习软件实现技术为目的项目实践;系统分析与设计项目实践是在学习需求分析、系统设计原理、软件架构、设计模式等课程之后展开实践训练,以锻炼学生软件需求收集与分析、建模技能为目的的实践。
3)项目实践课程时间安排先行,将与工程能力培养相关的课程的时间优先级设为最高。由于软件开发技术实践与工程基础课、计算机科学基础课没有紧密的关联,因此实践类课程应该尽量提前。要突破传统先开设工程基础课,再开设专业基础课的内容组织方式,因为此种组织方式使学生得到实践训练的时间太少,而技能和素质需要在反复的项目训练中才能得以提升。
4)保证项目实践类课程的课时安排充足,在满足主要教学内容的前提下尽量压缩非专业课程、非实践课程的课时安排。传统软件工程教学内容组织时,计算机科学基础课占用了过多的内容,影响了工程能力的训练。对于软件工程专业来说,软件工程专业只需要计算机科学相关理论课程的概念和基本原理,而知识细节、证明不是非常必要。因而可以抽取计算机科学基础课的核心内容进行讲授,如果学生有特殊兴趣,可以作为选修内容,甚至可以把多门计算机基础课综合为一门。
4 面向工程能力的教学方法
当前软件工程专业教师们倾向于用分析、演绎的方法从事教育教学,围绕“教师中心、教材中心和课堂中心”组织[5],导致学生只是记忆了一堆知识,遇到实际问题不知道如何用概念进行描述、如何运用所学知识分析问题的原因、如何提出可行的方案实施。
由于高校教师在专业教学中的作用主要有:使用有效的教学手段帮助学生用现有经验、知识重构所传授的知识,帮助提高学生构建知识的效率和准确性;构建学生可以进行工程实践的环境,制订实践目标,被动地提供帮助,并对学生的行为进行评价。因此面向工程能力的软件工程教学方法的核心思想为:整个教学以学生为中心,专业教师设置“主题”问题旗帜式导向,督导教师全程隐形监督控制,充分激发学生主动自发学习的内在欲望。
因此,面向工程能力的软件工程教学方法应着眼于以下三个方面:
1)作为主观愿意自主学习的自由个体,学生自身有着学习理论知识、锻炼专业技能、提高职业素养的强烈欲望,能够积极主动地查阅相关技术资料、进行各类实验或实践;
2)专业教师能够制订有针对性、切实可行的学习目标,结合不同情境的不同“主题”提出环环相扣的问题,并在学生自主学习过程中及时有效地提供必要的提点,循序渐进地引导学生自主优化自己的项目开发技能,因人而异地协助每一个学生找到适合自己的软件工程能力提升途径;
3)在整个教学过程中,教评分离,督导教师能够采用“离线”书面(如电子邮件、纸质材料等)和“在线”面谈(如讨论会、一对一谈话等)相结合的方式,全程“隐形”监督,实时关注所有学生的学习动向,定期了解所有学生每一阶段的学习态度、学习结果和学习方法。根据事先确定的考核指标进行综合评价,并对每一个学生给出有针对性的改进建议。
在整个过程中,学生的关键在于“主动自发”,必须在日常教学中不断强化其教学主体的意識,时时、事事、处处地主张“我要学”;专业教师的关键在于“目标的设置和问题的设计”,只有学习目标明确可行、问题主题切实合适,才能真正引领学生的思想和精神进入工程实践的情景,帮助其完成从“在读本科生”到“工程技术人员”的角色转换;督导教师的关键在于“考核目标的明确和考核标准的制定”,目标决定了处理问题的出发点和具体方法,督导教师必须与足够了解软件系统开发流程、具有一定项目开发背景的专业教师充分讨论,结合学习目标明确考核目标,根据考核目标制定考核标准,才能充分利用考核环节激发学生自主学习的内在动力。
5 结束语
当下软件企业及产业界对高校培养的软件工程人才的满意度较低,软件工程专业本科教育的培养目标、培养方案、课程体系、教学方法、评价方法等需要加强研究和实践。针对此问题和现状,本文认为软件工程教育的关键在于提升本科生的工程能力,因此在解析当前软件工程教育的主要问题和软件工程专业特点的基础上,提出面向工程能力的软件工程专业本科培养模式,教学内容以工程项目实践为核心,以软件项目开发的实践训练为框架,项目实践类课程时间先行、课时最大化,其他课程都服务于项目实践类课程,教学活动围绕软件工程能力的形成和提升而设置与展开;教学过程以学生为主体,专业教师设置“主题”问题进行旗帜式导向,督导教师采用过程评价与结果评价相结合的综合评价方式全程隐形监督控制,充分激发学生主动自发学习的内在欲望。
本模式并非主张弱化软件工程理论知识的教学,而是要强化把理论与实践相结合的能力培养,即知识的运用能力(包含用概念、模型、原理等描述问题的能力,理论化地分析问题的能力,基于理论、结合问题的特殊性提出解决方案的能力,方案优劣评估的能力,实践经验、教训总结与提升的能力)。高校四年培养的软件工程专业本科生不应该是只会一个个知识点、不能参与软件项目开发的“工程”书生,也不应该在职业生涯中永远只能是流水线、机械性编码的IT工匠,而应该是一个马上读春秋的职场将帅,能够持续地用知识提升技术、用技术理解知识。
本文提出的面向工程能力的软件工程专业本科培养模式适用于小班教学,针对当前一般高校师生比大的现状,需要开展深入的探索和研究。
参考文献;
[1] 张小川,凃飞,王森,等.软件工程专业学生实践能力培养体系[J].计算机教育,2013(16):1-3,8.
[2] 文俊浩,徐玲,熊庆宇,等.渐进性阶梯式工程实践教学体系的构造[J].高等工程教育研究,2014(1):159-162,180.
[3] U.S. National Academy of Engineering.The Engineer of 2020: Visions of Engineering in the New Century[M].Washington,D.C.:National Academies Press,2004.
[4] Crawley E F, Malmqvist J,Ostlund S,et,al.重新认识工程教育一国际 CDIO培养模式与方法[M].顾佩华,沈民奋,陆小华,译.北京:高等教育出版社,2009.
[5] 徐玲,高旻,文俊浩,等.软件工程专业实践教学质量保障体系探索[J].实验室研究与探索,2015,34(8):205-208,217.
【通联编辑:代影】
收稿日期:2021-11-26
基金项目:该文为重庆市研究生教育教學改革研究项目“校企合作实践基地驱动的计算机类专业型硕士工程能力培养模式”阶段性成果(课题编号:yjg213065)
作者简介:徐传运(1979—),男,重庆人,副教授,博士,重庆师范大学计算机与信息科学学院软件工程系教师,主要研究方向为软件工程、人工智能。