张树兵,衡红军,张 良,姜 洋
(中国民航大学计算机学院,天津300300)
《VB程序设计》课程是中国民航大学交通运输专业的计算机技术基础课,课程教学目标是掌握高级程序设计语言的知识、程序设计的技术和基本算法,深入理解并掌握程序设计的思维和方法,培养学生发现问题、分析问题、解决问题、探索和创新的能力以及计算思维和复合思维的能力。然而,在现实中,实现上述目标并不容易,究其原因,有很多因素影响教学质量,尤其是师资水平、课程建设水平、灌输为主教学模式和学生学习积极性不高等。
MOOC[1-2]是近几年出现的新的教学模式,是大规模在线开放教学课堂,是现代教学技术与网络技术结合的产物,彻底改变了课堂教学理念和方式。中国大学慕课、清华大学、北京大学等国内知名大学,为全球学者提供优秀质量的MOOC平台教学课程。针对程序设计类课程[3-4],如何充分利用国内优质课程资源,如何使MOOC平台微型化的学习单元设计和线下的编程能力训练模式有机结合[5-6],是提高教学效果的一个重要突破方向和路径,已经有了一些探索和实践。为了有效利用一流大学的MOOC优质课程资源,为了让学生深刻理解领会编程思想,养成良好编程思维习惯,VB课程组、逐步探索和实践了一套全新的基于MOOCS的问题导向式程序设计能力培养教学新模式,学生学习兴趣高涨,取得了良好的教学效果。
新模式教学总体设计思路是:利用MOOC的知识学习+编程实践能力的训练,注重编程思想熏陶,编程方法传授。利用MOOC进行知识学习的优势为:学生直接获得了高水平教师的传授,能够加强对所学基础内容和重点内容的精确理解,建立整本书的基本概念体系和基本语法规则,为后续的编程能力训练打下一个坚实的基础。编程能力训练以问题导向式方法进行,结合各章节的基本概念和基本语法规则,从生产、生活中选择有实际问题背景的教学案例,在问题情境中,教师引导学生实践编写程序的整个流程,领会其中编程思想,学习编程技巧,熟悉相关知识点,逐步提高编程能力。
为了获得高质量的MOOC资源,课程组积极组织了多次研讨和精心筛选,最终我们采用了同济大学龚沛曾老师主讲的《VB程序设计》。为了利用好MOOCS资源,让学生学习有效果,养成自学习惯,我们的教学设计包括以下四个环节:MOOCS资源的精编,学生自学MOOC的组织,作业设计,作业讲解,下面依次介绍:
教师应在授课前熟悉和学习同济大学VB的MOOC教学视频,针对每个视频了解知识点、案例、讲解思路、教学疑难点等内容,再结合学校VB课程的教学大纲和计划,对视频使用做出详细安排,在授课前按课程进度列出安排表,并发布给学生。
要求学生在指定时间内完成MOOC自学,自学完后,要记录视频中不懂的地方,可以通过答疑群从老师处得到解答,或者上课期间向老师当面请教。在具体实践中,存在很多问题,主要是学生自觉性不够,学生脑袋里“跟着老师学”的思想根深蒂固,还没有形成自己主动学习的习惯,这就需要老师线下强有力的教学监督和管理机制,督促学生端正学习态度,改变不良学习习惯。可采取学习笔记评比,表彰措施优秀笔记等办法,督促学生自觉主动学习。
为了检查学生自学MOOCS效果,老师可根据视频涉及的知识点,设计作业题,作业的设计重点是针对学生常犯的错误,设置一些概念上和语法规则理解上的辨析题,为后续学习奠定扎实的基础。整个学期的作业在开学前一起发布给学生,要求学生必须在该章老师授课前完成,并要求学生在课前独立完成,上交纸质作业,按作业完成情况给出成绩,计入结课成绩。
教师建立QQ或微信的课程答疑群,实时在线回答学生的问题,解决学生的疑惑。教师在理论课堂上进行作业讲解,纠正学生的错误理解,建立正确的概念和认识。这样的教学安排完全颠覆了传统教学模式,学生通过课下自学获得了基本知识,为教师课上节省了大量时间,从而使老师可以集中精力培养学生的编程能力,最终提高教学效率和教学质量。教师上课第一任务不是传授基本概念和语法规则,而是检查学生自学MOOCS的情况,通过课堂作业习题的讲解,帮助学生进一步掌握基础知识,教师应利用自己丰富教学经验,判断章节知识点的重点、难点,并且有针对性地进行讲授,解决学生在自学过程中碰到的难题。
在传统的教学中,学生碰到一个全新问题时,往往只会照葫芦画瓢,机械模仿,对编程思维方式缺乏深刻理解,造成这种结果一个主要因素是教学中过度注重了代码解读,而对隐藏在代码之后深层次的思维活动,没有给予有效分析和演示。而过于抽象的缺乏实际问题背景的教学案例也会加重这种情况的发生。因此,应将教学重心由传统的知识传授转向编程思想和思路的启发,课上教学为问题导向式的编程能力训练。
教师广泛阅读国内外同类教材的例题和习题,结合教师自己的编程经验,筛选出近50道具有实际问题背景的教学案例,题目来源有3个方面:经典案例(IF版、循环版、数组版的猜数游戏等),教材案例,实际问题解决(Word字数统计功能、Word查找替换、全班学生随机点名、交通红绿灯控制、飞机飞行动画演示等)。
综上所述,在具体授课中,老师往往陷入语法细节讲授的沼泽里,而最重要的编程思想和思维训练过程却被忽略。为了解决这个问题,通过反复实践和不断改进,摸索出了一套行之有效的注重编程思想的案例讲授方案:①实际问题分析或案例结果分析,针对实际问题,注重引导学生,从实际问题中,提取出要处理的原始数据,分析出数据处理的相关步骤(算法);针对具体小问题,按已知什么数据求什么数据模式,分析数据,分析数据处理算法;②以数据为中心,以数据存储方式(变量、数组、文件)、数据输入方式(相关控件)、数据处理方式(公式或算法)和数据输出控制四个环节进行程序设计,总结共性部分,分析程序的个性部分。
在具体讲授中,每个程序按照问题分析—数据分析—程序框架伪代码—现场编程—调试和运行—程序功能拓展和完善六个步骤详细讲解。要求学生在老师讲解下,用汉语或英语写出程序框架伪代码,然后才是分析或套用VB相关知识点,将伪码翻译成VB合格的代码。再具体问题环境中,演示如何利用VB提供的语法结构或小工具解决实际问题,长而久之,形成自己的编程思维方式,并付之实践。
通过老师现场编程,而不是传统的贴出代码将代码方式,一步一步地分解地实现程序要实现的功能,这样能使学生更能深刻理解代码为什么要这样写的背后深层此原因。这样做还可以使教师灵活地修改代码,实时演示编写该案例时学生容易犯的各种错误,有助于学生少犯错误,更深刻理解相关语法规则。在具体实践中,学生往往兴趣盎然,经常提出老师意想不到的想法或功能拓展。老师应抓住有利时机,利用其深厚的编程经验,快速实现学生的新需求,往往能令学生信服,在师生良性交互中,共同交流编程策略。如:在猜数游戏中,有学生提出让机器自动随机产生答案,看需要几次能猜中?还有根据猜数的次数,给游戏者贴上各种雷人的标签等;在统计字符不同类型个数的经典案例中,学生提出如果碰到汉字,如何统计?碰到英文单词,如何区分和统计个数等。
为了打破理论和实践的界限,让学生边听讲边练习,第一时间深刻理解代码的含义和领会代码之后的逻辑之美,教师应鼓励学生带笔记本电脑来教室上课。在教师现场编写代码阶段,学生也可同时在座位上输入教师的代码或自己的代码,调试运行,测试输出结果是否正确,这样既能提高学习氛围,又能将自己所想立刻实践,老师可以第一时间解决学生遇到的问题,引导学生认识到自己的不足,提高动手能力训练。
为了督促学生养成独立编程的习惯,学以致用,教师可布置一些有实际问题背景的应用题,这些题都是教师的独创,学生无法获得正确的代码,只能自己寻找答案,并在老师指导下,加以解决。如“手机短信发送完整过程”“门禁系统仿真实现”“工商银行登录界面设计”“民航大学绩点计算程序”“民航大学奖学金指标评判”等,由于具有较强的实用性,往往能激发学生兴趣,积极开展编程训练。另外,教师应鼓励一题多解,拓宽学生的视野,邀请有独创思路的学生,讲解其开发程序的步骤。
实验环节应依据教材的实验指导书,要求学生独立完成,教师现场指导实验中遇到的各种各样的问题,培养学生程序调试能力,检验学生程序设计开发的水平。
为了解决尖子生“吃不饱”的问题,为了培养交通运输行业的领军人才,可在期中考试后,选拔一些优秀学生,组建一个面向民航空中交通管制领域软件开发的编程提高班。该班单独设班上课,采用国外主流优秀教材为教学内容,不仅包括VB知识拓展,而且增加了软件开发完整流程的教学内容,软件开发流程选用《HeadFirst软件开发》,VB采用《Visual Basic大学教程》。老师严格按照软件开发流程各个步骤,以“争上游扑克游戏”软件开发为案例,向学生们演示软件开发完整过程,重点讲解需求分析、框架设计和重要核心算法设计。要求学生以该游戏为样板,结合民航空管领域的实际问题或已有信息处理软件,从头到尾,自己独立开发一个面向专业应用的作品。目前,大一学生自愿成立作品开发小组,在老师的指导下,自学相关内容,开发了一些民航领域的优秀作品:飞机多人选座系统、飞行器机场路径规划仿真系统、地面管制机位自动调配系统、民航订票查询支付系统、双跑道容量预估算法研究、在家自助值机系统等,极大锻炼了学生软件开发能力,达到一定水准,为大学生创新创业项目提供了一批优秀队员。
教学实践表明,基于MOOCS的问题导向式程序设计能力培养新模式,可以使学生养成自学习惯,锻炼了不断获取新知识的能力,而老师将教学重心从知识传授转移到能力培养,将传统灌输教学模式变为学生自主学习新模式,取得了良好的教学效果。