首页 > 范文大全 > 正文

从学习者的视角看计算机专业《C语言程序设计》课程教学改革

开篇:润墨网以专业的文秘视角,为您筛选了一篇从学习者的视角看计算机专业《C语言程序设计》课程教学改革范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要:《C语言程序设计》是计算机学科体系中的基础核心课程之一。文章从教学主体的学习者角度出发,感受到高校《C语言程序设计》教学过程中存在的一些问题,通过对《C语言程序设计》课程教学进行学习者反思,提出学生学习兴趣引发、编程思维培养、前后知识关联、案例驱动教学、改革考核方法等方面的教学改革见解,以使计算机专业课程教学更加符合大学生学习的特点与规律。初步的试验证明,作为高年级学生辅导培训低年级学生所采用一些教与学的方法提高了学生的学习兴趣,获得良好的教学效果。

关键词:学习者;计算机专业;C语言程序设计;教学改革

作者简介:卢炳旭(1993-),男,天津人,南京农业大学计算机系本科生,研究方向为计算机科学与技术。

中图分类号:G712 文献标识码:A 文章编号:1001-7518(2015)20-0076-04

《C语言程序设计》课程是计算机专业学生接触的第一门基础性程序设计课,以实际动手编程技能为手段,以培养学生设计能力为主旨,有助于形成学生分析问题和解决实际问题的能力,并为学生后续学习数据结构、面向对象程序设计、操作系统等专业课程奠定必备的基础。因此,能否熟练掌握并运用C语言,是衡量一名计算机专业学生专业水平的基本标准。教学的根本目的是为了促进学生的学习发展,一般的教学法研究主要侧重教的方面,多从教师的角度和理解看待课程与教学改革。本文试图从一个学习者也可以说是一个初学者的层面和角度,结合学习和助学《C语言程序设计》中的困惑、感悟及其体会,结合为低年级学生辅导培训C语言程序设计的一些感性经验,从两个维度思考有关大学课程与教学改革的问题,试图提出更加切合大学生学习的实际有效的学习方法和教学方式,希望能为高校课程与教学改革吹进一缕新风。

一、《C语言程序设计》课程教学过程中存在的问题

笔者在大一下学期开始学习计算机科学技术专业《C语言程序设计》课程,而且全程旁听了网络工程专业同样的课程,并通过调查在校往届学生的学习情况,发现《C语言程序设计》课程的教学内容和教学模式存在一些共性的问题。

(一)课程内容拘泥于与工程实践脱节的教材

计算机专业的日常教学中理论课所占比例较大,而理论课教师往往依据教学大纲指定的配套教材进行讲授,实验课的编程题目多数是验证课本上的例程或者理论课教材后的作业。通过调研计算机专业教师使用教材情况,发现目前计算机专业理论课使用的教材以传授理论知识为主,虽然每个知识点后给出了相应的实例,但是这些案例比较孤立或抽象,缺乏与工程实践的联系。长此以往,学生一方面觉得日常练习的例程枯燥无味,找不到激发其学习兴趣的落脚地和理由;另一方面,觉得即使刻板地掌握了某些语法的使用方法,也并不知道如何将这些语法知识应用于工程实践,使自己具备一定的解决问题能力。由于学生所学知识及其方法与工程实践没有有机地结合起来,学以致用的工程意识缺乏日积月累的养成土壤,学习的兴趣和动力不知不觉地消失在盲目与盲从之中。

(二)理论课程内容课堂吸收率不高

C语言是一门面向过程的程序设计语言,语法虽然不是很复杂,但是学生在最初接受理论知识时,往往由于练习量不足而难以融会贯通,很难将各个部分的知识点连贯起来综合运用。例如:if语句和while语句之间的相互嵌套,以及while语句和for语句中循环条件如何选择,都是理论课难以直接传授的。相对抽象的函数、指针和结构体等知识点,又会使学生不知从何下手,而C语言的前后知识点相关性较强,学生很可能因为一个知识点没有掌握而导致知识链断裂,从而降低课程整体的学习质量。实际的情况是,一旦一个阶段的学习进度跟不上,学生往往会对单调的编程语言的学习产生排斥心理,直接影响后续课程的学习。

(三)实验课程的重要性往往被忽略

《C语言程序设计》课程的理论教学与实验教学是两个相互依存、相互促进的教学体系。实验教学相对于理论教学更具直观性、趣味性和创造性,可以让学生在实验中真正地理解理论知识[1]。但目前高校通行的做法是,普遍把这两部分课程内容分开教学。理论课上,老师一板一眼、从理论到理论地讲述理论知识,学生貌似听懂却并不清楚如何实现。而实验课通常与理论课是相分离的,并不在同一天授课,学生又比较缺乏及时复习的意识,上机操作时理论知识已经遗忘的所剩无几,实验课的宝贵时间利用率偏低。从一名学习者的经验看,初学C语言时,很多知识点需要经过一定量的实际操作才能逐渐掌握,不少学生不重视实验课,实验课作业通过检索网络编程资料蒙混过关,实际的编程能力得不到有效锻炼,到了期末再根据老师的题目范围突击背诵程序,这种知识化的编程学习,其基本功自然不会扎实。

(四)考试内容重点与实际应用相关性较小

《C语言程序设计》是计算机专业学生学习各类专业课程的重要工具性课程,通过C语言编写的结构体可以塑造复杂的数据结构,并且结构体也是使学生理解面向过程编程思想的重要知识点。通过检索部分高校《C语言程序设计》课程考试大纲,并调研部分高校实际考试情况,发现其考试重点是C语言的结构、数据类型及其运算、基本语句、数组、函数、指针等知识点,由于课时安排不足,结构体、文件等知识点位于教材最后章节,不作为考试重点。这样,学生在复习C语言考试时,出于功利性考虑,重点考什么就复习什么。而且,复习时的感觉像是面对一门特殊的数字逻辑课,而非程序设计课;此外,由于缺乏拓展结构体的使用方法和在实际问题中的应用,在学习其他专业课程的初期,会发现遇到很多困难。

二、对《C语言程序设计》课程教学改革的实践

笔者在自己学习的同时,作为学习社团辅导员,连续两年对计算机专业本科低年级学生进行了《C语言程序设计》辅导培训,这种“兵教兵”的演练,增强了自己对初学者的认识,并像教师一样对在教学过程中存在的问题进行了一定思考,结合自身学习与学教的体会,尝试寻求适合计算机专业学生学习《C语言程序设计》课程的教与学的方法。

(一)巧用应用导言,点燃学生的学习兴趣

《C语言程序设计》课程是计算机专业学生真正窥视该专业门径的专业基础课程。在接触的初始阶段,不能急于让学生了解基本语法或者是快速入门,而是首先通过介绍计算机编程发展历史、创建C语言贝尔实验室、讲授游戏编程实例等话题,逐步揭开了编程在初学者心中的神秘面纱,使其将C语言看做一门构建宏伟数字世界精巧的技艺,从内心爱上计算机编程,进而树立学会计算机专业课程的信心。

例如,电子游戏被称为“第九艺术”,而电子游戏本身就是由编程语言编写的程序。在介绍课程教学大纲时,以讲解“贪吃蛇游戏”编程实例为切入点(如图1所示),融汇贯穿了C语言课程的各个知识点,并且告诉同学们,通过学习该课程,在期末每个人都可以独立完成简单游戏的开发。这样,大家的学习兴趣从第一节课开始就被点燃了,这也印证了爱因斯坦说过的“兴趣才是最好的老师”那句著名的论断。

图1 贪吃蛇小游戏DOS界面

(二)讲练交织并行,培养良好的编程习惯

初学C语言编程时,在变量名称定义、全角半角符号使用、大括号匹配等方面经常出现错误。因此,在辅导教学过程中,根据自己学习体会将编程规范和编程技巧讲解作为重点,通过边讲边练、边练边讲双向互动,养成学习者把理论与实践紧密结合起来良好的编程习惯,为程序的维护、更新、可移植,以及提高程序设计质量,降低程序维护成本打下牢固的基础。比如,每行只写一条语句,通过分层缩进写法体现编程语句的层次结构,使得程序结构更加分明;在不同程序区域块之前写好注释,以便说明程序功能;在程序出现逻辑问题时,多使用编译器自带的调试功能,设置断点进行单步调试;在不同的编程环境中熟练使用快捷键;等等。

关于授课形式,体现“一体化”的教学思想,强调理论和实验密切结合,尽可能把课程教学安排在计算机机房进行。在讲清编程知识点的基础上,重点结合工程实例演练编程技巧和方法,接着要求同学们一起实际操作,也即在“做中学”,并使用VC++进行验证,使得同学们能够通过有效实验,验证所学知识,得到运行结果,并发现存在的不足和问题。这种“讲练交叉并行、当堂即学即知”的教与学的方式,大大提高了老师教学的有效性,也巩固了学生学习的效果。

(三)注意环环相扣,关联前后知识

C语言作为学习编程者的入门级语言,语法具有一定的抽象性,初学者难免会因为复习不及时而导致前期知识点的遗忘,待到日后的知识应用更是一头雾水。其实,复习是最好的学习,有序是最好的方法,运用是最好的巩固。

首先,在学习新知识前,回顾以往知识点。比如,“循环结构”与“分支结构”知识点有着千丝万缕的联系,在讲循环结构时,对于相同的例程使用分支结构重新写一次,使同学们不仅掌握循环结构与分支结构的异同点,而且在学习新知识的同时,对旧知识得到了复习和巩固[2]。

接着,在学习新知识点的过程中,注意由浅入深,用所学知识诱导新的编程思路,同时要结合编程实例懂得活学活用。比如,指针是C语言殊的数据类型,同学们在开始接触指针时,可能会对其能够直接指向变量存储位置的特性感到很不解。因此,本人在讲解变量知识时,就把变量在计算机内存中的存储方式,通过形象化的图示和语言解释相结合的方式展现出来(如图2所示),这样,既可以使同学们了解变量在内存中的存储方式,也可以由变量地址这个概念对指针内保存的内容有初步认识[3]。在介绍字符数组时,使用scanf(“%s”)语句对字符数组赋值,数组名前不需要添加取地址符“&”。这时,向同学们解释“由于数组名是整个数组的数组指针,所以不要进行取地址”;然后,再次把指针和地址这两个概念重复解释给同学们。这样,使同学们在今后学习时,可以和前面的知识点呼应起来产生共鸣,达到温故知新、豁然开朗的效果。

图2 变量与地址的对应关系

(四)提升实验教学的效度,采用案例驱动教学

实验课不仅是验证理论课所学知识的重要过程,更应注重学生独立开发C语言程序能力的培养,采用案例驱动教学法有利于充实实验课教学的内涵。受到第一节课展示电子游戏的启发,在辅导培训中将同学们分为若干个小组,每组在学期期末都要以贪吃蛇游戏中包含的编程技术为基础,开发出自己组的小游戏或者应用程序。

具体过程是:把贪吃蛇游戏的源程序进行分解,每当讲解完一个章节后,就把对应这个章节知识点的源程序作为实验课最后的项目启发给同学们,使同学们在整个学期中,逐渐加深对游戏源程序的理解。在学习过程中,大家的学习热情很高,一个可以趣味演示的程序比单纯地验证例程更能激发同学们尝试编程的欲望。学习结束时,大家通过对整个案例的分析和理解,把全书知识点关联在一起,形成属于自己掌握的知识结构。这种从简单到复杂、从局部到整体的开发程序能力,像滚雪球一样越滚越大,也为其将来开发大型程序奠定了基础。

(五)注重能力锻炼,改革考核方式

为了避免期末时临阵磨枪、应付考试,考核重点和方法要有所改变,把考核编程知识向考核编程能力转变,考核方式上也从个体考核向个体与小组相结合考核转变,培养学生的团队意识和协作精神。

对理论知识的考核。理论知识是继续学习的基础,随着学习的深入会显得日益重要,具有扎实的理论功底才能达到举一反三的应用效果。理论知识的考核不能降低要求,但考核应注重不同知识点综合贯通,而不是简单的概念记忆或似曾相识案例的复现。因此,编写程序解决综合性问题和根据程序描述程序运行结果是理论考察的重点。由于编写程序的非唯一性,考核题目要鼓励拓展学生的创新思维,在程序填空题方面,一道题目可以使用不同的编程思想写出2-3种编码方法,只有充分理解不同的编程思路,才能正确地进行程序填空。这样,既可以达到以考促学的目的,也可以拓宽同学们编写程序的思路,使考核成为学习过程的延伸。

对实验能力的考核。取消最后的上机考试,最终的考核成绩由平时实验成绩和期末实验成绩组成。其中,平时实验成绩为同学们每节实验课编程内容的验收成绩;期末实验以分组形式进行团体考核。关于期末综合实验,以简单的人机互动C语言编程技术为基础,每个小组按照项目要求制定每个组员分工协作的工作方案,由老师审查后启动实验,完成后以小组形式进行演示和汇报,并且通过编写实验报告梳理在实验中学习到的知识点,以课程设计的方式作为学生期末试验成绩。这样,既能锻炼学生应用编程语言的能力,做到学以致用,又能培养学生团队意识和研究能力,把考核由一种过关的消极观念转变为学完成习任务的正确轨道上来,使考核机制成为促进学习的有效手段[4]。

在学习和调研中发现,高年级学生辅导培训低年级学生这种“小先生制”,学学相长,在计算机专业方面非常有效,在这样的“学群”或“学团”中学习的学生表现出争取优秀的优势和相对突出的成绩。由于学生之间没有明显的层次感,有利于营造出一种积极的学习心态,也许还有一个重要的因素是,唯有学生更懂得学生,所以更容易产生兴趣共鸣而形成学习共同体,特别是对于一些具体的学习难点更容易获得帮助互动,少走弯路或形成集体攻关力。这些显性的或隐性的学习行为,对学生更自觉地学习,建立问题导向学习思维模式,以及运用所学知识解决实际问题都会产生积极的影响。

参考文献:

[1]刘芳,等.《C语言程序设计》教学存在的问题及改进[J].教育理论与实践,2012(36).

[2]胡迎春.《C语言程序设计》课程教学新法[J].广西民族学院学报(哲学社会科学版),2003(S1):221-222.

[3]叶幼林.对计算机C语言教学的探讨与研究[J].中南民族大学学报(人文社会科学版),2004(S1):189-190.

[4]米磊,等.“面向学生”的C语言教学方法研究与实践[J].计算机工程与科学,2014(S1):5-9.