胡春安, 王俊岭
(江西理工大学信息工程学院,江西赣州341000)
随着信息化技术[1]不断向纵深发展,社会正在向新型工业化方向发展,对人才知识结构的要求也随之发生改变,除了要有本专业知识和技能外,还要求具备较高的信息技术素养。早在2006年广东省就对高校培养具有信息技术人才给予了政策上的支持,为高校培养”专业+信息技术”[2]的人才模式起了很好的示范作用。目前,国内高等院校本科阶段非计算机专业培养工科学生信息素养和信息技术能力的通识课程主要是《大学计算机基础》、《数据库技术及应用》、《C语言程序设计》等,其核心课程是《C语言程序设计》。因为C语言对理工科的学生来说不失为一种最佳的编程入门语言,据编程语言流行度评估的权威机构——TIOBE统计,2002~2009年世界程序设计语言排名中,C语言一直位列第二[3]。因此,C语言程序设计的教学对信息技术能力的培养起到至关重要的作用,本文就C语言程序设计教学进行深入探讨。
作者从事C语言教学和管理工作多年,总体感到C语言课程教学存在的问题主要有四点:一是由于C语言程序设计的语法规则、数据类型、运算符、表达式、语句、函数、指针、结构化程序设计等教学内容较多,涉及到的知识点又多又细,且这些内容又是计算机类考试的主要考查对象,因此,在教学中,教师不得不侧重于知识点的基本语法语义、格式等基本元素的解释、强调细节的掌握和熟记,知识点得不到贯穿应用。二是教学学时的不足,造成教师赶进度的现象严重。由于课堂时间有限,教学过程中往往只能举一两个例题进行简单验证和语义说明,不能与学生进行深入探讨和知识点的应用,形式单一,内容枯燥,抽象难懂。三是教学进程短,没有足够的时间训练编程,实验内容都是事先准备好的,主要以验证性为主,缺乏独立分析、思考和解决实际问题的过程,程序设计能力得不到提高。四是考核手段常规化,缺少变革考试方式的勇气。由于受教学条件和师资紧缺的限制以及计算机等级考试的要求,考试多采用书面形式,试卷一般由选择题、填空题、程序阅读题等标准化试题构成,这样势必引导学生把注意力更多地放在对一些基本概念、语法细节规则和语言要素的学习上,而忽视了程序设计能力的考查。总的来说,随着教学进度的深入,学习难度的加大,学生对C语言越来越没兴趣,严重挫伤了学习积极性,致使每年挂科的人数不少,C语言整体教学效果处于欲上不能的状态,实现提高信息技术能力成为一句空话。针对这些问题的解决,作者在教学实践中提出了“以能力培养为导向”[4]的几点教学体会与大家共同探讨。
教育心理学指出,学习兴趣是产生学习自觉性的最好动力。因此,在C语言教学时首先必须牢固树立“提高学生学习兴趣”的教学理念,并将这个理念贯彻到每堂课的教案设计中,用兴趣引导学生自主学习,主动获取知识。
C语言程序设计包括结构化程序设计基础[5]和模块化程序设计[5]两部分。结构化程序设计基础包括:C概述、数据类型、运算符、表达式、简单的输入和输出、流程控制语句等,这部分的内容较形式化,是程序设计的理论基础。模块化程序设计包括:函数、编译预处理、数组、结构体、共用体、枚举类型、指针和文件等,这部分内容是实现程序模块化和程序设计的基础,也是编程能力的体现。由于理论授课学时一般仅有30学时,如何在短时间内通过授课让学生快速掌握这么多的内容,又不至于因为必要的强调细节让学生感到枯燥难懂,对教师而言是个非常大的挑战。因此,教案的设计就尤为重要,不仅要有每章面上的内容,而且要有点上的精髓。点是核心,是每章要掌握的重点,应根据内容特点设计好教学方法重点讲解,通常可以采用案例教学和启发式教学。面是覆盖,是内容的完整性,起承前起后的贯穿作用,教学可以考虑采用讨论式和任务驱动式,通过点面结合的讲解,既然使学生较快地全面了解课程内容,又能掌握重点知识,且解决了一点一滴灌输式的传统教学无法解决的学时少任务重赶进度的问题。
俗话说万事开头难,足见开头的重要。由于第一章是课程概述,有些老师尤其是青年教师可能会忽视它的重要性,为了赶教学进度会直接开讲课程,根据多年的教学经验,作者认为第一节课应重在开启激发学生的学习兴趣和主体学习意识,如果以音乐程序或图形程序开讲,以视听刺激学生的感观,会比干巴巴地灌输式的教学效果好很多。此时学生可能对这些程序不懂,但没关系,达到激发学生了解程序的作用和探索程序的兴趣就达到教学目的了。之后,教师再以饱含激情的方式介绍C语言程序设计在现代编程语言中的地位、广阔的应用领域以及C语言在他们专业中的应用,慢慢地将思路迂回到各章节内容的概要介绍,引导学生快速、简单全面地了解各章在程序设计中的地位和作用,引导他们在后续几章教学中如何快速掌握必要的基本元素和语法语义,理顺学习主线有利于学生在自主学习过程中把握节奏、掌握重点和难点,为后续的自主学习做好思想引导工作。
计算机之所以能够自动工作,其工作基础是按人们事先编好的程序进行的,而程序是以算法为基础,算法是解决问题的方法和步骤,是实现程序设计的基础,因此,在C语言教学中必须在语言基础、算法、编程三者之间找到一个切入点,让学生在快速了解和掌握一定程度的语言基础上进行适当编程,对提高学生的编程能力起着重要作用。
算法是程序设计的思想基础,在C程序教学中虽然不能像计算机专业那样详细讲解,但可以简而精讲。在作者的教学中专门安排了2学时用于讲C程序中几个经典的算法,从实现问题着手分析,然后根据分析写出解题步骤,再通过C语言一一对照实现,最后得到一个完整的能运行的C程序,实现问题求解。教学过程的重点在于指导学生如何根据问题写算法,如何根据算法写程序,如何运行程序实现计算机自动化解决问题。由于是初学,授课仍以解决趣味性的小问题为主,通过布置作业驱动学生课后互相讨论算法,试着学写算法,经过几个作业的来回训练巩固算法思想,便能让学生较好地掌握算法与程序的关系[6],掌握程序设计自顶向下,逐步细化的设计思想。有了算法基础,在“模块化程序设计”这部分的教学中学生就能较好地领会语句的逻辑性,合乎逻辑性地组织语句写程序,再也不会感到编程难以下手,编程能力的提高有了基础保障。
在接下来的几章内容是数据类型、运算符、表达式、控制语句等形式化的基础内容,这些内容好比文章中用到的字、词、句,不可或缺。但如果教师在讲授过程中过多地讲解字、词、句的用法和语法,学生则会不得应用要领。由于这些知识点多,且都是编译系统赋予的语法语义,没有逻辑性,过多地强调基本元素的语法语义会令学生难记难懂,很容易挫败学生的学习积极性。因此必须对这些形式化的知识进行快速且完整的简单语义的讲解,让学生尽快动手编写小程序。因为动手编写程序是学习C语言的最好方法。在学写程序过程中,通过对求解问题的逻辑分析,写出算法,然后根据算法描述让学生试着用所学知识点学写程序,通过程序便能够让学生快速理解语句的格式、语法和语义,正确理解程序之间的逻辑思想,这种讲授方式比让学生死背语句格式、语义效果要好得多。由于从问题分析到问题解决都是学生亲自参与,动手编程,经过几个项目的训练就能逐步积累编程方法和技巧,随着训练题的难度和复杂度的增加,学生的分析问题和解决问题的能力也在不断积累和提高,教学由传授知识到培养能力的转变得以逐步实现。
随着社会向信息化纵深发展,很多行业已进入自动化控制生产状态。由于教师通常由计算机学科的老师担任,这些老师没有工程应用背景,教学过程中只能就理论讲解,为教学而教学,学生了解不到C编程与专业的关系[9],因而学习积极性不高。为了强化C程序在专业工程中的应用,在教学安排中大胆启用专业教师进行授课,发挥专业教师的专业特长,结合专业问题进行编程来引导学生体会C程序在专业领域中的应用。如自动化、电气、通讯、电子信息、机械、测控等计算机应用要求较高的专业在安排教学任务时首选专业能力强、科研项目多的专业老师任教[10],以引导学生理解C程序在专业中的应用以及如何利用C程序解决问题,这种教学安排有利于工科学生信息技术能力的提高。
教学模式、教学内容和教学手段改革必然会牵动考试方式的改革,如果考试方式不改,其它改革便成为空谈。以往评价学生C语言程序设计的学习效果通常是笔试方式,这种方式片面性较大,考查不了学生的实际动手编程能力。为解决“会考试”和“会编程”不一致的矛盾,需要建立以培养学生编程能力为本的考试方式[7],即要考查学生对C语言基础的掌握,也要考查学生的编程能力。语言基础为辅,约占总成绩的30%,编程能力为主,约占总成绩的40%,平时实训占30%,这样的考核方式可以引导学生将精力和时间放在编程练习上,训练多了那些死记硬背的语法细则也就自然融合在编程思想里了,成绩的提高便可成为必然。
教学过程是教师与学生互动的过程。教师在教学过程中起主导作用,学生是主体,只有激发主体的主观能动性,才能在学习中获得知识和能力,因而构建一个理想的课外学习环境也是教学中必须考虑的事情。
传统的教学侧重于课堂上的教学改革,而现代教学理念随着网络的快速发展已发生革命性的变化。在注重传统教学的同时,应重视网络教学的辅助作用[8],充分利用网络教学平台开展网络课外教学,将教材内容与网上资源进行优化整合,创设有意义的学习情境,根据不同级别不同层次的学生分析教学目标,从小课件、小知识点、小问题到大问题、大作业进行教学设计以满足学生个别化学习和协作学习的需要,通过教师与学生、学生与学生、学生与论坛互动讨论和自我测试,研讨等学习活动,可以提高学生在学习C语言过程中的知识获取能力。教师则可通过网络教学平台反馈的意思和建议及时给予指导、评价,改进,以利于更好地调控教学进程,达到最佳教学效果。
项目实训、课程设计、校内C语言竞赛、ACM竞赛等形式多样的课外活动是发挥学生能力的有效途径。课程设计和项目实训是能力培养的实践环节,是熟练掌握程序设计方法的基础,在教学过程中注重个别指导,挖掘潜力,因势利导;校内C语言竞赛可以让更多的普通学生参与其中,通过竞赛活动,由“要我学”变成“我要学”,培养了学生的主动学习习惯,为ACM学习打下基础;而ACM竞赛是世界上公认的规模最大、水平最高的国际大学生程序设计竞赛,其目的旨在使大学生运用计算机来充分展示自己分析问题和解决问题的能力,通过组建ACM兴趣小组,由计算机学科博士带队指导,要求小组通力合作来训练学生如何完成规定的学习任务,培养出了一批学术水平高,解决问题能力强的优秀学生。
作者通过引导C编程兴趣开启学生自主学习意识来培养学生主动获取知识的能力为出发点,以“能力培养为导向,以实现传授知识到培养能力转变”为目标,以“基础知识为起点,以算法为基础,以应用为中心,以能力培养为目标”的教学思想,不断改进教学方法和教学手段,激发、调动、培养学生学习情感,唤醒学生主体学习意识和主动获取知识潜能,强调独立思考、独立分析、独立设计、团结合作的实践训练,使学生的逻辑思维和编程能力得到提高,以期培养能应对新型化工业社会要求的“专业+信息技术”的复合人才。
[1]张正德.美国信息技术的发展及其经济影响[M].武汉:武汉大学出版社,1995:16-25.
[2]郑 瑞.信息技术环境下《C程序设计》课程的研究性学习探索[J].牡丹江教育学院学报,2013(1):176-178.
[3]http://page.renren.com/600005397/note/467743764.
[4]袁春花,陈 华.C程序设计项目化教学模式探讨[J].课程教育研究,2013(5):149-149.
[5][美]BrianW.Kernighan,DennisM.Ritchie.徐宝文,李 志,译.C程序设计语言[M].北京:机械工业出版社.
[6]刘光蓉.以计算思维能力培养为导向的C程序设计实验教学[J].实验技术与管理,2013(1):157-163.
[7]罗 强,铁治欣.C程序设计成绩与编程时间关系分析研究[J].浙江理工大学学报,2013(1):90-96.
[8]胡春安.基于信息技术的公共基础课辅助教学模式的研究[J].江西理工大学学报,2011,32(6):84-85.
[9]张润莲,刘联海,韦永壮.面向“卓越计划”的C程序设计教学探讨[J].大众科技,2013(2):76-77.
[10]付文莉.基于51单片机控制的液晶显示屏C程序设计[J].硅谷,2013(5):17-19.