[摘要]本文在分析C语言程序设计课程常用教学方法的基础上,提出了基于金字塔原理的知识构建进行教学设计与教学实践,结合模块化教学与案例教学,训练学生在学习中运用金字塔原理分析、思考和解决问题的思维,以提高学习效率。
[关键词]C语言教学 金字塔原理 知识构建 教学研究
一、引言
C语言程序设计是近年来在国内外得到迅速推广应用的一种计算机语言,它功能丰富,表达力强,使用灵活方便,目标程序运行效率高,兼有高级语言与低级语言的许多特点,许多机型、操作系统都支持C语言开发[1]。C语言的实用性使之成为编程的首选语言,但概念多、规则繁杂、使用灵活、书写方式多变、容易出错,教师教学和学生学习都感到闲难,增加了教学的难度,而学生抱怨课程内容枯燥乏味,没有兴趣,在解决实际问题编写代码时往往无从下手,缺乏编程和调试的能力[2]。
在C语言程序设计教学实践中,广泛采用任务驱动法、模块化教学、项目教学法、案例教学法等优秀的教学方法,并取得相应的教学效果。本文提出一种基于“金字塔原理”的知识构建的教学方法,注重在教学过程中引导和训练学生思维,由上至下构建目标问题框架(分解问题),由下至上逐步解决问题,纵向运用模块方案,横向保持内在联系。该方法在提高教学效率和学生思维能力方面,效果明显,是其它教学方法的有益补充。
二、目前主要教学方法及其特点
(一)任务驱动教学方法
该方法强调任务设计对学生学习兴趣的引导与激发,任务的设计贴近学生的现实生活, 以激发学习兴趣为出发点,选取有典型性意义的、覆盖教学目标知识范围的任务,分解难点和重点,引导学生在完成任务过程中探究式学习,对加强学生的实践技能方面效果较好。
(二)模块化教学方法
模块化教学法是20世纪70年代初由国际劳工组织研究开发出来的以现场教学为主,以技能培训为核心的一种教学模式。它的本质在于教学内容的取舍取决于职业岗位对从业者的要求,从职业活动的实际需要来组织教学内容,强调能力本位和知识的“必须和够用”,与传统教学强调知识的系统行和完整性有所区别[3]。
(三)案例教学法
案例教学法运用社会或身边发生的事例激发学生学习兴趣,说明道理,给学生的行为以启发的教学模式,通常是“以例激趣—— 以例说理—— 以例导行”。案例教学法是一种注重师生互动的研究性教学方法,教师要预先选择典型案例,在案例教学实施过程中,教师要注重引导,启发学生进行积极的思考,让学生保持较强的求知欲和浓厚的学习兴趣,以培养学生的创造性思维,提高学生参与课堂的能力,然后通过案例的步步进阶,使得学生掌握全面的知识点[4]。
(四)项目教学法
在项目教学中引入软件工程的概念,以团队的形式进行项目的开发。主要注重培养学生的综合能力,提高学生的程序设计水平。在实践环节中,让学生在沟通中成长,在协作中进步,在自由中学习。实践中,首先给出实践参考项目,提出实践的基本要求,再者引导学生构建自己的团队,实施项目。最后进行项目成果展示,实现各个项目小组的交流沟通[5]。这种方法适用于在学生掌握了课程的基本内容的基础上使用。
三、基于“金字塔原理”的教学方法
(一)金字塔原理
金字塔原理是避免文章或语言表达上的“思维混乱”而提出的一种组织结构,即:自上而下式地寻找论据支持论点,或自下而上式的根据事实做出判断。无论哪种方式,最终都要呈现出骨架刚劲有力的、有金字塔结构的描述。表达的总论点放在顶端,下一层是支持总论点的关键句,再下一层是支持关键句的论据,依次类推,便于更形象地理解了逻辑性和条理性[6]。C语言程序设计无论是从语法结构还是从代码编写上来看,都具有表达和描述的特征,同时在学生学习过程中知识体系构建的过程,也是一个金字塔形的知识建构的过程。
(二)金字塔原理组织教学,建立课程的知识构架
在教学设计中,以“整体—部分—整体”的模式进行教学设计,课程开始时,学生对一门新的课程的积极性、学习兴趣较高,笔者直接给出“寻找最佳存款方案”的源程序,首先讲解程序的基本组成部分(头文件#include、主函数main{ }、自定义函数、{函数体}、数据),初步建立C语言程序设计的基本知识框架;其次对于浅显易懂的部分如定义变量、基本语句等采取精要讲解完成教学,最后简要讲解该程序的其它内容。此时并不要求学生都掌握该实例的全部内容,而是对C语言程序设计有一个宏观上的理解,同时掌握一些初步内容。这种模式有利于学生在思维上上升一个高度初步了解C语言程序设计课程,消除陌生感,避免一开始就进入细节学习的混沌状态。
建立初步的知识架构后,就像登山之前从地图或高空对登山路径、环境和景区分布有了全面的了解和掌握,在登山时,目标明确,任务清晰,这种前瞻地把握事物整体的方法避免学生在学习中遇到困难时产生迷蒙感和挫败感,有利于保持学习兴趣。
(三)采用模块化与案例教学法进行各项内容的教学
(1)模块化建立知识结构
一个完整的C语言程序由头文件、函数、函数体、数据4个基本部分组成,我们就把这四个部分划分为四个大的知识模块,有的模块包含较多的内容,需要再次细分二级模块,如数据模块中,就分为数组、常量、变量、指针,还涉及到函数值返回等内容。模块划分强化知识集合的相对集中,而不是割断模块之间的内在联系。课本中指针、函数返回值和链表的内容靠后一些,难度相对增加,在模块教学的顺序中,适当延后或提前,分散难度,保持整个教学过程中难点呈均匀分布,而不是先易后难。在教学中巧妙把握模块的独立性与内在联系,在学生知识构建中模块化内容自然形成,同时也包含模块间的关联。
(2)模块化与案例分析教学在模块化教学过程中采用案例分析教学,一个案例包含多个知识,甚至是课程的大部分知识,呈现给学生的是该案例程序的完整内容,讲解时重点放在目标知识点上,非目标知识点仅作简要讲解或功能描述,形成既有侧重点又有覆盖面的教学,而不是单一知识点的“攻坚”,多个案例分析教学后就构成了一个知识面的“重复结构”,这种“重复”有利于加深记忆。例如,课程开始时,就用一个包含基本语句、变量、循环结构这些相对简单内容的案例,侧重点放在基本语句和语法上,对于变量、循环这些内容仅做功能描述或简要讲解,对于少数学生来说,已经能掌握案例的全部内容,而大部分学生则应掌握目标知识点(基本语句和语法),在后续的变量部分的教学中,又涉及到语法的内容,采取同样的方式处理,形成知识的循环结构,让学生的学习能“跑”的跑起来、能“走”的走快点、其它的跟着“走”。
以住的教学模式习惯按课本的章节顺序进行各知识点的教学,然后结合实例巩固,由下至上堆积知识来构建知识结构,在进行知识点教学时,常常过度讲解,割裂了与其它模块的联系,知识重复概率降低,听懂的学生已经走神,没接受的学生仍然不懂。在改进的教学中,我们采取既突出重点,又注重知识板块之间的连贯性和覆盖面的策略,在涉及到另一模块的内容时仍然简要讲解,对于旧的知识点有利于加深印象,起到良好的复习作用,个别没有掌握的学生得到再次的学习机会,甚至产生顿悟;对于新的非目标知识点,经过简要讲解后,接受能力好的学生已经掌握,其它学生即便没掌握也有了一个初步的印象。每个案例始终保持程序的完整性和准确性,方便学生笔记和复习时阅读。
(3)实践环节
在上机实践环节中,直接把授课案例的源码给学生调试通过,引导学生简要分析程序与输出结果之间的因果关系,间接复习了整个程序的全部知识,然后给出与之相似的任务,鼓励学生自己分析,画出由知识结构组成的程序流程图,敲出代码,并调试,再次形成一个知识的“重复结构”。布置任务时,障碍设置不宜过大,避免随着学习的深入、难度增加,产生挫败感,导致学习兴趣下降。
按总学时72个课时算,当教学进行到45个学时的时候,已经完成大部分内容的教学,经过案例实践的训练,学生掌握了一定的编写和调试程序的能力,具有较强的主观能动性了,实践课也应作相应的调整,难度加大,按模块化任务的形式进行软件开发模拟,把一个复杂任务分为若干个相对简单的子任务,每个子任务即为一个模块,模块化是组织程序的基础,多人或多组协同工作来完成软件的不同模块可以提高开发效率,这是软件工程对模块化的要求。另一方面,C语言又称之为函数语言,函数是实现程序功能的最小单位,一个函数完成一个功能是程序设计的基本要求。一个模块通常用C语言的函数来实现,因此函数是实现模块化思想的有力工具。我们在教学过程中,以函数作为着眼点,培养学生的模块化设计思想。
首先,训练学生以函数为单位组织程序。教材中的例程为了节省篇幅,往往在一个程序当中实现全部算法或功能。针对这一问题,我们安排学生按模块化思想用函数重新组织程序,培养学生的模块化思想。
其次,加强团队协作训练。在上机或作业过程中,在一个题目中给出多项任务,将学生分组,不同小组分别用函数来完成不同的任务,借此来培养学生的协同工作能力,促进学习[7]。
(四)思维训练
德国教育学家第斯多惠曾说:“教学的艺术不在于传授本领,而在于激励、呼唤。[8]”在C语言程序设计课程教学中,激励学生树立一种有效的思维模式显得尤其重要,在学生的学习过程中,我们注重金字塔形式的自上而下构建知识结构,自下而上学习巩固,纵向模块化案例训练实践,横向重复巩固。在案例分析中,引导学生分解问题,建立架构,逐步细化,画出知识结构图,完成代码编写。经过这种思维训练,学生在思考和解决问题的过程中,就是一个若干知识模块的集合在大脑里运转、优化组合和实现的流程,最终完成任务。
(五)教学中的几个原则
(1)整体性原则
整体大于局部之和,无论知识模块的大小,尽可能的把整个框架呈现给学生,有利于从整体上把握知识点,上升一个高度来学习、分析和解决问题,有了整体构架后,再逐步细化,深入学习各个知识点,在学习各知识点时清晰的知道它在模块中的地位与用途。
(2)层次性原则
在某一个特定知识目标教学时,这个目标本身要反映出学习效果的层次性。如布卢姆、加涅等人对教育目标分类都是有层次性的,他们累积性的层次分类,表现为每一层次的行为或操作包含了较低层次的行为和操作。应用这种层次累积的思想,对教学目标要求进行层次分析。
(3)动态性原则
即所构建的金字塔式知识结构不应当处于僵化状态,必须根据学生学习的效果反馈能够进行不断调节的动态结构,这种动态性也体现在学生随着学习的深入,对课程内容的掌握逐步增加,知识结构的纵向加深和横向的丰富和完善。
四、结束语
在《C语言程序设计》教学中,采用“金字塔原理”的知识构建模式,结合其它教学方法开展教学,通过案例激发学生兴趣,模块化搭建知识结构,目标任务的分解实现来提高学生解决问题的能力,取得较好的教学效果。这种基于知识构建的教学方法和学生思维训练的方法,同样适用于其它课程和知识的学习。
[参考文件]
[1]谭浩强.C程序设计(第三版)[M].清华大学出版社,2005.
[2]王创伟,汤克明,蔡长安.《C语言程序设计》教学改革方案与实践[J].现代计算机.2010(10).
[3][4]蔡茜.浅谈模块化案例教学法在《C/C++语言程序设计》实践课程中的应用[J].科技信息.2010(13).
[5]黄婷.浅谈《C语言程序设计》实践教学[J].北京电力高等专科学校学报.2010(10).
[6][美]巴巴拉.明托.金字塔原理[M].汪洱,高愉,译.海口:南海出版社, 2008:10.
[7]韩春成,邢鹏飞,燕扬.C语言程序设计教学改革实践[J].长春师范学院学报(自然科学版)201O(10).
[8]第惠多斯.德国教师培养指南[M].袁一安,译.北京:人民教育出版社,2001.
(作者单位:玉溪农业职业技术学院 计科系 云南玉溪)