探析五导法的程序设计课程群教学研究论文
摘要:针对程序设计课程群的教学,以人才培养目标的定位为基础,提出基于五导法的教学模式,分别阐释“导教、导学、导思、导用、导创”的含义和具体实施办法,说明如何围绕教学内容建立三维的教学资源,实施混合式教学,采用多样化的考核方式,以提高程序设计课程群的教学质量。
关键词:程序设计;课程群;教学模式;混合式教学
1背景
程序设计课程群包含的课程主要有程序设计基础(C语言)、数据结构、面向对象程序设计(Java语言)、程序设计课程设计等,是计算机专业的基石。这些课程之间存在紧密的依存、递进关系。对于广大的地方高校来说,开展程序设计课程群的教学研究,就是研究这些课程知识的“教法、学法、用法、创法”。文章将从教与学着手,探讨在教学中的所用、所感、所思、所改。
2五导法
所谓“五导法”就是在教学过程中进行的导教、导学、导思、导用、导创。
2.1导教
2.1.1知识点化繁为简
对于地方院校来说,计算机类专业人才培养计划中通常会先讲授程序设计基础(C语言)、再讲授数据结构、最后讲授最流行的面向对象语言——Java。在这些课程中存在大量的基本语法、原理和技巧,譬如:C语言的输入输出格式控制、运算符、表达式、运算规则、赋值语句等,灵活多样;数据结构中指针的使用无处不在;Java语言中包含权限的交叉融合、对象与引用的多态性等。对于初学者来说,教师必须采取有效的策略,比如选择性讲授,即先讲授最常使用的知识、应用方式,且大量运用演示法、案例法,让学生在实例中逐步理解、掌握、熟悉;再逐步延伸,增加深度和广度;最后还需要有画龙点睛的总结。在C语言教学中,若只顾及语法知识的全面性、完整性,将会导致顾此失彼、欲速而不达的结果;若只注重算法,而轻视、忽视基本语法,将导致程序代码的编写寸步难行、错误百出。所以,要秉持语法够用的原则。在数据结构课程中,大量的教材在讲述顺序线性表时,都是直接采用动态申请连续空间的方式来存储线性表中的元素[1]。这种方式显著地增加了学生学习的难度。为什么不先讲述使用静态的数组来存储元素,再过渡到动态的存储方式呢?所以,教师讲授时要化繁为简、由易及难、逐步深入,遵循循序渐进的认知规律。
2.1.2思维的转化
虽然程序设计的算法来源于数学,但不能照搬数学思维。譬如:三个数如何求最大值。数学思维使用的是三个单分支的if语句,且每个if语句中的表达式都是由两个与运算符连接三个关系表达式构成的;而程序设计思维使用的是一个赋值语句、两个单分支的if语句,且每个if语句中的表达式只是一个简单的关系运算。显然,后者不仅效率高,而且运用了程序设计中经常使用的一种技巧和思维,即“假设第一个数就是最大值”[2]。数学思维向程序设计思维的转变,需要一个过程、一段时间,需要培养。在程序设计教学的推进过程中,还存在着一个程序的main函数向多个子函数的转变(即程序模块化)、过程化程序设计向对象化程序设计的转变等,这是思维的.转变,也是教学的难点。
2.2导学
2.2.1量变到质变
学习没有捷径,只有经历大量的代码练习,才能保证编程水平质的提高。对于常用算法必须烂熟于心,日积月累,才能熟练生巧,才能应用,才可能有创新。
2.2.2课堂内外“三步曲”
每一门课程,教师必然对其有着深入的研究;每一节课,课堂上的教学内容必然是丰富的,重点和难点必然是清晰的。因此,需要学生课前预习、课上专心、课后复习。只有做到了课前预习,课堂上的学习才会是有的放矢;只有做到了课后复习,才能巩固课堂知识。所以,只有真正做到了“课前预习、课上专心、课后复习”的课堂内外三步曲,才能实现高效课堂。
2.2.3“三动”学习法
在实际教学中,教师发现,程序设计的初学者,在阅读自己或他人编写的程序代码时,采取的方式只是“动眼”,即用眼睛死死地盯着程序代码行中的各个符号。这样仅仅了解单个表达式、单条语句的表面意思,而不可能清楚变量值的变化、哪些语句被选择或被循环执行了,也就搞不清变量、表达式、语句的真正作用和含义,当然不能归纳出程序的功能,也得不出程序的正确结果。正确的做法是:拿出笔、摊开纸,依照程序语句的次序,认真地手工执行程序代码,把每个变量当前的值记录下来,如果存在循环,则把循环体重复执行3~5次,这样才能清晰掌握每个变量值的变化情况、每条语句的执行情况,进而推导、得出程序的功能或结果。也就是说,对于一段程序、一个算法,只有手工执行,才能理清其执行过程、功能。因此,在学习程序设计时,务必坚信不劳而获是天方夜谭,务必时刻执行勤能补拙,务必每题实践着“三动”学习法,即“动手、动脑、动眼”[3]。
2.3导思
2.3.1思考的广度
自顶向下、逐步求精,是程序设计的原则之一。任何复杂的问题都可以找到简单的原理或者雏形。譬如:3个整数求最值、10个整数求最值、数组求最值、选择排序等。这些问题的求解包括从顺序结构到选择结构、到一重循环、到二重循环;从单一的main函数实现到使用子函数实现。从这个例子可以看出,只有深刻理解求最值的雏形,才能顺利向广度推进。再譬如:使用线性表实现各种集合运算,对顺序存储来说基本操作就是元素的移动(即选择性赋值),对链式存储来说基本操作就是链的连接(即指针赋值)。
2.3.2思考的深度
在求最值的例子中,包含着这样一个拓展的问题:如何求解一个数组中的最大值和次大值。一种算法是这样的:max1=max2=a[0];for(i=1;i<n;i++){if(max1<a[i]){max2=max1;max1=a[i];}elseif(max2<a[i])max2=a[i];}但这个算法存在Bug,即如果第一个数就是最大值,则求出的次大值是错误的。修正Bug的方式有多种。从此例可以得出:要保证算法的正确性,必须多方测试,特别是边界、极限、特例等问题。对于求最值的问题,如何使用面向对象的思维来求解呢?如果是在main主方法中直接对数组求最大值,而没有定义任何其他成员变量和成员方法。这样的话,就完全没有运用面向对象的思维。正确的思维是:类中包含相应的成员变量、成员方法,尽量通过成员方法去操作成员变量。问题的关键是类中包含几个成员变量最合适呢?需要几个重载的构造方法呢?解答了这些问题,设计出的类才具有普适性、重用性,才是真正面向对象的思维。
2.3.3思考的维度
随着学习的不断深入、知识的不断积累,随之而来的是思考的深度、广度以及维度。解答一个问题可能有多种算法,通过多维度的思考、比较、分析,才能挑选出最清晰、最高效的算法。譬如:1-2+3-4+...…-100解答这个问题有多种方法,如每次把符号位乘以-1、判断当前项的奇偶性、把奇偶项分开计算、使用模运算来确定符号位、使用位与运算来确定符号位等,关键点在于实现各项的正负相间。这些方法中最后一种方法无疑是最“高大上”的。思考是建立在对相关知识熟练掌握基础之上的,否则就是缘木求鱼、胡思乱想。
2.4导用
学习的目的不是为了考试,是为了应用。譬如:在C语言中,模运算(即%)的意思是两个整数相除,(商是整数)取余数。基本应用有奇偶数的判别、素数的判别、整数各位数字的分离等,进一步的应用有求最大公约数、数学黑洞等,高级应用有模幂运算、孙子问题(中国剩余定理)、凯撒密码等[4],这些都是模运算的经典应用。在近年广受关注的大众化竞赛“蓝桥杯全国软件和信息技术专业人才大赛”中,也不乏模运算应用的试题。在模运算的应用从低级到中级、再到高级的过程中,往往是混合多方面知识的综合应用,应用绝对不是生搬硬套,而是建立在模仿、思考基础之上的。
2.5导创
应用的升华就是创新,或者说应用的最高境界就是创新。教、学、思、用都是为创新服务的。在“大众创新、万众创业”的时代背景下,让学生广泛参与到各级各类竞赛、创业、创新活动中,以赛代练,在活动中学习、思考、应用、创新。
3教学资源和平台
为保证“五导法”教学方式的顺利实施,构建了三维的教学资源和平台。借助精品课程教学资源、网络资源,进行教学资源的二次开发,形成特色鲜明的校本教学资源,建设成理论教学“点资源”、实践教学“线资源”、网络共享课程“面资源”的教学资源体系。在教学中推行分类教学平台,实现资源聚集;在实验教学中实现理论学习与实践的对接;利用幕课平台和资源,实现学分认证;利用共享课程资源开展翻转课堂学习。多维的教学资源和教学方式,满足和丰富了学生多元化学习的需求和发展。
4结语
在实际教学中,因地制宜,将“案例式、演示式、渐进式、启发式”等教学方法融合在一起,变“授人以鱼”为“授人以渔”,开展“翻转课堂”的教学模式,使学生的学习模式发生了革命性变化,变被动学习为主动学习。学生在自主学习、独立探索、协作学习与实践、交流互动、成果报告和评价反馈中,达到知识的传授和内化,达到能力的提升和拓展,充分体现以学生为主体、能力培养为核心的教育思想。
参考文献:
[1]严蔚敏,吴伟明.数据结构(C语言版)[M].北京:清华大学出版社,2002:24,27.
[2]杨路明.C语言程序设计教程[M].北京:北京邮电大学出版社.2005:48.
[3]熊启军.基于渐进启发式的数据结构线性表的教学[J].现代计算机,2011(6):34.
[4]ld326的专栏.模运算[EB/OL].(2012-08-18)[2016-10-13].http://blog.csdn.net/ld326/article/details/7880429.
作者:熊启军 程格平 屈俊峰 谷琼 单位:湖北文理学院数学与计算机科学学院
【探析五导法的程序设计课程群教学研究论文】相关文章: