吴 劲,周 帆,王瑞锦,罗绪成
(电子科技大学 信息与软件工程学院,四川 成都 610054)
在OBE(Outcomes-Based Education,成 果导向教育)模式中,教育者必须对学生毕业时应达到的能力及其水平有清楚的认知,然后寻求设计适宜的教育方法和手段来保证学生达到这些预期目标[1]。OBE理念从传统的“以教师为中心”转向“以学生为中心”,强调教学目标要先于教学内容,掌握学生现有的学习能力水平,围绕实现学生毕业时应达到的能力和要求进行反向教学设计,教师循序渐进地进行“以学生为中心”的教学活动。
OBE工程教育模式是一项时间跨度长、牵涉面广、改革纵深大的综合教育改革,OBE不是对原有教学薄弱环节的缝缝补补,也不是在教学、课程或产学研教育中移入OBE的某个要素,而是以OBE蕴含的理念为指导,在充分借鉴、整合CDIO改革经验的基础上,对培养目标、课程内容、教学方法和教学评价进行变革[2]。
OBE设计思路如图1所示,按照“反向”设计思路,首先确定专业人才培养目标,根据培养目标,细化到毕业要求;按照毕业要求,确定课程体系,再根据不同课程教学内容和知识、能力培养要求,确定课程教学方法。在有效保障的基础上,通过多元评价来评价人才培养效果的达成情况,并在此基础上,形成教学反馈与改进措施,指导培养目标、毕业要求、课程体系以及教学方式的调适,形成持续改进、动态调整的人才培养机制[3]。
培养目标(Program Objective,PO)包括3个具体方面:知识结构、能力结构和素质结构,知识结构包含PO1(具备自然科学知识)、PO2(具备专业基础知识)、PO3(具备专业知识);能力结构包含PO4(获取知识的能力)、PO5(应用知识的能力)、PO6(团队协作及项目管理的能力);素质结构包含PO7(科学素养与职业道德)、PO8(人文素养和社会责任感)、PO9(创新意识和国际竞争力)。
图1 OBE设计思路
以电子科技大学为例,软件工程专业的毕业要求(Graduation Requirements,GR)分为了12条,每一条毕业要求又分解成几个指标点。程序设计与算法基础课程支持培养目标PO2和PO5,对应支持两个毕业要求:GR1(具备较完整的软件工程知识结构,能够将数学、自然科学、专业知识用于解决复杂软件系统问题)的指标点GR1.2(掌握软件工程、计算机及相关的基础知识,能将其应用于软件工程中的系统架构、网络通信、支撑平台等问题);GR5(能够针对复杂软件系统,选择与使用合适的开发环境、工具与技术标准,进行模拟和测试,并对输出结果进行分析,得出相应的评估结论)的指标点GR5.2(能够根据软件系统的应用场景,选择合适的开发环境、工具与技术标准进行软件系统的开发)。
课程根据需要支撑的培养目标和指标点,确定课程目标(Curriculum Objective,CO):CO1,了解软件工程、计算机的基本概念;CO2,掌握结构化程序设计方法;CO3,选择合适的开发环境、工具,用C语言进行软件系统的开发;CO4,训练学生的逻辑思维能力,培养其严谨的思维方式和良好的程序设计风格。
按知识点把课程分成9个课程模块(Curriculum Modular,CM):CM1,程序设计导论,了解计算机系统的基本构成,程序运行的基本原理,C语言的历史和特点;CM2,掌握C语言的格式化输入输出方法;CM3,掌握C语言的表达式的使用方法;CM4,掌握程序的3种基本结构——顺序结构、分支结构和循环结构;CM5,掌握C语言中的基本数据类型;CM6,掌握数组和结构这两种数据类型,能够应用这两种数据类型来描述实际应用中的数据;掌握这两种数据类型的成员访问方法;CM7,正确理解指针的概念、掌握两个运算符*和&的用法,熟练掌握指针与数组的关系,能运用指针解决实际问题;CM8,函数,掌握函数的定义和调用,领悟参数传值和传址的本质,学会使用模块化程序设计解决问题;CM9,掌握字符串的用法,掌握字符串数组和字符串指针。
课程支撑的培养目标、毕业要求及其指标点与课程模块的关系见表1,程序设计基础课程模块CM1、CM2、CM3、CM4、CM5支撑课程目标CO1、CO2,支撑毕业要求GR1的指标点GR1.2,支撑培养目标PO2;课程模块CM6、CM7、CM8、CM9支撑课程目标CO3、CO4,支撑毕业要求GR5的指标点GR5.2,支撑培养目标PO5。
表1 课程支撑关系
OBE工程教育是一个持续改进的过程,它要求建立一种有效的持续改进机制,从而实现如下功能:能够持续地改进培养目标,以保障其始终与内、外部需求相符合;能够持续地改进毕业要求,以保障其始终与培养目标相符合;能够持续地改进教学活动,以保障其始终与毕业要求相符合[4]。课程也在实践中构建了良性教学质量的持续改进模式,从阶段一的CDIO理念与课程的融合,过渡到阶段二的打破课程壁垒、多课程深度融合。
对软件工程专业学生而言,实践动手能力更多地体现在上机利用程序设计语言解决软件工程领域的实际问题,为了让学生能尽快进入角色,需要解决如下几方面的问题。
(1)理论与实践联系不够紧密。先上理论课、后上机实践的教学方式,对程序设计类课程而言,特别是对于经过题海战术洗礼的大学新生而言,很容易让他们把程序设计课程当成文科课程来学习,背语法、轻实践。
(2)计算机和软件知识体系的实践性、实用性、探索性和趣味性在教学中没有充分地体现出来。程序设计类语言种类繁多,但就其本质可分为面向过程、面向对象两类,因此在课程设置上,开设面向过程的C语言程序设计作为入门课程,将面向对象的Java或C++课程作为项目训练阶段的进阶课程。
这一阶段的具体改革措施如下。
(1)课程针对的是零基础的大学新生,担负导论课的要求,引导新生对计算机系统和软件系统有个初步的认知,引导其课前、课后的自我学习能力。
(2)通过直接在机房上课,讲和练紧密结合,帮助初学者学会调试、运行程序,调试时能够发现错误、纠正错误,快速提升学生编程能力。
(3)采用螺旋式的方式,先从最简单的内容入手,在后续章节进行扩展讲解,逐渐增加细节。强调软件工程,着眼于如何运用C语言来处理程序设计过程中产生的问题,强调程序的易读、可维护。
(4)建立以自动评测系统和实践动手能力考核为主的多元化考核体系,程序设计课程的考核成绩由3部分组成:①Online Judge平台编程作业成绩;②期末考试,题目类型强调学生读程序、写程序能力的考核;③综合实验成绩。
(5)强调程序设计语言的工具特点,要求学生在后续专业课程学习中继续上机实践,设计与实现如数据结构、操作系统、计算机网络等专业课程的内容。
(6)与工程项目相结合,特别是在程序设计的进阶课程面向对象程序设计课程中,编写相对大型的软件系统,鼓励学有余力的学生参加各类竞赛,在实践中提升编程能力。
传统教育的课程教学内容和教学时数是依据教材确定的。按学科需求构建的专业知识结构,被课程割裂成一个个独立的知识体系,并被固化在一本本“教材”之中[5]。OBE模式的核心就是以学生为中心,激发学生的主观能动性,促使知识的内涵和外延不断扩大,如何构建有效的知识图谱,是教育工作一线的广大教师需要认真思考的问题。
程序设计与算法基础是计算导论、C语言程序设计、数据结构和算法基础等课程内容的深度融合,从构建有效的知识图谱的角度,打破课程壁垒,对原有课程进行整合,不是简单、机械地课程内容堆积,而是系统性整合与深度优化。
第一学期开设程序设计与算法I:以程序设计基础为主,承担导论课程的任务,适当引入软件工程、数据结构和基础算法的内容。
第二学期开设程序设计与算法II:以数据结构与算法基础为主线,培养学生的计算思维能力。
程序设计与算法基础课程定位于计算机、软件工程专业的大学新生,是引导学生建立计算思维方式的重要课程,因此采用“人工智能+教育”新模式,以学生为中心,通过在教学内容、教学手段、系统支撑等方面进行探索和实践,可以构建基于“人工智能+教育”的以学生为中心的智慧学习生态系统。
该模式以学生为中心、以问题分析为导向,不是让学生去单纯学习语法规则,而是分析和理解为何会形成相应的规则,这些规则可以解决什么问题、不能解决什么问题,怎么基于规则、重组规则解决复杂工程问题。
构建智慧学习生态系统,实现人机合理的分工,将单调、重复的工作交给计算机系统,教师负责具有情感性、创造性的工作,教师通过对学生的学习效果相关数据信息进行采集、分析和评测,实施对学生的精准教学。
课程目标是普惠绝大多数学生,能够使初期水平不够的学生,在合理的知识图谱导航下找到适合自己的学习方式。需要教师探索基于人工智能的新教学模式,重构教学流程,并运用人工智能开展教学过程监测、学情分析和学业水平诊断,建立基于大数据的多维度综合性智能评价,精准评估教与学的绩效,实现因材施教,进行“程序设计与算法基础”课程“人工智能+教育”模式的探索与实践。
从2018年秋季学期开始,笔者进行了课程融合后的“程序设计与算法基础”第一轮实践,指标点达成度评价依赖课程的达成度,课程的达成度依赖期末考试、平时作业和综合实验,其计算方法见表2—表4,笔者以最近一次课程的数据来说明计算方法。
为了强调实践,期末考试的试题分三大类:①读程序按要求写结果;②读程序补齐代码(代码填空);③按要求写程序。表2是期末考试各个小题对应的课程模块和课程目标的关系表,并根据相应分数计算出的期末考试达成度。
表2 期末考试评价
表3 平时作业评价
表4 综合实验评价
表3是平时作业评价表,对应了4组实验,每组实验又包含若干上机实验题目,每组实验对应一个课程目标。所有的上机实验题目要求学生提交到电子科技大学卓越工程师实践教育平台的代码在线测评系统中,由系统自动根据程序源码判分,这部分内容允许学生在截止时间之前反复刷分,鼓励学生积极上机练习实践。
课程最后有一个综合应用所学知识点和算法解决实际工程问题的综合课程实验,表4中计算了综合实验的达成度。
根据表2、表3和表4的内容,可以计算出课程达成度,课程达成度评价见表5。这次的计算模型与课程融合加强了上机实践环节的考评,对学生的整体能力提升起到了促进作用。CO3指标全部由实践环节(平时上机作业+综合课程实验)支撑,充分体现了新工科的思路,强调做中学。语法基础部分的权重系数降低,综合知识应用部分的权重系数升高,进一步鼓励学生上机实践。
基于OBE和新工科要求下的课程融合的需要,在原有的“C语言程序设计”课程内容和课程深度上进行了扩展,课程名称改为“程序设计与算法基础I”。表6是指标点达成度评价表,表中权重系数指本课程对某项指标点达成度(一个指标点的达成度通常由多门课程支撑)的贡献度。与课程融合之前比较,语法基础部分讲授进度加快,跟不上进度的学生可以课后学习“程序设计基础”MOOC课程,该课程在学堂在线与课程同步上线,支持本课程的混合教学模式的尝试;增加了在线测评系统,平时作业全部提交到在线测评系统上,强化课后上机实验,强调做中学;在课程和实验中引导学生理解数据结构和基础算法的初步应用。
表5 课程达成度评价
表6 指标点达成度评价
电子科技大学信息与软件工程学院结合国家“卓越工程师教育培养计划”,坚持以学生为中心、以创新求发展的人才培养理念,培养专业知识厚、综合素质高、创新能力强、具有良好职业素养、拥有国际视野和社会竞争力强的工程型软件人才。积极贯彻“学生中心、产出导向、持续改进”三大理念,主动对标《华盛顿协议》和中国工程教育认证标准要求,修订培养目标、重组课程体系、深化课堂改革、明晰教师责任、健全评价机制、完善条件保障,着力建立持续改进的质量文化,使人才培养质量明显提升。2016年软件工程专业一次通过了中国工程教育专业认证协会的工程教育认证。
在OBE模式下,程序设计与算法基础课程持续改进的第2阶段探索与实践才刚刚开始,课程融合后的第一轮实践,从达成度计算的结果和学生的评教反馈可以看出效果良好,课程群将再接再厉,持续改进,对课程内容按OBE要求进一步深度融合。