基于五导法的程序设计课程群教学研究与实践

2017-05-31 09:24熊启军程格平屈俊峰谷琼
计算机教育 2017年5期
关键词:课程群程序设计混合式教学

熊启军+程格平+屈俊峰+谷琼

摘 要:针对程序设计课程群的教学,以人才培养目标的定位为基础,提出基于五导法的教学模式,分别阐释“导教、导学、导思、导用、导创”的含义和具体实施办法,说明如何围绕教学内容建立三維的教学资源,实施混合式教学,采用多样化的考核方式,以提高程序设计课程群的教学质量。

关键词:程序设计;课程群;教学模式;混合式教学

文章编号:1672-5913(2017)05-0089-03

中图分类号:G642

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 思考的深度

在求最值的例子中,包含着这样一个拓展的问题:如何求解一个数组中的最大值和次大值。一种算法是这样的:endprint

max1=max2=a[0];

for(i=1;i

if(max1

max2=max1;

max1=a[i];

}

else if(max2

}

但这个算法存在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.

(编辑:史志伟 )

猜你喜欢
课程群程序设计混合式教学
基于OBE的Java程序设计个性化教学研究
项目化教学在Python程序设计课程中的应用
C++程序设计课程教学改革研究
医学专业“Python程序设计”课程教学改革总结与思考
基础医学显微形态学实验课程群的构建及意义张雪莉
基于课程群的软件工程专业三位一体教学模式探索
“卓越医师”创新创业能力培养实践教学分析及医学方法学课程群构建
软件工程专业编程语言课程群教学中的问题与对策初探
基于SPOC平台的混合式教学模式研究和实践
基于SPOC模式的《大学计算机基础》课程改革的研究