孙媛
(濮阳职业技术学院 数学与信息工程学院,河南 濮阳 457000)
根据国家统计局2019年统计数据,当年我国信息传输、计算机服务和软件开发等行业就业人员435万人,其中,80%左右从事计算机软件相关行业,如软件系统销售、软件系统使用培训,甚至软件公司的内部服务,其工作实质上并非软件开发;15%左右从事软件系统的后期测试、代码维护等工作;只有不到5%从事专业的软件开发①。软件技术专业核心能力就是软件开发,也就是说,软件技术专业的首要培养目标就软件工程师。软件工程师具有独立的软件设计开发能力,能够独立完成一款软件或其中某个功能模块的设计开发工作[1](13)。软件开发工程师需要具备以下核心能力:软件项目管理能力、面向对象的程序设计能力、软件测试能力、数据库应用技术开发能力、实际项目开发能力等。软件开发工程师是我国目前急缺的一类人才,但目前这类人才培养存在短板。本文拟从一线教师的视角,谈一谈如何提升我国计算机软件类人才核心能力培养的质量和水平。
大多数普通高等学校的人才培养中,计算机专业人才的培养与社会的发展是不相适应的。一方面,社会急需大量的计算机人才,另一方面,高校计算机专业培养出来的学生,并不能适应岗位的需求,不能适应社会的发展。调查表明,当前企业中既有通用的软件、工具,也有根据自身特殊的专业需求和技术要求定制的操作平台。而大多数高校的计算机专业,其培养目标比较宽泛,针对性不强,只是提出了“培养应用型创新人才”之类的目标,实际进行课程设置时,却没有根据具体的市场需求进行细化培养方向和目标。这样就使人才培养与市场需求相脱节,不能实现有效的对接。这也是造成学生就业难,就业后适应不了工作需要的主要问题之一。
任何专业、行业都有自己的知识体系,反映在学校教育上就是培养不同专业、行业的人才就需要设置相应的课程体系。在现代,学科高度分化、专业化、专门化,而实际工作能力却需要多学科知识理论的支撑。高校培养计算机软件类人才不能与短期培训一样,只重视当前流行的语言编程能力的培养,不应简单强调开设与编程能力直接对应的课程,而应当构建以培养编程能力为核心的课程体系。但不少高校为了使学生快速掌握编程能力,在尚未开设计算机程序设计课程的相关前导课程时,第一学期就开设计算机程序设计课程,而英语、数学、软件工程、计算机网络等课程往往是分不开的,这就将计算机软件编程置于悬空孤立的境地[2](68)。这样做实际上是欲速则不达:计算机学科是从美国发展起来的,计算机编程语言通常都是英语,没有一定的计算机英语基础,连简单的计算机命令都写不出来,简单的变量也无法规范命名,大量本是自己命名的变量自己也很难弄清其含义。数学是逻辑思维的代名词,没有一定的数学知识和数学思维能力,就无法编制计算机程序,至多不过是大量命令的堆积,很难编制出具有实际应用价值的程序。软件工程课程主要介绍软件开发的基本思路、方式和方法,为编程提供理论指导,没有理论指导,程序设计就是盲目的,工作效率低下。而成熟的软件产品是要在网络平台上运行的,没有基本的网络知识,就难以设计出适应网络环境的软件产品。总之,课程体系不完整导致学生相关知识体系不完整,严重影响计算机软件类人才的培养质量,导致毕业生实际工作能力不足,发展后劲不足。
在我们的计算机软件人才培养过程中,只注重了计算机软件编程知识的学习,并没有去注重计算机软件程序设计能力的培养,包括对要解决的问题进行需求分析、解决问题的方案分析和设计、不可预期问题的处理等等,不能设计出一个巧妙的解决方案,就不可能成为我们所说的真正的软件工程师。
培养计算机专业人才的实践能力,需要从课程实验课程设计到毕业设计,最后到专业实习,一步步地不断的积累经验,一点点地提升他们的实践能力。在日常的计算机教学中,就可以采用实例教学的方法,经常性地设置一些小的、合理的实践情境,可以给学生提供更多的学习机会,更快更好地培养他们解决实际问题的能力和创新能力,同时也可以激发学生的学习兴趣,让他们更加喜欢这个专业,进行主动的学习。
教学理论向教学实践转化,回到实践、指导实践、接受实践检验、修正和进一步发展等等活动过程,其实就是我们近年来热烈讨论和实行的教学改革实验,同时也就是教学模式的生成过程。只不过我们一些同志一方面兴高采烈地赞赏和参与教学实验,一方面却又在那里消极议论:教学理论脱离实际。而没有把这两件事情联系起来,没有意识到:教学实验的兴起和教学模式研究的开展,正在切实地解决教学理论脱离实际的问题。国内外任何一个教学实验,无不体现了理论向实践转化和进一步发展的过程。例如,规模很大的自学辅导实验,就是根据教师指导学生学习书本知识的理论,学生应该作为教学主体的理论,学生学习具有个别差异的理论等,第一步提出教会学生自己读书以达到培养自学能力和提高教学质量的目的。第二步设计特殊教材或自学提纲、课的类型、教学方法,以及教师和学生活动的安排。第三步付诸实施。最后,对学生学业成绩和能力进行分析评定。这样,有关的教学理论不仅转化为实际活动,指导教学获得实际效果,而且生成了自学辅导教学模式。
计算机程序设计由两部分构成:基于某种编程语言的语法+算法。语法是基础,是基于某种编程语言的书写规则,按照既定的规则进行书写才能不被认为是错误的。算法是灵魂,是指一个问题的完成解决方案,包括对问题的分析、解决方案的设计、问题的解决处理,是解决一个问题的方方面面,和具体的编程语言没有必然的联系,重要的是体现分析和解决问题的能力。
在学校三年内的任何学期,学生都可以选择修习选修系列中的基础类、实用类、拓展类、第二外国语类等课程,以丰富学习内容,拓展学习领域,发展学习兴趣。
成绩优秀且学有余力的学生,可提前完成必修课程和选择性必修课程,获得参加考试的资格。基础相对薄弱的学生,可以统筹规划学校三年内必修和选修课程的课时和学分,适当延长必修的时间,也可以通过修习选修课程系列中的基础类课程补习英语基础知识和基本技能,确保达到毕业要求。在完成必修课程后,有升学愿望的学生可以在大二和大三年级继续修习选择性课程,为专升本作准备。
学校应根据学生的不同能力水平和学习需要灵活设置和安排英语课程。因此课程设置要站在以学生为中心、以学生为本的基础上,符合学生发展的策略和要求,灵活安排英语课程。教师应指导学生和家长客观评估学生的学习能力,学生应根据其能力和意愿进行选课,并根据考试规定及时间安排,决定何时参加考试。
以软件技术专业为例,专业基础课包括:信息技术、HTML5+CSS3响应式web开发、JavaScript程序设计、图形图像处理、数据结构、Java编程基础、MySQL数据库技术、Python程序设计基础、计算机网络技术。专业基础课主要指上面谈到的知识体系的底层支持,包括编程语言的基本语法和思想。当学生有了牢固的基础知识以后,也会更加容易地突破自己的技术和成长瓶颈。我认为在技术领域里其实是不存在量变可以达到质变这么一说的。量变达到质变也是说只要我努力多写代码就能成为架构师,技术就会有一个质的突破,其实并不是这样的。
即使你代码写得再多,如果不懂得背后的技术原理,不懂得科学的学习方法,不进行归纳总结输出,是永远无法达到质变的。所以必须学习和打牢基础理论知识,如果总是只学习一些浮于表面上的东西,当技术形式发生一些变化后,你会发现之前学习的知识已经用不到了,又得重新学习,而在技术世界里变化又是非常快的,所以很多人都迷失在不停的学习技术形式之中,这也是造成一部分人感到焦虑的原因之一。
上层的技术实现都是有背后的理论基础作为支撑的,因为这些理论基础都是抽象和归纳,比如不管是Java还是其他的一些开发语言,只要只用TCP/IP协议,用的都是一样的原理,不同的只是技术实现形式上的差异,你只要打牢基础理论知识,抓住本质原理,不管它技术实现形式上如何变化,都能很快掌握它。上好专业技术课,首先要在课堂上重视。专业基础课一般都是低年级开设,所以上课的时候,要以日常化的形式去讲专业的知识,以讲清楚思想为第一目的。课下要布置对应的作业,作业以实践作业为主,难易程度稍高于课堂内容最好。其次,组织阶段性测试,让学生明白自己学习效果,及时查漏补缺,在不断进步的过程中,培养学生学习兴趣。
以软件技术专业为例,综合实践课包括:Android应用开发、Vue.js前端框架技术、SpringBoot框架技术、uni-app项目实战、JavaWeb项目实战。综合实践课程是基于学生的经验,密切联系学生自身生活和社会实际,体现对知识的综合应用的实践性课程,是指人才培养方案中规定的、集中在一段时间进行的计入学分的专业性实践教学活动。加强综合实践是高职高专的特色之一,根据科目制定不同的实践课程,可以是阶段性实践课程,可以是学期学年实践项目,可以是毕业设计等多种形式。
根据软件技术专业的特点,普通专业课采用一半理论一半实践,边讲边做的模式。把每个案例细分为多个任务,做出每个任务的详细说明和解决方案,让学生在规定的时间内完成,小的项目可以单人完成,大的项目可以多人以团队协作的方式完成。
除此之外,还有专门的实践课,比如项目案例课,项目实战课,比如智慧医疗案例,包括远程探视、远程会诊、自动报警、临床决策、智慧处方等模块,每个模块都可以看成是一个独立的小项目,想完成整个项目需要一个月或者两个月的连续讲解和实践过程。组织学生从组团队开始,完善需求分析,分析功能模块,分析数据存储,实现代码,代码测试与发布,完成整个流程,充分体现了学生们对知识的综合应用。
毕业前的论文答辩课,论文答辩的前期也是老师带少数学生做项目,也就是现代师带徒的形式。一个老师带领两三个学生,或者做企业的实际项目,以实际项目作为毕业论文的基础,或者带学生一起做科研,以高校科研作为学生论文的基础。
针对不同生源的文化基础和特点,要因材施教。从备教材,到备学生,在具有一定招生规模的专业中实施分类培养。将培养方向分为技术提升型、技术应用型和现代学徒制型。技能提升型以继续提升学历层次培养为主,技能应用型以促进更好就业为目标,现代学徒制是校企合作的模式。
每个学生的基础不同,对未来的规划也不同,应该根据学生的特点,为每个学生制定出适合自己的长期计划和短期计划,比如技能提升型,应该加大数学和英语等公共基础课的教学课时和学习难度,尽可能地和专升本考试接轨,和本科的基础要求接轨,帮助学生在专科阶段为升学做好准备。而技能应用型和现代学徒制班,他们未来都是要毕业即就业的,就业就是他们的长期规划,但依然应该根据学生的特点,为他们制定短期目标,比如有些学生逻辑思维不太好,我们可以让他们学习图形图像处理,学习前端设计。有些学生基本功好又勤奋,我们给他制定第一学期,学习好一门面向对象的程序语言,假期开始依托“蓝桥杯”往年赛题,开始研究算法;第二学期根据学生的学期情况,推荐优秀学生参加比赛,还有部分学生达不到竞赛水平的,通过努力学习;第三学期还有机会,争取人人有事做,竞赛常态化。还有一部分学生,年龄小,对自己的未来没有规划,就要多和他们聊想法,观察他们的日常上课情况、作业完成情况,根据初步判断,为这些学生制定一个简单的基本能完成的小任务,让他们在实现一点点计划后,强化兴趣爱好和自信心,后期再跟踪这些孩子的心理想法,随时调整计划。按照“基础扎实、知识面宽、能力强、素质高”的人才培养模式,让学生从入校开始就有明确的目标,根据目标调整自己的学习重点,形成因材施教、分类培养的人才培养模式,在提高教学质量上取得较好的效果。
“岗、课、证、赛”是指结合专业对应岗位设置课程,尤其是专业核心课程的设置,同时将职业资格证书考试课程与专业课程教学相衔接,做到课程与考证相结合,课程与职业资格证书融合,同时以赛促教,以赛促学,提升学生的动手能力与工作岗位的实战能力。有目标才会有学习的动力,才能不断超越自己。通过“岗课赛证”融通一体化教学,给学生更多的选择和更多的目标,使学生明白,学习不仅仅是为了期末考试,更是为了未来走上工作岗位做准备。课程和职业证书深度融合,深化教育教学模式改革,使企业的新技术、新技能及时进入专业教学内容,进一步增强职业教育的适应性。同时职业院校教师要主动提升素质、积极融入实践项目。
以移动应用开发专业为例,有如下核心课程:用户体验设计、HTML5+CSS3、Java程序设计、JavaScript程序设计、数据库原理及应用、移动应用开发、Vue.js前端框架技术、SpringBoot框架技术、微信小程序技术、软件测试技术、Android高级开发技术。
根据分析,该专业对应岗位有以下几种:
移动Web工程师需要以下课程:用户体验设计、HTML5+CSS3、JavaScript程序设计、Vue.js前端框架技术。
Android工程师需要以下课程:用户体验设计、Java程序设计、移动应用开发。
小程序工程师需要以下课程:用户体验设计、HTML5+CSS3、JavaScript程序设计、Vue.js前端框架技术、微信小程序技术。
软件开发工程师需要以下课程:Java程序设计、数据库原理及应用、SpringBoot框架技术、Android高级开发技术。
前端工程师需要以下课程:用户体验设计、HTML5+CSS3、JavaScript程序设计、Vue.js前端框架技术、微信小程序技术。
软件测试工程师需要课程:软件测试技术。
产品经理需要课程:用户体验设计。
高职高专认可的比赛有:
全国职业院校技能大赛移动应用开发赛项和世界技能大赛移动应用开发赛项,需要以下课程:户体验设计、HTML5+CSS3、Java程序设计、JavaScript程序设计移动应用开发、Vue.js前端框架技术、软件测试技术支持。
世界技能大赛商务软件解决方案赛项需要以下课程:用户体验设计、HTML5+CSS3、JavaScript程序设计、Vue.js前端框架技术、Java程序设计、数据库原理及应用、SpringBoot框架技术支持。
“挑战杯”和“中国软件杯”大赛需要以下课程:用户体验设计、HTML5+CSS3、JavaScript程序设计、Vue.js前端框架技术、Java程序设计、数据库原理及应用、SpringBoot框架技术支持。
和本专业相关的证书有:
华为的移动应用开发证书需要课程:移动应用开发和鸿蒙技术。
联想的移动互联网应用开发证书需要以下课程:移动应用开发、Android高级开发技术。
腾讯的安卓应用开发证书需要以下课程:移动应用开发、Android高级开发技术。
东软的JavaWeb应用开发证书需要以下课程:Java程序设计、数据库原理及应用、SpringBoot框架技术。
腾讯的微信小程序开发证书需要课程:微信小程序技术。
工信部的Web前端开发证书需要以下课程:用户体验设计、HTML5+CSS3、JavaScript程序设计、Vue.js前端框架技术。
由于计算机技能大赛的内容大都来自平时课程基础知识,但高于和难于课程基础知识,是对基础知识的灵活运用,所以通过竞赛的选拔,可以带动一大批学生加深对基础知识的理解。同时教师为了掌握竞赛系统,也必须熟悉和掌握大赛系统的规则、题库,因为这些都有助于教学内容的改进、教学方法的更新,真正做到课程为岗位设置,课程为比赛和考证服务,实现“岗课赛证”融通一体化教学。
培养计算机软件人才最根本的是要培养学生用程序设计的思维去分析和解决实际问题的能力,使他们能够设计开发出具有实用价值的应用软件。单靠计算机程序设计课程或编程技术课程等与计算机软件人才核心能力直接相关的课程培养不出这种能力,单靠知识理论灌输同样也培养不出这种能力。必须让学生掌握足够的相关知识理论,并通过大量实际训练,有针对性地培养学生的软件项目管理能力、面向对象程序设计能力、软件测试能力、数据库应用技术开发能力、实际项目开发能力等核心能力,才能成为相关行业企业合格的、高质量的计算机软件人才。
注释:
①国家统计局统计数据。