高级程序设计课程教学研究及探讨
2015-04-08张骥先
张骥先,岳 昆
(云南大学 信息学院,昆明 650031)
高级程序设计课程教学研究及探讨
张骥先,岳 昆
(云南大学 信息学院,昆明 650031)
程序设计是计算机、通信技术等大部分理工专业学生的必修课程。一般采用C语言作为讲解内容。传统课程的教学法运用到程序设计课程的教学时存在着一些不足,如关键概念学生理解困难,实践与教学脱节,学生对程序设计积极性不高等问题。文中从教学内容,教学方法,教学实践三个方面对程序设计课程进行研究和探讨,将提升教学质量,培养学生程序设计能力及积极性作为课程主要教学目标。经过实践检验,收到了较好的成效。
程序设计;C语言;教学内容;教学方法;教学实践
程序设计是一门较特殊的课程,与其说学习程序设计是对学生的挑战,不如说讲授程序设计是对教师的挑战[1]。第一,要求教师对程序设计的思想和内涵把握得很到位,要清楚地知道学生在理解一些理论知识时为什么会遇到障碍,会遇到什么样的障碍,才能设计出良好的教学方案[2];第二,也要求教师有较长时间的程序设计实践经验,把握程序设计课程的授课重点,避免在一些意义不大的概念上进行纠缠[3];第三,教师有义务让学生认识到程序设计是一门优雅的艺术,培养学生对程序设计的热情。但是,做到以上几点并不容易,因为目前程序设计课程还存在以下的问题:
(1)学生在学习程序设计课程时没有任何基础;(2)传统的教学方法不适用于程序设计课程;(3)以往的教学实践方案不利于学生提高程序设计能力。
基于以上三个问题,本文从教学内容、教学方法和教学实践三个方面探讨程序设计课程教学改革。
1 教学内容
程序设计课程的开课背景往往针对大一新生,这些学生在高中阶段虽然接触过计算机,但很少有人接触过程序设计,所以一来就开始讲授程序设计内容是不妥的。这里以C语言为例,讨论几个授课时学生难以理解而容易被忽视的概念。
1.1 如何切入程序设计课程
要了解程序设计,必须首先了解程序是如在计算机中运行的,这个时候可以以学生熟悉的方式,如QQ客户端,游戏,音乐,视频是如何在计算机中工作及存储为例子进行讲解,让学生对数据存储和程序执行流程等关键概念建立起一个初步的认识;而后通过比喻的手法引入内存地址的概念,从第一节课就为后期讲授程序设计中比较难的部分如数组,指针,数据结构埋下了伏笔,使学生在后期的学习过程中可以较为平滑的过度。当学生理解了这些概念后,再将重点转移到如何编写程序上,这时学生已经明白程序是从何而来,以及程序设计的目的和意义。在完成了这些铺垫的工作后,才能开始讲授程序设计课程的内容。
1.2 如何讲授数据类型
数据类型是一个抽象的概念[4],学生在无法看到“字节”的实体时,要理解数据类型是非常困难的。这时可借助学生接触过的一些计算机基本常识,如内存大小、硬盘大小和歌曲视频大小,来对字节的概念进行阐述,使学生对计算机数据存储建立从微观到宏观的完整概念模型,才能对不同数据类型的存储特点和方式记得牢靠。
1.3 如何讲授函数
要理解函数的作用首先要理解函数出现的意义,书上一般对函数的描述是可以将一些重复出现的计算逻辑独立出来,从而增强程序的合理性和健壮性[5]。这样的描述只通过幻灯或者板书是无法让学生真正感受到函数的作用的。这时可以举一个例子,如生活中我们在享受别人提供的服务,但是我们并不关心是谁提供的这种服务,来让学生明白函数的独立性以及封装性。函数的另外一个重要的概念是C语言的函数参数传递机制是值传递,但是很多书上认为指针作为参数时,传递的是地址,从而独立出地址传递这个概念。这样理解当然并无问题,但对于学生理解C语言的内涵有些不妥。所以在讲授这个知识点的时候,教师不必将传递值和地址区别对待,只告诉学生地址也是一类特殊的值,这样的传递方式并没有破坏C语言参数传递机制。当学生对函数参数传递机制建立起一种统一的概念以后,理解指针作为函数参数时是如何运作的会非常快。
所以,C语言前几章的内容才是授课的难点,因为这涉及程序设计的基础概念,如果学生不能对这个概念建立起一个完成的认识的话,后面的课程很难开展。而传统意义上难点如数组、指针和数据结构却并不是难点,因为学生一旦对数据存储和程序执行有了宏观和微观上认识后,理解这些概念并不困难。但这里需要注意的是在学生对程序设计渐入佳境后,需要对他们的编程习惯进行有针对性的培养,对于程序设计的规范性如函数名,变量名,参数名命名等要进行透彻的讲解。类似写文章,代码同样需要具有可读性和观赏性。
2 教学方法
以往C语言的教学多采用板书和幻灯结合的方式,用这种方式进行程序设计教学时,学生无法通过黑板和幻灯片获知程序如何编译,如何执行。因此,上课时教师采用现场编程的方式,对一些较复杂的程序,直接通过开发环境进行编写,并且将编写过程投影到大屏幕上。程序的每一步,教师都对学生提问,让学生来帮教师决定如何设计,这样学生对编程的过程会有一个直观的认识,也会对一些关键算法记得更牢。最后编写的程序通过编译和运行得到正确结果,学生会有很强的成就感,从而激发对编程的兴趣。教师还必须强调程序的调试技术。以往很多学生在学完了一学期的程序设计课程后仍然不会进行程序调试,所以在现场编程演示中,每当程序运行得到不正确的结果时,教师都对程序进行调试,学生在课堂中可以学习到如何对一个程序进行断点设置、变量查看、内存查看、函数调用栈查看、汇编语句查看和单步跟踪等简单调试技术,这些对于学生理解程序执行流程有很大好处。值得注意的是,学校的多媒体教室一般都装有还原系统,每次装好的开发环境关机后就被还原了。可以采用CodeBlock集成开发环境,这个开发环境最大的好处是跨平台、安装文件小、安装速度快,几十秒钟就可以安装成功,比VC6和Visual Studio更方便。CodeBlock支持标准的C及C++程序开发,而且它是ACM-ICPC(国际大学生程序设计大赛)指定使用的开发环境,这也为后期培养ACM参赛学生提前打下了基础。
3 教学实践
程序设计是一门实践的艺术,相应的实践课程的设计和安排也相当重要,采用以下两种方法进行改进。
3.1 第一种方法
是将实践活动从个体行为改为集体行为。以往是实践都是以单个学生作为考核对象,采用做作业的方式对学生掌握的内容进行考核,这种方式在某种程度上的确会取得较好的效果。但这是一种逼着学生学的方法,学生在考过试以后不会再对这门课有兴趣,效果并不好。教学中采用的方式是将3名学生作为一组进行考核。因为,解决一个难题并不是一个人的事情,应该是一个团队的合作,每个人在解决问题中所能贡献的能力是不一样的。比如,有的人逻辑思维缜密,但是代码功底不强,有的人编写代码能力很强,但是算法功底不扎实,这样的配合方式可以很快提高自身所缺乏的能力。组与组之间形成的是竞争关系,这样小组成员会想尽一切办法来提高自己小组的竞争力,力求获得更大的成效。例如,在一次实践课中,如果能当堂完成课题的小组可以提前走,获得较高分数,没有完成课题的小组需要回去完成这个课题,并书写一份课题报告在下节课时交上来。这种竞争机制会激发学生的积极性,在提高学生解决问题的能力的同时还培养了团队合作精神。
3.2 第二种方法
是对实践内容的改进,以往的实践课程多是让学生对书后的习题进行编写,此类习题一般与日常生活联系较少,有些习题理解起来比较晦涩,有些习题所阐述的问题在实际项目中很少遇到,这就会使学生降低热情,认为程序设计都是解决一些不实用的问题。在教学中,教师充分参考国内各大高校ACM-OJ(Online Judge)网站,并从中整理出一些适合程序设计实践课程的简单题目,进行了分类,这些题目最大的优点是没有标准答案,可以让学生自己建立合理的数学模型,并进行验证。虽说对于刚开始学习编程的学生有一定难度,但确培养了学生的逻辑思维能力,也具有很强的趣味性,在这种竞争的环境中充分体现了快乐学习的过程。
4 结束语
程序设计课程与其他类型课程在授课方式上有很大不同,因为程序设计培养的是学生抽象的逻辑思维能力,所以在理论知识的讲解上要注重方式和方法,要通俗易懂,将复杂的概念简单化描述,让学生理解概念的来龙去脉。还要注重培养学生解决科学问题能力,程序设计只是一种用于解决科学问题的工具,不应该单纯的对工具的使用进行训练,而需要首先培养学生解决科学问题的思维方式和建模能力。需要培养学生将这种思维和模型转换为程序的实践能力,养成良好的编程习惯,并且对程序设计保持长时间的热情。只有达到了以上几点,才能算是较为成功的完成了程序设计课程的教学工作。
[1]陈旭东,陈伟君,罗予东. 地方本科院校计算机应用型人才培养模式探讨[J]. 计算机教育. 2010(5):56-58.
[2]周军妮,杨润玲,江莉.C语言的多维立体教学系统[J]. 计算机教育,2013(2):83-86.
[3]张长海,陈娟.以“程序设计”为主线、以“案例”为驱动的程序设计教学改革[J].计算机教育,2008(8):143-145.
[4]Stephen Prata. C Primer Plus[M]. 北京.人民邮电出版社,2005:36.
[5]裘宗燕. 从问题到程序[M].北京:机械工业出版社,2005:136.
Thinking about Advanced Programming Courses in College Curricula
ZHANG Jixian, YUE Kun
(School of Information Science and Technology, Yunnan University, Kunming 650091, China)
Programming language is the obligatory course for most polytechnic students. Generally, the teachers use C language teach to student. However, it still has some shortcomings of traditional didactics applied to teaching programming courses, such as misunderstanding key concepts, separately practicing and teaching, unenthusiastic for progra mming. In this paper, we research and discuss the program design curricula from the teaching content, teaching methods, teaching practice. The conclusion will enhance the quality of students programming skills and motivation as the main teaching curriculum objectives. It has been proved to get the better effects by the above teaching measures.
advanced program language; C language; teaching content; teaching methods; teaching practice
2014-06-17;修改日期:2014-07-03
云南省级精品课程资源共享平台建设基金资助项目(X3112019)。
张骥先(1980-),男,博士,讲师,研究方向:移动互联网、云计算和移动互媒体。
G642.4;G423.07
A
10.3969/j.issn.1672-4550.2015.03.052