《C语言程序设计》课程教学改革探讨
作者:王燕 周恺 潘雷
来源:电脑知识与技术 201809期
时间:2018-06-08
摘要:《C语言程序设计》是大多数高校计算机专业的第一门程序设计类课程,该课程在整个计算机课程体系中有着非常重要的地位,但教师与学生都普遍认为该课程既难教也...
摘要:《C语言程序设计》是大多数高校计算机专业的第一门程序设计类课程,该课程在整个计算机课程体系中有着非常重要的地位,但教师与学生都普遍认为该课程既难教也难学。该文首先分析了当前C语言课程教学中存在的一些普遍问题的成因,然后分别从教学目标、教学内容、教学方法、教学手段以及考核方式等方面进行了探索,主张注重培养学生程序设计的思想和使用C语言开发软件能力,并给出一些可行的改革建议。实践证明,该教学模式的改革方案是提高C语言教学质量,提高学生运用C语言解决问题的有效途径。
关键词:C语言;教学改革;网络教学平台;在线评判系统;过程考核
中图分类号:G642.0 文献标识码:A 文章编号:1009-3044(2018)09-0150-04
Abstract: "C language programming" is the first program design course for computer specialty in most colleges and universities. The course is very important in the whole computer course system, but both of teachers and students agree that the course is difficult to teach and study. Firstly, the paper analyzes the causes of some common problems in C language teaching. Then, the teaching objective, content, method, approach and assessment are explored respectively. The paper proposes to cultivate students’ program design and software development capabilities using C language, and give some feasible suggestions for reform. Practice has proved that the reform plan of the teaching is an effective way to improve the quality of C language teaching and the students’ use of C language to solve the problems.
Key words:C language; teaching reform; network teaching platform; online judgment System; process evaluation
1 引言
C语言是当今流行的高级程序设计语言之一,它既具有高级语言的特点,又具有低级语言的功能,可以写出效率很高的程序,被世界计算机界广泛接受。目前,在各高校中《C语言程序设计》课程已作为信息工程类专业,特别是计算机相关专业普遍开设的一门专业基础课。通过这门课的学习,学生不仅需要熟悉C语言本身的各种结构,而且还应该学会从问题出发,通过逐步分析和分解,把原问题转化为能用计算机通过程序方式解决的问题,进而编写出对应的C语言程序并具备一定调试程序的能力[1]。更重要的是,掌握一门程序设计语言也是大学素质教育和计算机基础教育的一部分[2]。
但在实际教学中,学生反映C语言课程難学,程序编写能力提高慢;而老师们也认为课时较少,学生难教,期末考试成绩未达预期。经调研分析,出现以上问题的原因主要有以下几个方面:
(1) 入门难。《C语言程序设计》是大多数高校学生进校后学习的第一门程序设计课程,加上C语言本身语法规则多且灵活,很容易出错,指针等概念又抽象复杂,难以理解。因此,学生在学习的时候难免会出现畏难心理。
(2) 教学内容不合理。在以往教学中,教师往往过分强调C语言本身语法细节,使学生容易陷入语法知识的细节而忽略程序设计的本质。这样,学生不能真正学会程序设计的基本思想和方法,更不能利用C语言编程去解决实际问题。 “高分低能”现象较为普遍。
(3) 教学方法和教学手段单一。课堂教学是学生知识来源的主要方式之一。但很多教师在课堂上主要采用“教师讲,学生听”这种以自我为中心进行的授课模式,教学手段也仅限PPT加黑板板书。导致学生无法参与到教学过程中,学生学习兴趣下降,课堂上甚至出现睡觉、玩手机等现象,致使教学效果无法得到保证。
(4) 考核方式不合理。传统的《C语言程序设计》考核方式为:平时30%+期末考试70%。 显然,这种简单的“一锤定音”考核方式很难督促学生平时的学习,学生把一门课的学习时间就集中在考前的一个星期,学习效果可想而知。甚至,在学生的要求下或鉴于学校对考试成绩的要求,一些教师还在考前划重点,这进一步助长了学生的这种考前临时抱佛脚的心理。
如何解决上述问题?又怎样才能让学生爱学、学会、会用?这些都是值得我们探讨的问题。近年来,在学习其他高校相关课程改革经验和总结以往教学经验基础上,我们不断地对《C语言程序设计》课程改革进行探索,取得了一定成果,同时也存在一些需要进一步研究和解决的问题。
本文的剩余部分内容安排如下:第一部分,给出了我们在教学目标、教学内容、教学方法、教学手段以及考核方式等方面的具体改革措施;第二部分,展示了我们的教学成果以及目前还存在的问题;最后,总结全文。
2 具体改革措施
首先,我们确定了《C语言程序设计》课程改革的总体思路:
(1) 运用“建构主义”的学习理论,学生是学习和实践创新的主体,教师发挥“向导”作用,成为“启发者”和“示范者”;
(2) 贯彻“以学生为中心”(以生为本)的思想,鼓励学生积极与课程学习,将“学会自学”作为学习的基本要求;
(3) 确定多元化的考核目标,将课本的学习与课外的阅读、课内的表现与课外的表现、校内的学习与校外的实践等结合起来进行考核。
接下来本文分别从教学目标、教学内容、教学方法和手段以及考核方式等方面探讨具体的改革措施。
2.1教学目标改革
树立一个正确的教学目标是学好一门课的根本所在,教师和学生都应向这一目标“看齐”。《C语言程序设计》是一门实践性比较强的程序设计类课程。程序设计最重要的思维过程是如何把目标域问题建模成计算,然后再根据选用的编程语言将计算过程形式化出来[3]。因此,对于程序设计类课程,不能简单要求学生掌握语言的基本语法规则,而是要培养其解决实际问题的能力和编程实现的能力。
为此,我们在《C语言程序设计》课程教学中注重培养学生的编程思维能力,以启发和训练学生的编程思维为主导,着眼于解决问题的思路和方法,从而增强学生解决实际问题的编程能力,激发学生的编程兴趣,培养学生的创新能力。也为学生在后续学习过程中更容易接受其他编程语言做准备。
具体而言,通过该门课程的学习,学生应具有以下基本编程素质和能力:
(1) 基本的编程思维及良好的编程习惯;
(2) 代码调试和测试的能力;
(3) 查找技术资源与阅读技术文档的自学能力。
2.2教学内容改革
前文提及,C语言作为编程语言的启蒙,最重要的是培养学生的编程思维能力以及着眼于解决问题的思路和方法,从而增强学生解决实际问题的能力。然而传统的教学内容过多地强调语法知识,这样极大地限制了学生编程思维的形成和编程能力的提高。这就是学生不爱学、学不好,即使学会了语法知识也不能转化为实际能力的根本原因。
因此,在整个C语言教学过程中,应本着“强算法、弱语言”的原则,即把解题思路、方法和步骤当做授课的重点,从而让学生明白如何分析并解决实际问题,逐渐培养学生明白如何分析并解决实际问题,逐渐培养学生进行程序设计的正确模式。
这需要对教学的内容进行整合和分类,从应用出发,分散重难点[4]。具体而言,我们首先,将数据类型、运算符、表达式等抽象的知识分散到各个章节,即学即用。其次,顺序、选择、循环、函数等结构化程序设计内容只讲基本用法,通过引入具有趣味性、实用性的例题,吸引学生的兴趣,让学生积极主动地参与到学习中,体会编程的乐趣。对于这部分难于理解的语法细节可以通过逐步加大例题的难度方式呈现给学生。最后,数组、指针、结构体、文件等应用模块教学内容以一两个与学生息息相关的项目如成绩管理系统、学籍管理系统、学生选课系统等,作为切入点,逐步深入和完善。在整个项目过程中,重点讲解分析以及解决问题的思路,培养学生编程思维能力。另外,还将部分计算机经典算法引入课堂中,进一步提高学生程序编写能力。
2.3 教学方法改革
普希金曾说过:当学生的思维停止时,你的教学效果等于零。因此,在教学方面我们使学生积极主动参与到课前、课堂、课后整个教学过程中。
1)强调课前预习
我们每次提前一星期将学习内容以一个个不超过20分钟的小视频发布在本校网络教学中心平台[6]上,供学生随时随地观看。这样,一方面将学生的被动学习状态转化为主动学习状态,提高学习效果;另一方面任课教师在课堂上对于简单、基础的内容可以不讲,只讲重点和難点,提高教学效率。另外,为了了解学生对视频内容的掌握情况,除了发布视频外,我们还给出了一些针对视频内容的提问。任课教师可以根据学生对这些问题的回答情况,对教学内容有选择性地进行讲解。
2)讨论式和项目驱动式课堂教学
目前,C语言教学分两部分,理论课堂和上机实验。
在理论课堂上,首先,我们对预习内容做简单总结性回顾;接下来,重点以“项目为导向”组织课堂教学,将本堂C语言所包含的知识点融入到一两个实际案例项目中,通过任务驱动,将相关理论知识引入教学过程中。在案例分析时,重点讲解编写程序的思想和方法,确定编写程序方案;然后引导学生讨论学习,并按照讨论得到的方案现场编写程序。此外,为了吸引学生的注意力和提高学生程序调试能力,还可以故意在程序中在设置一些BUG,让学习去发现问题,解决问题。对于一些较为复杂的项目可以采用递进驱动教学法[5]。也就是先给一个比较实际的切入点,使学生比较容易入手,然后再将此项目不断修改、扩充,引导学生逐步深入,逐步优化。因此,整个过程包括:提出问题、解决问题、扩展问题、再解决问题、优化设计等环节,这是一个螺旋式滚动向前的过程,能够非常自然地调动学生的参与,有效地开阔了学生的思维,使得学生在课堂上真正成为“主体”,教师扮演了“主导”角色。
对于上机实验环节,我们将实验分为两类:基础性实验和设计性实验。基础性实验用于消化和巩固理论教学内容,相对比较容易,学生能够较顺利地通过实验,获得一定成就感。这类实验题目当堂发布,每个学生需独立完成,当堂提交。设计性实验难度较大,实用性强,学生需要组队完成。课前给出题目,组织学生讨论,得出算法流程,然后上机编程调试,完成后当堂提交。这样一来,一方面有利于培养学生对知识的应用能力与问题的分析能力,更主要的是培养了他们的团队协作能力。
在上机过程中,教师巡回指导,可以发现学生编程过程中的普遍性问题和学生们的新思路、新方法。课程结束前,教师总结学生出现的问题,让学生进行分析和解决。同时还可以请有独特思路的学生演示自己的方法和程序,以鼓励大家提出新方法。
3)重视课后学习反馈
为了了解学生对知识掌握情况以及提高学生知识梳理能力,每次课结束后,我们要求学生及时完成学习日志和自我评价。主要内容包括:本次课的学习目标是什么?本次课你学到了哪些内容?本次课还有哪些知识没掌握?为什么没掌握?在课堂讨论中,你有哪些特出表现?又犯过哪些错误?为什么会犯这些错误?等等。
2.4 教学手段改革
在教学手段上,除了采用多媒体教学课堂教学和板书设计结合方式外,我们还借助了本校网络教学平台以及在线评测系统(Online Judge System,OJ),充分利用因特网发挥信息现代化强大优势,使其成为辅助教学有力工具。
1)网络教学平台
教师通过网络平台可以上传各类教学资源、批改作业、网上答疑;而学生可以随机随地了解自己学习状态,更有针对性地调节个人学习方案,促进学习效率的提高和自我知识水平的提升。网络教学平台主要内容有:(1)教学大纲、教学进度、教学课件、教学视频等教学资源,供学生了解教学内容;(2)较丰富的题库内容,用于学生学后练习、自测和自我评价。题型有选择、程序阅读、程序改错、程序填空,主要巩固语法和提供学生的程序思维能力。(3)讨论区,主要用于构建学生和教师、学生与学生之间的交流渠道,以便参与者之间进行交流、协作和讨论。
2)在线评测系统
为了方便学生练习编程,以提高其编程能力,学院还建设了OJ系统。OJ系统可以实现在线提交程序、实时评测、在线考试等功能。具体我们将上机实验编程以及课后编程作业都发布在OJ系统上,要求学生通过OJ来完成。其中,实验编程每周2-3题,要求当场提交;课后编程每周4-6题,一周内完成。另外,我们还在OJ系统上发布了上千道编程练习题,学生可以根据自己的水平自主选择进行练习。
利用OJ系统既可以保证评测结果的公平性和实时性,也可以减轻教师的工作负担。此外,在OJ系统上提交完程序后,系统能立即给出结果,这样学生能及时对程序进行订正,实现查漏补缺。同时学生通过在OJ上做题,排名不断上升,产生成就感,从而提高学生编程兴趣。
3) 引入课外实践
为了及时解决学生课后遇到的问题以及营造浓厚的学习氛围,学院还配备了专门教室作为答疑室。答疑室配备一门专职实验室教师,还有若干名高年级优秀学生。答疑室全天候开放,学生们可以相互讨论学习也可以求救于教师。我们还鼓励学生参加如ACM、蓝桥杯等各种计算机程序设计大赛、大学生创新性实验项目、大学生课外科技项目,以培养学生的实践能力、解决问题的综合能力,鼓励学生创造性思维。更重要的是,以上述比赛和项目为契机,激发学生的编程兴趣。
2.5 考核方式改革
考核方式可以说是一门课程的指挥棒,如何考试也就决定着学生如何学习,老师如何教学。在传统考核方式中,考核方式单一,期末考试成绩占的比重过高,导致学生不注重平时学习,过多寄希望考前突击。另外,传统的C语言课程一直采用笔试的考试方式,大多试卷以语法知识为主,而对编程能力要求不够。从而导致教师在教、学生在学的过程中,只注重语法知识、而编程能力培养不够。一学期下来,一些学生甚至不知如何使用开发环境、如何编译运行程序、如何排查程序错误等这些简单的编程问题。
因此,我们加强过程考核,使学习过程中始终穿插着考核,这样有利于提高学生对课程学习的重视程度,促使学生关注课程学习的每一个细节,对提高学生自主学习能力有很大的帮助,而且能显著提高课堂时间利用率,使学生能够达到高效率的学习。
考核具体要求以及权重如表1所示。
3 改革成果及问题
3.1 改革成果
近一年多来,通过对《C语言程序设计》课程进行教学改革,我们取得了良好的教学效果。学期结束时,大部分学生都觉得学有所得,对本次教学改革比较认可。教学成果主要表现为以下几点:
第一,学生通过课外大量的阅读和自主学习,学习能力和自主性都得了很大的提高。80%以上的学生能在课前进行预习,课堂上睡觉玩手机现象基本消失,部分学生还能积极主动回答问题。第二,学生开始注重提问、交流、总结和反思。网络讨论区、QQ群、答疑室等讨论人明显增多,已出现师资配备不足。第三,考前突击和指望教师透题的心态有所转变。学生期末考试前压力减轻,不再需要熬夜复习,也不需要教师划考试重点。第四,期末成绩明显提高。
图1和图2分别是我校2015级和2016级计算机专业《C语言程序设计》成绩分布图。由图2可以看出,教改后该课程不及格率为12.24%。这对其他学科来说,可能并不理想。但对《C语言程序设计》这样一门我校学生普遍认为非常难学的一门课程来说,非常难得。由图1可以看出在教改前的不及格率就高达35%左右。同时对比两图还可以看出,教改后70分以上的比例也较教改前大幅提升,由39.85%上升到57.61%。
最后,近一两年来,我院学生在蓝桥杯和ACM程序竞赛中获得多项奖项,特别是在今年还获得第42届ACM国际大学生程序设计竞赛亚洲区域赛银奖。
3.2 存在的问题
本次课程改革虽然取得了一定成效,同时也存在一些问题,主要表现如下:
首先,大部分同学成绩集中在60-80分之间,80分以上高分不多。分析其中原因,发现大部分同学编程能力较以往同学有所提高,但考核成绩中编程部分得分还不太理想没有达到预期目标,因此不易获得高分。建议在本课程开设前,增加一门课程,训练学生利用工程思想和方法发现并解决问题,这对学生编程能力提高会有所帮助。当然,编程能力的提高并不是一蹴而就,需要一个长期积累过程。
其次,学生的预习还不是很到位,导致课堂缺乏深层次的讨论。这需要我们在今后的工作中,进一步改进预习指引,合理设置讨论主题,提高预习质量。
最后,教师资源不足,一些教学工作难以开展。通过这次教学改革,学生平时学习主动性提高,问题也多了起来,但师资不足,难以应付。另外,网络教学平台和OJ平台也需要专门人员维护,导致教师资源进一步紧张。因此,建议在学生中聘任助教,协助教师来完成任务。
4 结束语
本文针对《C语言程序设计》课程实践性高以及当前本校教学过程中存在的问题,进行相应的教学改革。本次改革以培养学生程序设计的思想和应用C语言开发软件能力为目标,依托学校的网络教学平台、在线评测系统,从教学目标、教学内容、教学方法和手段、考核方式等多方面探讨了该课程教学模式。实践证明,教学效果显著,学生学习能力和自主性都得了很大的改善,C语言编程能力也得到一定程度的提高。在今后的工作中,我们将继续根据实际教学情况,对文中提出的改革措施进行完善,让学生喜欢学、学得会、学得好、用得活。
参考文献:
[1] 裘宗燕. 从问题到程序-程序设计与C语言引论[M]. 北京:機械工业出版社,2013:7-8.
[2] 谢竞博. C语言程序设计教学中的问题及改革建议[J].重庆邮电大学学报社会科学版,2008,20(2):137-140.
[3] 尹波,孟爱国,朱前飞,左利芳. 面向编程思维能力培养的C语言教学改革研究[J].计算机时代,2016 (11):67-69.
[4] 钟美. 培养应用型人才为目标的C语言教学改革[J].计算机教育,2013(6):55-58.
[5] 张素芹,吴连生. 独立学院“C语言程序设计”教学改革实践[J].计算机教育,2010(14):21-23.
[6] 南京晓庄学院.南京晓庄学院课程中心[CP/OL].[2018-2-5]. http://njxzc.fanya.chaoxing.com/portal.
转载请注明出处。
本文标签:
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
相关文章
新媒体环境下课程教学..
论高校计算机课程设置..
面向专业的计算机基础..
Python程序设计课程教..