高赟+张骥先+孔兵+张学杰
摘 要: 从多年教学、科研工作及毕业生反馈等经验来看,无论采用哪种教学方法开展教学工作,C语言程序设计的课堂教学和未来就业或深造需求之间仍然存在着脱节现象,学生对C语言程序设计的应用能力亟待提高。在实际课程教学过程中,需要补充或强化以下几个方面的能力培养:遵守编程规范、把握代码框架、调试程序、代码转化和团队协作等。这些能力的培养可以使学生快速适应实际应用。在提高学生对C语言编程应用能力的同时,这些能力的培养还可以促进C语言程序设计课堂教学与未来就业或深造需求的有机接轨。
关键词: C语言程序设计; 应用能力; 课堂教学; 未来就业; 脱节
中图分类号:G424 文献标志码:A 文章编号:1006-8228(2017)08-61-03
Abstract: By analyzing the teaching and research practice and the graduates' feedbacks of many years, the disjoint phenomenon between C programming teaching and future employment or further education still exists regardless of what kind of teaching method, and students' application ability of C programming should be improved urgently. In the actual course teaching process, several abilities need to be cultivated, which are programming specification, code frame, code debugging, code transformation, team cooperation, etc. The cultivation of these abilities can make students quickly adapting the requirement of actual application, at the same time of improving the students' application ability of C programming, it can also promote the organic integration of the classroom teaching of C programming and the requirements of future employment or further education.
Key words: C Programming; application ability; course teaching; future employment; disjoint
0 引言
在计算机课程体系中,由于C语言具有完备的高级语言特性,并具有丰富灵活的控制和数据结构、简洁而高效的语句表达、清晰的程序结构和良好的可移植性等特点,其已成为计算机相关专业、大多数理工类专业本科学生必须学习和掌握的计算机高级语言之一。用C语言编写程序的能力可以为学生学习其他编程语言奠定基础,C语言程序设计能力是本科学生未来就业的门槛条件,也是未来攻读硕士学位、博士学位和从事科研工作最基本的专业功底。因此,高校对C语言程序设计及应用能力培养显得十分重要。
1 常用教学方法
对于计算机相关专业和大多数理工类专业本科学生而言,C语言程序设计是一门重要的专业基础课程。一般情况下,大学本科一年级开设C语言程序设计课程,其教学内容涉及C语言概述、数据类型、运算符、表达式、结构化程序设计的三种基本结构以及相关语句、数组、函数、指针、结构体、共用体和文件操作等[1]。在实际的教学过程中,常用的教学方法有知识点罗列式教学、项目/问题驱动式教学、基于微课的翻转课堂教学、基于慕课的线上线下教学等方式[2-3],各种教学方法大致如下。
⑴ 知识点逻列式教学方法,该方法是一种最为传统的教学方法,通过对C语言程序设计相关的知识点进行逐一讲解及相应编程训练达到教学的目的。
⑵ 项目/问题驱动式教学方法,该方法围绕项目/问题任务展开教学,教师的教学与学生的学习都是围绕着一个具体项目/问题任务,通过主动应用各项学习资源,进行自主探索和互动协作学习达到教学的目的。
⑶ 基于微课的翻转课堂教学方法,微课以短小精悍、易于传播的特点备受师生欢迎,学生在课前对微课内容进行在线预习,课堂中对微课知识点中的重点难点进行解决,课堂后通过微课形式进行微测试。
⑷ 基于慕课的线上线下教学方式,慕课可以针对传统教室中的学生,也要考虑在线学习者,在慕课资源线上学习的基础上,课堂中可以有针对性地及时解决存在的问题。
2 后续应用存在的问题
常用的C语言程序设计教学方法注重C语言编程知识点的学习和应用,与未来就业或深造仍然存在着脱节现象[5]。根据多年的C語言程序设计教学工作、计算机应用相关的科研工作、就业或深造的毕业生反馈等,学完C语言程序设计课程后,学生在C编程应用能力方面仍存在着诸多问题。
⑴ 在硕士研究生入学面试的编程能力测试中,部分学生可以理解测试题目的题意,也掌握了C语言的许多语法知识,但无法实现实际应用问题的编程。
⑵ 在指导硕士研究生进行科研工作的过程中,部分学生难以将所学的数学知识或专业课知识编程实现来解决实际的科研问题。
⑶ 本科毕业刚刚参加工作的学生反馈,在参与软件开发的过程中,程序的书写规范不能满足公司要求、变量或函数命名不能见名知意、编码没有良好的注释习惯等是其最为困扰的问题。
⑷ 参加多年工作的毕业生反馈,在软件开发团队工作中,除了分析问题的能力、代码化的编程能力、书写规范习惯等,程序调试能力和团队协作能力也是非常重要的。
3 提升应用能力的方法
为了培养学生具备良好的编程思维、扎实的编程功底,并且与未来的工作岗位或科研工作接轨,无论采用哪种教学方法开展教学工作,我们认为都应该从以下几方面提升学生C语言程序设计的应用能力。
3.1 遵守编程规范
《高质量编程指南C++/C语言》、《Clean Code》等皆指出编程规范的重要性[4],包括文件结构、程序板式、命名规则、表达式、基本语句、程序注释等规范。在实际软件开发工作中,程序员编写的程序不止是限于让自己能看懂,还要让团队中其他成员或新进成员能看懂,而编程规范将直接关系到代码的可读性。学习完C语言程序设计课程的学生,仍然对于编程规范不太了解的学生不在少数,这些学生一旦步入工作岗位,会有很长一段时间无法适应软件编程工作。因此,在C语言程序设计课程教学过程中,始终贯穿编程规范,将有助于学生快速融入到未来编程工作中。
3.2 把握代码框架
大多数编程语言在实现具体编程应用时,都会建立一个代码工程,C语言也不例外。然而,我们在教学工作和科研工作中发现,大量学习过C语言程序设计课程的学生只会在开发环境打开的情况下,编写其中几行代码或一个函数,难以把握代码工程的整体框架。当遇到多个文件组成的工程时,就可能无法理清各个文件之间的组织关系。因此,在C语言程序设计课程教学过程中,介绍常用的开发环境(Visual Studio、Visual C++、CodeBlocks等)、代码工程目录树结构、文件夹目录结构及其各种文件扩展名等,将有助于学生把握代码工程的整理框架。
3.3 调试程序的能力
在实验教学过程中,学生编译程序无法通过或程序运行出错时,学生第一反应是:“老师,请帮我看下程序哪里出错了。”大量学生不会主动去调试程序。程序无法编译通过,对于学生实验题目而言多数是语法问题;程序运行出错,对应学生实验题目而言多数是逻辑出了问题。因此,在C语言程序设计课程教学过程中,当程序编译或运行出错的情况下,可以培养学生主动排查问题的意识和能力。当一眼无法识别并修改错误时,调试程序的能力尤为重要,包括锁定可能出现问题的代码范围、设置断点、启动调试、单步跟踪、查看变量或内存等。
3.4 代码转化的能力
对于C语言的语法知识点,学生可以准确把握;对于应用问题,学生也可以到位理解。然而,针對实际应用问题,学生无法将应用问题的解决思路以代码的形式快速呈现,也就是说,学生难以将问题解决思路和C语言代码之间产生映射。对于每一个特定的应用问题,其解决思路也是千差万别的,涉及到的横向或纵向的专业知识也是不同的。因此,在C语言程序设计课程教学过程中,可以借助各种具体应用问题,采用分析问题——形成解决思路——转化为C语言代码的过程,不断培养学生将各种具体问题解决思路转化为C语言代码的能力。
3.5 团队协作能力
在实际软件编程工作中,大多数的工作都是多人合作完成,因此,学生的团队协作能力将直接影响到软件项目的执行效率。项目/问题驱动式教学方法一般会涉及多个学生协作编程,这在一定程度上培养了学生的团队协作能力。采用微课、慕课或知识点罗列式教学时,可以采用分组完成任务等方式培养学生团队协作的意识。
4 结束语
本文在阐述现有C语言程序设计课程教学方法的基础上,结合多年教学、科研工作及毕业生反馈等经验,分析了学生在C语言程序设计的应用能力方面出现的各种问题。在实际课程教学过程中,通过强化或补充遵守编程规范、把握代码框架、调试程序、代码转化和团队协作等多方面能力的培养,可以使得学生快速适应实际应用对C编程的需求,进而提升学生对C语言程序设计的应用能力。这些能力的培养还可以促进C语言程序设计课堂教学与未来就业或深造需求的有机接轨。在未来的教学研究中,可以将已学课程知识引入到C语言程序设计课程教学的应用实例中,也可以引导学生将C语言程序设计方法拓展到多个相关课程的深入学习中,以进一步提高学生的编程应用能力。
参考文献(References):
[1] 裘宗燕.从问题到程序:程序设计与C语言引论(第2版)[M].机械工业出版社,2011.
[2] 郭银章,王丽芳.基于项目任务驱动的C语言程序设计课程教学改革与实践[J].计算机教育,2017.2:41-44
[3] 陈娟,张长海,邓春燕,李河.高级语言程序设计课程的慕课建设与思考[J].计算机教育,2017.1:9-13
[4] 冯潇.基于多课程交叉的程序设计教学改革[J].计算机教育,2017.2:18-21
[5] 苏莉蔚.“计算机程序设计”课程中科学思维能力的培养[J].计算机时代,2017.1:55-56,59