程序设计教学中案例粒度问题的探讨

2019-11-30 16:01李环宇林晓霞徐燕妮
现代计算机 2019年34期
关键词:粒度C语言程序设计

李环宇,林晓霞,徐燕妮

(山东科技大学信息工程系,泰安271019)

0 引言

目前国内各高校普遍将《C语言程序设计》作为计算类相关专业的基础必修课,它以编程语言作为工具和平台,介绍程序设计的一般思想和程序设计所涉及的方法。该课程对后续学位课程起着重要的铺垫作用。同时由于C语言具有高级和低级语言的双重特点,能够对底层硬件进行较为灵活的操纵,还有着灵活的控制和数据结构,能够表达丰富的语义,能够比较简洁的完成各种操作[2],所以理工类各专业,例如地图学与地理信息系统、气象学、自动化、机械电子工程等专业也都把它当做重要的基础课来开设。

1 教学中面临的问题与教学改革现状

1.1 教学工作面临的问题

学习C语言程序设计的学生,一般都是初次接触程序设计,甚至是初次接触计算机,所以大多对计算机编程一无所知,因而在实际的C语言程序设计课程教学中,许多学生普遍感觉C语言涉及的概念比较复杂,规则繁多,知识点太多,容易出错,致使学生在不同程度上产生畏难心理。

另外,在教师的教学过程中,为了照顾缓解学生们的畏难情绪,长期以来的C语言程序设计教学过多注重的语句、语法和程序设计技巧,从而忽略了培养学生的动手编程解决问题的能力和程序调试能力。许多学生在一学期的学习结束后,或许对某个语法点是了解的,但在面对程序设计的题目、在解决实际问题的时候,感到无从下手,一篇茫然。由此也经常产生疑问:我花了这么多的时间、费了那么多精力来学习程序设计,但到底有什么用呢?能解决什么问题呢?

很多经常讲授该课程的教师都意识到了该课程的教学所面临的问题,认识到该课程的教学方法、教学方式的改革的必要性,并已经从很多方面进行了有益的尝试。

1.2 程序设计教学改革现状与存在的问题

在多年的教学改革中,已经取得明显成效的改革措施中,以“项目为驱动的案例式”教学方式的改革,取得的效果极为明显。例如《C语言程序设计课程改革探讨》[3]一文中就指出:不能一开始就给学生讲解相对无趣和复杂的语言和定义,而是应该从一个学生感兴趣的实际案例出发,通过对案例的分析与讲解找到解决问题的方法和思路,依次激发学生学习的热情,也能使学生感性地认识到所学知识的可用性。“浅析案例教学对教学成果的提升”[4]一文中也有类型的观点。

上述教学研究成果旨在增强学生学习的兴趣,克服学生的畏难情绪。可以说是都在一定程度上解决了学生学习C语言程序设计比较困难的问题。但也有较大的改进空间:

首先,从要求掌握基本知识点来看,很多教学案例虽然从自身来看,其架构较为完整,但每个案例到底应该包含多少知识点,并无定论,只是根据教师的实际经验来临时确定,在面对不同专业、不同知识背景的学生时,事前并不好预判这样的案例是否合适。

这天傍晚,柳红正在井边冲凉,苏秋琴来了。她见到柳红就哇哇直叫,说:“好啊,柳红,你当着爸的面在洗澡啊。”柳红被她说得难为情起来,转身欲走,苏秋琴就一把拦住了她,骂这鬼天气,一个月都不落一颗雨,想热死人啊。她也迅速地扒了衣服,和柳红一起冲凉。柳红就羞她:“你怎么也当着爸的面洗澡了?”

其次,从整个C语言程序设计课程来说,各个案例开放性不足,案例之间缺乏相互的联系,无形之间就割裂了本该前后勾连的知识体系,也就是缺少对课程知识点群合理的分布和重组[5]。

最后,由于缺乏整体的结构性,学生们在进行二次开发,以巩固基本知识点,提升编程能力时,需要再次搭建知识载体,并对载体进行再认识,效率比较低。同时也失去了给学生强调模块化(函数化)思想的机会,但C程序设计最基本的思想,从微观角度看,是强调函数这个基本单位而不是单个语句。

2 程序设计教学改进措施

2.1 教学改进措施的总体思路

通过分析可以发现,之所以在教改中仍然出现很多问题,很重要的一点就是很多教师在制定相应案例的时候,忽略了案例的“粒度”问题。所谓“粒度”,原意是指数据仓库的数据单位中保存数据的细化或综合程度的级别。细化程度越高,粒度级就越小;相反,细化程度越低,粒度级就越大[6]。

本文所说的“粒度”,实际是一种对知识点的划分问题,也就是怎样合乎逻辑的将联系较为紧密的知识点化为一个整体来进行理解和掌握。粒度级别太低,将融合较多的知识点,给学生的学习带来较多的困难;相反,如果粒度级别太高,一个案例将只包含数个甚至是单个知识点,这样可能人为的割裂知识点之间的有机联系,妨碍从总体上把握课程总的知识框架。

为了有效解决上述问题,笔者所在的程序设计教学团队,在总结经验的基础上,充分调研,对以“项目驱动的案例式教学”再次改进,形成多层次的多粒度的案例教学题库[7]。该题库从“分”与“和”,“微观”与“宏观”两个方面入手,较为合理地把握“粒度”的概念,确定了两个“粒度”划分标准:即宏观粒度与微观粒度。

2.2 宏观粒度和微观粒度的认知

宏观粒度的案例主要涉及三个层次:认知层次、提高层次和应用层次。

认知层次对所有的学生(包括专科生)都是适用的,它们是学习了C语言后最起码应该达到了水平;提高层次主要体现在对知识的融会贯通,对知识的熟练应用,在这个过程中应该能够学到一些编程的方法和技巧;而提高层次则应该能够用学到的编程思想和编程方法、技巧,结合后续课程所用的算法和数据结构,用于解决实际的问题,真正能够为后续课程,甚至是毕业后的工作打好知识基础。该层次主要是在课程讲授完毕后课程实训时实施。

为了方便教师授课,学生听课,该粒度的三个层次都将形成各自的一个完整C源程序,其中的各个子函数将分别涵盖了本课程所有重要知识点,以函数调用的形式出现,这样帮助学生一开始就能从宏观上理解他们以后所编程的程序到底该是什么样的。

在目前纷繁多样的教学改革中,“慕课”和“微课”所取得的教学成果也非常明显。认知层次所涉及的知识点就非常适合使用“慕课”和“微课”收到予以解决。事实上,我们也的确是将各基本知识点以“慕课”的形式录制,放在学校校园网上,方便学生随时随地的学习,这样的学习“以学习者为中心,增强学习者的吸引力”[8],大大缓解了教师讲授该方面知识点的时间压力,教师在课上只需要讲解学生关注的重点难点内容。

微观粒度的案例主要是对宏观粒度中各个子函数的分解,其内容服从于整个宏观框架,力求做到出现在一个案例重大知识点具有内联性。虽然这里的主体内容来自于宏观粒度中的子函数,却是一个可以单独调试、不需要参数的主函数的形式的出现,因为这里关注的是一个函数内部所涉及的到的知识点,需要看到立竿见影的效果。

需要注意的是,为了提高学习的效率,所用到的所有源程序都应该给学生练习预留接口,使学生比较容易的利用框架所提供的形式为掌握知识点服务。

2.3 教学活动的具体应用

笔者所在教学团队就认真研究了“基于用户角色的图书管理系统案例分析”[10],选择该案例的目的,是因为该案例来自于学生比较熟悉的场景,贴近学生们的生活,容易让学生对其感兴趣,同时该案例有一定的工程背景[9],如果想要日后都学生进行拓展训练,非常容易在该案例的基础上进行改进。

不过对于初学者来说,它还是太复杂了,所以笔者对其进行简化,保留了其整体的架构,分解出了若干函数,每个函数均包含教学大纲中所要求的知识点,在不同的章节进行重点讲解。例如:在“管理员系统菜单界面”,重点引入了printf函数和scanf函数,用于输出菜单信息和供用户选择的输入信息。从层次上说,这是认知层次。

具体菜单选项中引入了多分支选择结构switch语句,而对于该界面能够持续的存在,则还引入了循环结构;在文件读取用户信息模块,引入了文件的管理和字符串在数组中的保存。从层次上说,这也是认知层次。但是在应用switch时,涉及到了表达式的应用、整除的具体应用,属于多知识点的教诲,这又属于提高层次。这样教师再给学生讲授相关知识点时,学生就不会单纯认为类似的算术运算早就知道,枯燥无味。他们会发现,原来一个简单的算术运算及其表达式,原来还有如此的用途,增强了其学习兴趣。

在信息统计模块,则引入了数组中的排序算法,并对此类信息进行统计。这就属于提高层次。

以上一系列的编排一方面使学生从总体上了解到了该函数模块的作用,有了较强的方向性,另一方面又简化了程序的复杂度,使单节学习的效率更高。由于上面所述的各个函数均是“图书管理管理系统”的一个组成函数,最后再强调整体性的时候,当然很容易的实现了从“分”到“合”,从“微观”到“宏观”的转变。

为了能够使学生在学习了C语言以后有一个自我消化、理解的过程,一般应在开设了程序设计课程后的下一个学期,安排学生进行二个周的课程实训,课程实训的内容将是应用层次框架下的已经详细规定功能带有综合知识点与一定应用价值的题目。例如,笔者就曾经让学生编制程序,让学生实现一个简单的计算器的算术计算功能,根据时间的长短,对该计算器的功能可以进行约束。经过了这一步的训练,绝大多数的学生都能够熟悉掌握所学程序的重要知识点、一定的编程思想和编程技巧,为后续课程的学习打下了坚实的基础。

3 教学效果及思考

在确定了上述教学方法后,笔者所在单位的对17级、18级本科生中进行了试验,取得了较好的效果:两个年级的学生连续两年参加“蓝桥杯”软件技术大赛中多个奖项。在以程序设计课为基础的学习中,例如在学习《数据结构》课程时,两级的学生都展现了较强的编程能力,有力促进了相关专业课的学生。

当然,应该认识到,在粒度划分中,允许针对不同能力的学习者,做到分层设计,要有较常规的实验内容,特别是在认知层次上更应该考虑到学生之间的差异性。在应用层次中应该有综合性较强并和后续课程有一定联系的项目实验案例。考核群体和考核内容也进行分层,实现同一课堂的分层教学。

4 结语

本文给出了基于案例粒度的程序设计教学方法,该方法既强调案例本身的内敛性,认识到每个案例本身的知识聚集点,同时又从宏观角度考虑到知识之间的关联性,方便学生学习和掌握。但是粒度的划分不是一成不变的,根据学生的专业特点和能力特点,应该有不同的划分方法。案例的选择应该与时俱进,始终能引起的兴趣,便于学生沉浸其中,激发学生学习的主动性。

猜你喜欢
粒度C语言程序设计
基于SolidWorks和VBA的电机阶梯轴建模程序设计
超重力场中煤泥颗粒沉降规律研究①
基于OBE的Java程序设计个性化教学研究
项目化教学在Python程序设计课程中的应用
关于粒度重要性公式的改进
医学专业“Python程序设计”课程教学改革总结与思考
“C语言程序设计”课程混合教学探索
动态更新属性值变化时的最优粒度
计算机中C语言的应用特点探析
基于C语言的计算机软件编程技术探究