杨晓波
(西藏光信息处理与可视化技术重点实验室,西藏民族大学信息工程学院,陕西 咸阳 712082)
程序设计是数字媒体技术专业的必修课程,目标是让学生掌握并熟练运用一门或多门程序设计语言基础,具备一定的编程能力,为以后的项目开发打好基础;使学生了解计算机解决问题的详细过程,让学生具备计算思维,提高学生分析问题和解决问题的能力,为后续专业课程的学习打下坚实的基础。西藏民族大学数媒专业自治区内外混合班中约有一半是汉族学生,一半是藏族学生。给这样的班级开展程序设计课程不是一件容易的事,汉藏学生思维习惯有差别、文化基础差距较大,所以教学过程中就会出现两极分化现象。如果放慢教学进度,汉族学生就会觉得教学内容过于简单,不够学;如果按正常教学进度开展教学,藏族学生就会觉得教学内容难度较大,学不会、跟不上。为了解决区内外混合班教学中这些矛盾,在教学设计中采用史密斯—雷根模型设计教学。史密斯—雷根模型(见图1),是一种改进后的、系统全面的教学设计方法[1][2],在教学前首先进行教学分析,分析学习者特征,然后对学习任务进行分析,并对学习环境加以分析;教学策略设计如何组织教学、教学内容如何传递以及如何管理教学资源,在此基础上制作教学资料;对教学进行评价,以评价所得到的反馈为依据再对教学进行修改,如此循环往复提高教学效果。
图1 史密斯—雷根模型
大多数程序设计语言课程是先进行理论教学,再进行上机实践,大部分课程都是从三大基本结构讲起,实例内容主要以经典算法为主,学生的学习兴趣难以被激发,学生也不能将所学内容举一反三,更不能用以解决实际问题。
1.2.1 学生文化基础相差较大,层次不一
西藏自治区内外混合班学生有来自全国各地的汉族学生和来自西藏自治区的藏族学生,总的来说汉族学生文化基础较好,大多从小学就接触计算机甚至接触过编程;而藏族学生文化基础相对薄弱,接触计算机较晚,英语功底相对较弱,程序设计语句又都是英语单词。所以对这种生源质量相差较大、层次不同的学生用统一的教学内容开展教学难度很大,效果也不好。
1.2.2 藏族学生的兴趣没有被调动起来
藏族学生能歌善舞,擅长形象思维,对图像和色彩敏感,数学基础相对薄弱,编程的逻辑思维有待提高,其中还有一批学生未做好大学的学习规划,将时间和精力放在丰富多彩、形形色色的各种社团活动上,热衷于学生会工作,课余时间没有被很好地利用到学习专业课上[3]。
程序设计类课程的教学目标是培养学生的分析和解决问题的能力、设计开发软件系统的能力、团队协作的能力和一定的创新能力。为有效达成课程的教学目标,进行了大量的教学改革,如项目式教学、以赛促教促学[4][5],这些方法收到了一些成效,也出现一些新的问题。较少部分学生能跟上教学进度,一部分学生在项目小组中浑水摸鱼,一部分学生由于跟不上对课程失去兴趣。
2.1.1 选择合适的教学语言
数字媒体技术专业是服务于社会发展与文化建设,体现科学与艺术深度融合特色的交叉学科专业[6],所以开设互动艺术编程课程,以Processing作为程序设计语言。Processing是一门艺术编程设计语言,用短短的几行代码创造出图形,随后又让图形开始运动,再加上一些代码便可以让图形自我学习,像自然中的生命一样生长、蔓延和改变[7]。将编程与艺术创作结合起来,学生的学习兴趣大大提高。
2.1.2 提高程序代码输入速度
要提高学生编程能力首先要提高学生键盘打字速度。藏族学生普遍对英文不是很熟练,有的学生甚至26个字母认识不完全,所以打字速度很慢。在新生入学后就为学生推荐键盘指位图,帮助学生尽早学会盲打,并在程序设计课程中强化代码输入速度,这一点在混合班中非常重要。
2.1.3 提高学生英文水平
藏族学生编程时速度慢的另一个重要原因是英语水平较差,输入语句时不是逐个单词输入,而是一个字母一个字母地输入,所以速度很难提高。解决这个问题不能仅依赖于英语课程的学习,而要采取相应的针对性措施。一是将程序设计中常用单词列出来,指导学生用词根记忆法、联想记忆法等方法去记忆。二是程序开发环境和集成开发环境不用中文版而用英文版,课程开始时,教师在上课的同时对集成开发环境中菜单和界面中碰到的单词不断解释其含义并强化拼写,强化学生记忆。如此坚持三至四周,藏族学生和英文较差的汉族学生均能跟上教学节奏,不再抗拒英文编程环境。
2.1.4 教学内容设计
在专业教学中,开设的程序设计语言一般不止一种,大部分课程不管学生学的是第几门语言课,往往都是按常量、变量、类型、顺序结构、选择结构、循环结构……的教学顺序开展教学,导致学生每门程序设计语言都感觉只学习了三大基本结构。所以课程开始的设计很重要,先用processing语言实例绘制出色彩鲜艳的图形和丰富灵动的动画,让学生先热爱上这门课程。
2.1.5 教学模块设计
刚开始学习编程时,学生对变量不能理解,可以通过大量的实例和练习让学生学会灵活运用变量,比如图2用变量控制兔子的身体长度和眼睛大小,学生很快就会领会变量的用法。循环也是学生学习的难点之一,讲解时通过打印一个点线到打印一行点线引出一重循环,再到打印多行点线引出二重循环(见图3),让学生充分理解外循环走一步内循环走一圈。还可以增加几道练习强化学生对循环的理解。
图2 用变量控制兔子尺寸
图3 二重循环示例
再如函数的引入,首先讲解如何绘制一只猫头鹰,待学生在屏幕上绘制出一只猫头鹰后,让学生思考如何绘制两只、三只甚至多只大小不同的猫头鹰,如此很顺利地引入函数的概念,帮助学生在几分钟内就能学会使用函数。在此基础上引入对象、信息隐藏、数据封装、模块化和多文件处理。学生通过为对象添加颜色、大小等属性改变猫头鹰外观,用移动等方法做出运动动画,如此,让程序设计中较难理解的概念变得有趣且容易理解。
2.1.6 结帮对
编程是一项复杂的学习,考虑到藏汉学生学习能力的差异性,结帮对学习要求学生具有协作精神,将藏汉学生搭配成学习小组组织教与学[8],这在国内外都已经进行了实践[9][10][11]。学生通过小组协作可以互相解决程序中的错误,不同的想法互相碰撞出火花,相互鼓励,交流沟通能力和团队协作能力都可以大大提高,学习兴趣也更加浓厚。
2.2.1 分层教学和个性化培养
通过打字训练和英文强化训练后,藏族学生编程的基本困难得以解决,但由于文化基础相对薄弱,在教学内容接受上还会有差异。针对这种情况,可以进行分层式教学,首先提出一个基本问题并加以讲解,让大部分学生都能够理解并实现编程,对于接收快、反应快、很快就能完成任务的学生加以引导,让其增加程序功能,比如修改颜色、让图形随着鼠标动起来或增加其他交互功能;中等程度的学生可以完成基本功能并增加一两个功能;而对于反应较慢的学生,耐心指导,让其跟上教学进度。课堂上,学生绘制出基本形状后,引导学生对图形修改颜色、与鼠标和键盘交互(如让图形跟鼠标移动)、旋转、移动等动画,每个学生绘制的图形都不尽相同,仿佛每人都是艺术大师,所以学生的学习兴趣很高,基本上没有掉队的学生。通过层次化教学设计,使所有学生都能跟上课程,学生也不会因为一时跟不上而放弃课程的学习。
2.2.2 运用多种教学方法
教学过程中用到许多教学方法,如诱发法,通过一个个色彩绚丽的动画编程演示,激发学生的求知欲;发散法,同一问题引导学生从不同的角度思考,引导学生发散思维,编程绘制出不同风格的作品。
2.2.3 多类型课堂练习和课后作业
采用多种类型练习题,如迁移型练习,在讲解例题之后,对例题稍作修改让学生练习,培养学生举一反三的能力;诱导型练习,新知识点讲解前,预测学生可能碰到的难点,设计诱导性练习,使学生通过练习得到启示,循序渐进地理解难度较大的知识点;发散型练习,针对一个问题,从不同的角度和侧面探求不同的解决办法,从而激发学生的发散思维,展现个性。
2.2.4 教学技术的应用
教学中,除了讲解PPT课件和软件演示之外,还可以利用黑板和白板本画图进行讲解。但课程教学一般在机房开展,加之新冠肺炎疫情防控期间学生坐得比较分散,后几排学生看不到板书内容,可以利用电子教鞭和数位板进行图示和过程,运用极域、云课堂屏幕播放功能等方式解决该问题。
2.2.5 编译调试
程序运行难免出现错误,编译调试对藏汉学生都是一个挑战,是一个教学难点,教师要多次引导学生调试程序,修改错误。对于有明确提示的错误,指导学生查看、找到错误,并分析错误可能出现的原因;对于无提示信息的错误,通过添加注释、打印信息和绘制简单图形等方法,帮助学生找到错误所在的位置。
2.2.6 改变教学模式
大多数高校程序语言设计课程的教学分为课堂理论教学、上机练习、课后作业、期中考试和期末考试五大模块[12],理论教学与上机练习严重脱节,学生在上机练习时对课堂教学内容已遗忘得所剩无几。可以尝试改革教学方式,在机房边讲边练,对实例进行验证并对其进行创新改造,使理论与实践相结合。教师讲解之后,学生马上练习,学习效果明显提高,学生对课程学习兴趣也大大提高。
2.3.1 教学资源组织
充分运用MOOC、雨课堂等教学平台组织教学资源,提高教学效率和效果。将教学内容分解为相对独立的知识点,制作课件,录制微视频,视频时长控制在10分钟以内,将教学资源上传MOOC平台和雨课堂,创设移动式教学环境,线下与线上共同开展教与学。学生通过MOOC平台和雨课堂,可以通过视频和课件自主学习,对不太理解的内容可以反复观看学习;练习和作业任务通过雨课堂布置,学生完成后提交雨课堂平台,这些都成为后续课程的教学资源和课程考核的凭据。
2.3.2 充分运用网络
为防止学生过度上网玩游戏,机房授课时,大部分教师通常会关闭外网。但“堵”不是办法,疏导才是正理。充分利用网络,学生可上网查询颜色的RGB值,在processing官网上查询系统函数的用法,学生可以将程序代码等内容上传邮箱、雨课堂或百度网盘,作为自己的课程资源。通过这些方法,网络才真正成为学生手中的工具。
依据课程目标,采用多元的考核评价方法,开展过程性评价与课程目标评价相结合,利用MOOC和雨课堂记录的学生课堂学习考勤记录、线上学习的时间、提交作业次数、弹幕总次数、投稿总次数、阅读公告数、观看课件页数、课件哪些页面浏览时间长、作业的编程功能是否有创新或改进,每次作业的评分和作业的总分、线上考试总用时,以及各道题得分等数据,可视化分析学生的学习行为,查看学生的学习进度、学习规律、作业成绩以及编程中存在的问题。通过这些平时表现、作业成绩、期末大作业作品等,加权计算学生课程成绩。学生通过网上学习平台、问卷调查等方式对教师教学、教学环境、教学内容等进行反馈和评价,提出建议和意见。
以形成性评价为依据,对整体教学进行反思,并不断完善、改进教学设计。每堂课后,针对普遍存在的问题,在课堂上统一讲解或录制微视频上传雨课堂;针对个别问题可在课堂上单独辅导或通过QQ聊天、QQ远程桌面、微信视频等方式指导学生。学期末对整个课程进行梳理,总结经验,及时调整。
程序设计和软件开发课程的学习是一个循序渐进的过程,在课程教学中以史密斯—雷根模型为教学模式,设计教学内容,学生记忆和理解课程基础知识,模仿示范化例题,不断强化熟练编程,将前期所学知识不断应用到自己的练习和作业中,并在练习中创新和改进,从而提高学习效果[13]。从学生的课堂到课率,上机练习主动参与的积极性和线上作业提交率、完成度等可以看出,学生的学习效果、编程思维和学习兴趣都大大提升。MOOC和雨课堂中的教学大数据不仅可以为课程教学提供数据,以便更好地改进完善教学,还为挖掘学生的学习潜力、研究学生的学习习惯和行为模式、为政策制定和教务部门决策等提供参考,在学生职业规划和就业选择等方面提供科学依据。