C程序设计课程的框架式教学法

2013-12-29 00:00:00胡斌李阳周迪斌梁锡坤
计算机教育 2013年10期

摘要:针对高校计算机相关专业C程序设计课程教学质量不高的问题,提出以构建和完善学生知识系统为核心的框架式教学法。该教学法根据学习过程中的认知特点,在重构教学内容的基础上,将教学过程分为2个阶段,第1阶段通过核心知识的讲授帮助学生形成简单知识框架,第2阶段通过反复接触、穿插教学的方式帮助学生不断丰富和完善该框架,最终完成整个课程的教学。

关键词:C程序设计;教学法;认知

0 引言

C程序设计是高校计算机相关专业的核心课程之一,课程教学质量对学生专业水平和后续课程学习有显著影响。由于受到诸多因素制约,该课程教学效果一直不理想,如何提高教学质量成为高校相关专业教学过程中面临的问题。

造成现状的原因有学生的专业基础薄弱,教学时间偏少等客观因素。除此之外,教师在教学内容组织和教学过程安排等方面的问题也是导致教学质量不高的重要原因。

C程序设计的教学目标是了解、理解、掌握和C语言程序设计相关的知识,具备运用C语言解决实际问题的能力。该目标的实现涉及知识、教学和实践3个方面的内容。

在传统C程序设计课程教学过程中,知识被分解成若干完整且相对独立的单元,教师针对每个单元开展集中教学,最终完成整个知识体系的教学工作,我们将它称为积木式教学法,具体情况如图1所示。

积木式教学法的缺点显而易见,首先,学生学习单一知识点的时间短,因此学习压力大。其次,教学过程中对知识进行串联和重复教学的时间少,不利于学生系统性地认识和掌握知识。再次,由于“指针”、“结构体”、“文件”等知识通常被安排在最后进行教学,时间有限,而客观上这些知识又需要较多教学时间,因此教学效果不理想。最后,这样的安排容易使教学过程变得枯燥、乏味,导致课堂氛围差,学生开小差的情况多。

在教学过程中,知识同时扮演着作为领域的知识和作为学习对象的知识2种不同的角色,二者在内容上基本一致,但组织结构上却存在较大差异。前者只考虑领域本身的特性,后者必须兼顾领域特征和学习者认知规律2个方面。积木式教学法之所以难获得理想的效果,主要原因在于教学过程中忽视了学习者的认知规律,没有对知识结构和教学方法做相应的调整。

针对积木式教学法中存在的问题,文章提出C程序设计课程的框架式教学法。该教学法在充分考虑学生认知规律的基础上,对知识进行重组,先让学生形成关于C程序设计的简单知识框架,然后不断丰富和完善该框架让学生形成完整的知识体系。

框架性知识包含了C语言程序设计过程中涉及的大部分内容,但每部分内容只包含其中最基础、最关键的部分。例如,数组部分只包含一维数组,函数部分只包含函数的基本要素和基本形式,具体情况如图2所示。

和积木式教学法相比,框架式教学法的教学过程呈现出螺旋式、循环往复的特征。例如,在学期中期引入指针的概念,在后续相当长时间内,通过陆续引入指针和数组、链表、函数指针等概念不断强化学生对指针概念的认识,最终完成对这一概念的教学。

1 知识重构

知识重构是在领域知识基础上,根据学习者的认知规律,对知识的组织方式进行调整,以降低学习难度,提高学习效率的过程。

1.1 学习过程中的认知特点

学习是一个从“不知道”到“知道”,从“不会”到“会”的过程,这个过程具有明显的阶段性特征,完整的学习过程大致分为以下几个阶段。

(1)接触阶段:这是一个非正式学习阶段,通常无需考虑学习效果,目的只是对所学内容建立大致印象,学习者在这个阶段比较自由,甚至可以完全凭个人喜好选择学习内容。教材的概述或导论部分主要为这个阶段的教学服务。

(2)弱知识体系阶段:在这个阶段,学习者逐渐在大脑中形成所学对象的大致轮廓,并逐渐脱离先前对目标对象一无所知的状态。学习者在这个阶段往往会产生较多的兴奋点,形成主动完善知识轮廓并将其清晰化的内在冲动。这个阶段需要几周甚至几个月的时间才能真正完成。

(3)知识体系的丰富和完善阶段:在这个阶段,学习者大脑中的知识拼图不断被完善,并逐渐变得清晰和完整。

(4)强知识体系阶段:学习者对所学对象形成了系统化的知识体系,对其中的主要概念有了较为清晰、准确的认识,能够比较自如地运用所学知识。

学习过程具有明显的重复性,渐进性特征。计算机科学是数学的一个分支,大部分概念对初学者都比较抽象,需要经过反复接触、思考、实践才能真正理解。因此,教师在教学过程中应尽可能为学生多提供机会,让他们反复接触、揣摩和实践所学内容,以帮助理解和掌握。

学习过程本身是一个知识系统化的过程,存在着对知识的系统性认识需求。知识系统不仅有助于学习者从宏观上把握学习对象,还有助于对知识细节的学习。因此,让学习者尽早建立知识的系统结构,有助于提高教学质量。

此外,学习过程中还存在一些倾向性特征。新鲜的、容易的、吸引人的或与自身相关的内容往往更容易引起学习者的兴趣,也更容易被掌握。因此,教学过程中有意识地做一些调整,能对教学效果带来较大的改观。例如,将第1个C语言程序从显示“hello world”改成显示卡通的字符图形等。

1.2 教学内容重构

针对学习过程中的认知特点,我们对课程知识进行重组,教学内容被分成框架基础知识和扩展知识2部分。框架基础知识是构建系统性认知框架的必要内容,包括基本概念和主要知识点的基础部分;扩展知识则是对基础知识框架的丰富和完善。

框架基础知识和扩展知识的划分不以知识点作为基本单元。同一知识点,可能一部分内容属于基础知识部分,另一部分内容则属于扩展知识。例如,函数的基本概念、简单调用属于基础知识,而递归函数、带参main函数、函数指针等内容则属于扩展知识。建立最简单知识框架需包括以下内容。

(1)计算机系统结构:处理器、存储器和I/O设备在程序运行中扮演的角色。

(2)最简单的程序:程序基本框架。

(3)基本数据类型:3种基本数据类型、变量、地址、指针等基本概念。其中地址和指针只是提及并不做深入介绍。

(4)基本算术运算和I/O:简单算术运算和printf、scanf语句。

(5)程序控制结构:选择结构只介绍if语句,循环结构只介绍while语句。

(6)函数基本概念:函数组成要素、基本形式、函数定义和调用。

扩展知识让学生对具体知识点的认识更深入、更准确,这部分知识被分成2个阶段进行教学,其中第1阶段的知识包括以下内容。

(1)程序控制结构:switCh语句、for语句,选择/循环嵌套,多种控制结构复合语句,程序跳转(break、continue)等。

(2)函数:递归函数、带参数的main函数、指向函数的指针等。

第2阶段知识包括以下内容。

(1)常量类型,静态数据类型。

(2)特殊运算符::?运算符、自增自减运算符等。

(3)复杂数据类型:联合、枚举类型等。

(4)文件操作:文件指针、多种输入/输出方式。

(5)宏定义,类型定义(typedef)。

(6)多维数组。

(7)位操作。

这种组织方式使知识点在教学过程中呈现条状,而不是块状特征,某些数组、指针等较难理解的概念被提前引入,并在此后直至课程结束的很长一段时间里反复教学。这种安排的优点在于学生接触单一知识点的时间被拉长,使他们有更充分的时间去消化这些知识;学生对基础知识的掌握更扎实,进而促进他们对高阶知识的学习;由于知识安排本身具有循序渐进的特点,因此课程的教学难度得以降低。

2 框架式教学过程

在知识重构基础上,教学过程被分为2阶段。第1阶段讲授形成认知框架所需的关键知识,帮助学生建立对课程知识的系统认知,这阶段约占整个教学时间的1/2-2/3左右。第2阶段通过对知识点的深入讲解和拓展,丰富和完善学生的认知结构,这部分约占整个教学时间的1/3-1/2左右。

2.1 建立知识框架

框架式教学法第1阶段的教学涵盖了简单程序控制结构,函数概念,指针、地址,文件基本概念和操作,计算机系统,程序概念,基本数据类型,基本I/O大部分知识,但是经过重构,这些知识点在广度和深度上都大为降低。例如数据类型部分只介绍3种基本数据类型,程序控制结构部分只讲解最简单的if语句和while语句,for语句、do…while语句以及break/continue的使用都被移至后一阶段讲解。

这阶段对学生的要求也有所变化,我们不要求学生完全理解所有内容,而是让他们从宏观上搞清楚C程序设计是怎么回事,包含哪些内容,可以做哪些事情等,同时让学生获得关于基本概念的感性认识。学习难度的降低有助于保持学生的学习积极性,使他们容易从学习过程中获得成就感和满足感,促进他们进一步学习其他内容。授课进度的加快一方面能促进学生思考和自学,另一方面也容易保持新鲜感。

由于缺乏相关专业知识背景,学生在学习过程中会普遍遇到专业术语理解困难的问题。在教学的第1阶段,由于学生在较短时间内接触到大量专业概念,因此这类问题表现得更为突出。针对这一问题,我们一方面花费大量时间和精力用于具体教学手段和方法的设计,例如动画、图形、文字多种形式综合讲解,引人大量类比和比喻等;另一方面将概念和实例相结合,多次重复讲解以帮助学生理解。

2.2 螺旋式的教学过程

框架式教学法的教学是一个呈螺旋式上升的过程,具体过程如图3所示。课程主要知识点会在不同的时间进行多次、分层次的讲解。对于重要知识点,第1次讲解比较简单,让学生建立初步印象,后面的讲解会不断深入,侧重知识点的理解和掌握。

螺旋式的教学过程更多地体现在函数的高阶知识(递归函数,带参数的main函数)、多维数组、链表等系统性知识的教学中,位运算、宏定义等非系统性知识比较零碎,内容也不多,其教学过程不具备螺旋式特征。

与传统积木式教学法相比,新的教学方法比较符合学习过程的重复性、渐进性特征。学生通过多次接触、学习同一知识,对知识的认识从易到难逐渐深入。

2.3 课内实验

为了配合新教学方法,课程实验被分为基础性实验和提高性实验2部分。这2部分在内容上有重叠,但是在深度和难度上存在明显差异。学生在第1阶段教学过程中完成基础性实验,这些实验相对简单,以体验为主,目的是让学生理解知识点相关基本概念,建立感性认识,学生只要正确理解相关概念就能完成。提高性实验需要学生经过认真思考才能解决。以“函数”为例,基础实验只安排函数定义、声明、调用方面的简单问题,而进阶实验则安排递归函数、函数与数组的结合等相对复杂的问题。在时间安排上,提高性实验在所有基础实验完成之后进行。目的是让学生对大部分基本概念都有初步认识之后再着手解决相对复杂的问题,这样既有助于学生主动寻找不同知识点之间的联系,交叉运用,又有助于学生加深对各知识点的理解。

3 教学辅助措施

对课程内容的重构和教学方式的调整是框架式教学法的核心,但是教学质量的提高还有赖于辅助手段的调整和优化,现就主要教学辅助措施的调整做详细的说明。

首先,为了辅助日常教学和实验,我们根据初学者的认知特点,设计了1套完整的示例程序,与其他例程相比,具有以下特点。

(1)简单易懂。例程的设计以方便学生阅读和理解为基本原则,尽量减少甚至避免出现技巧性代码。如编写分支型程序时尽量使用if……else结构,少用“:?”之类的运算符。

(2)针对性强。例程中不包含容易引起误解,或难以理解的代码。如第1个C语言程序中有意删除了#include语句,main函数的返回值类型也设置成void类型,目的是让学生把注意力集中于核心代码,防止无关代码对学习造成不必要的干扰。

(3)问题典型,贴近生活。选择和学生日常生活比较接近,或容易被接受的领域问题进行讲解,如闰年判断、身份证信息处理、图书馆管理系统设计等。

此外,新的教学方法对学生的学习态度有更高的要求,强调学生的自主学习,要求学生有较强的学习积极性和主动性。为了帮助学生改进学习方法,提高学习效率,我们在上课过程中明确要求学生采用听课、模仿、阅读、思考、交流和实践等多种方法进行学习。

4 教学实践分析

通过针对不同年级、不同层次学生的反复实践和比较,新的教学方法从提出、尝试到定型历时约7年,和传统积木式教学法相比,框架式教学法的优势体现在以下几个方面。

(1)提高了课程教学质量。新教学方法实施之后,学生不仅能更扎实地掌握基本知识和基本概念,对数组、函数、指针等重难点知识的掌握情况也得到明显提高,同时,学生的独立思考和动手能力都有较大程度的提高。

(2)扩大了讲课范围。新教学方法提高了教学效率,一些原本因时间所限难以详细介绍的内容(如指针、结构体和文件等)能够讲解得更深入、详细。一些原本没有时间讲解的内容(如带参数的main函数、指向函数的指针等)也能在课上进行讲解。

(3)挖掘了优秀学生的潜能。新教学方法为学生提供了大量自学机会,经过半学期左右的锻炼,少数优秀学生能通过自学掌握剩下的大部分知识。

(4)保护了学生的学习兴趣。新教学方法降低了课程学习难度,减少了学生学习过程中的挫折感,保护了学生的兴趣。

从实践过程中我们发现,框架式教学法的实施效果受学生的学习态度影响比较明显。在这种教学模式下,学习态度好的学生无论在知识的掌握程度还是在能力的提高方面都比积木式教学模式培养的学生有更好的表现。但是对于学习态度不好的学生,框架式教学法的优势并不明显。

5 结语

和传统积木式教学法相比,框架式教学法提高了课程教学质量和效率,培养了学生自主学习、独立思考和解决问题的能力。该方法不但适用于C程序设计课程的教学,对其他课程,特别是程序设计语言类课程的教学也有借鉴意义。目前,该教学方法仍不完善,有待进一步改进。首先,第一阶段的内容组织和授课进度安排还需要进一步完善,如何根据教学情况,特别是学生学习情况,动态调整教学内容也需要进一步研究。其次,该方法受学生的学习态度和学习习惯影响比较明显,如何在教学过程中提高和保持学生的积极性、主动性和兴趣,帮助学生养成良好的学习习惯是今后需要解决的问题。最后,该教学方法目前还缺少教材支持,与其配套的教材仍在编写过程中。