当前位置:首页 > 学术论文 > 教育论文

以程序设计能力培养为核心的C语言教学改革

  • 教育论文
  • 2021-06-05

赵娜 覃科 何金花

[摘 要]C语言是计算机专业的程序设计入门课,也是大多数理工类非计算机专业的必修课。作为重要的专业课和基础工具,学好C语言对计算机专业的后续课程有重要意义。但目前的C语言教学中存在知识导向及重点不明确的问题,学生在学习了众多晦涩的语法之后无法灵活运用,解决问题能力不足。针对以上问题,对现有的教学弊端进行分析,提出面向程序设计能力培养的C语言的教学改革,从知识点梳理、能力微模块化、习惯培养等方面采取系统性改进措施,以期培养出善于用程序设计思维解决问题的学习者,达到符合用人单位需求的C语言教学结果。

[关键词]C语言教学;程序设计能力;教学改革;能力培养;习惯培养

[基金项目]2018年桂林航天工业学院教改项目“基于SPOC+翻转课堂的软件工程专业基础课教学改革研究与实验—以C语言程序设计课程为例”(2018JB18)

[作者简介]赵 娜(1986—),女,湖南绍东人,硕士,桂林航天工业学院计算机科学与工程学院助教,主要从事机器学习与自然语言处理研究;覃 科(1979—),女,湖北松滋人,硕士,桂林航天工业学院计算机科学与工程学院高级工程师,主要从事智能计算与图像处理研究;何金花(1979—),女,湖南浏阳人,硕士,桂林航天工业学院计算机科学与工程学院讲师,主要从事软件工程研究。

[中图分类号] TP312[文献标识码] A[文章编号] 1674-9324(2020)46-0-03[收稿日期] 2020-09-28

一、引言

随着第四次工业革命的到来,信息化在国民经济中扮演着越来重要的角色。C语言一般被列为程序设计的入门课程,是大多数理工类专业的必修课,特别是对于非计算机专业而言,这可能是整个大学阶段唯一的程序设计课程,但学校的C语言课堂教学往往并不令人满意。

首先,C语言作为一门高级语言,既可以直接操纵硬件,也有足够的封装性,这使其语法当中保留了相当多的时代特点。如今硬件性能取得巨大进展,人工成本远高于机器成本,C语言中的一些语法已经不再适用,一些大型企业已经明确限制一些语法的使用,而很多高校还在把这些晦涩的语法作为教学重难点,让学生花费大量学习时间。

其次,对学生运用程序设计思想解決问题的能力培养不足。课堂教学中相当数量的案例取材于数十年前的经典教材,并未根据学生的具体情况进行设计,往往过于关注语法的使用而忽略问题解决。案例过于复杂,相对于知识点本身不够直观,重点不突出,追求大而全,缺乏实用性。在教学中如何回归C语言的工具属性,让学生乐于用程序设计的方式解决实际问题,是教学中需要探讨的普遍问题。

目前,一些高校已经开始尝试C语言教学的改进方案,如有文章[1]提出应当加大案例教学法的比重,用学生易于理解的案例启发学生;也有文章[2]指出,对于非计算机专业学生,应当重新制定教学大纲,针对专业需求制定教学重点;还有文章[3]引入对分课堂,将授课后的学生讨论作为重要且必要的教学手段,提高学生的参与度,激发学习兴趣。这些改革方案都有一定的针对性,但总体上系统性不足。而C语言教学作为一个整体过程,需要一套以终为始的系统化方案进行改革。

本文从知识点梳理、能力微模块化、习惯培养等三个方面提出C语言教学改革方案。该方案作为一种通用准则,可作为不同侧重的专业教学改革的参考。

二、知识点梳理

C语言是一门编译型语言,对语法有着严格要求,必要的语法规则是必须介绍的,但从应用角度出发,并不是所有语法都需要掌握,特别是那些经过实践验证,无助于程序可读性、扩展性的语法可以不讲解,留给感兴趣的学生自行学习。

比如C语言的自加自减运算符,在有严格编码规范的企业,通常只允许作为单独的语句使用;又如goto语句,完全可以不做介绍,用其他语法替代。教师需要根据专业需求,分专业整理出适合专业特点的C语言知识点,而不是照搬经典教材。对于课时不足,不能涉及所有语法的专业教学,更应当注重培养学生基本语法的使用,提高学生的基本能力,避免贪多嚼不烂。

三、能力微模块化

教学中应当明确C语言的工具性定位,以培养学生使用程序设计思想解决问题的能力为目标。将知识点简单罗列不利于能力的培养,有必要将程序设计能力划分成若干个微模块,将教学内容按微模块组织和安排教学,明确学生在各个模块内需要掌握的C语言程序设计能力。

(一)单一数值的表达运算能力

单一数值的表达运算能力包括数值的计算、字符串的存储、输入和输出等。掌握该层次的能力,可以进行简单的计算和表达,具备该能力的学生可以用C语言解决一些日常简单问题。

单一数值的表达运算能力是学习C语言的基本要求。要求学生理解编译型语言的编译、链接、运行过程,掌握编译工具的基本使用方法,大致了解一个完整的程序包含哪些部分,在此基础上,熟练掌握整型、浮点型、字符和字符串的初始化、赋值、输入输出,掌握与之相关的常用运算符。

(二)复杂数据的抽象和表达能力

要求能使用结构体、数组对同一对象不同性质的属性或某一类同质对象的批量数据进行存储、计算和输入输出。该层次的能力注重信息的转化抽象,比如如何设计一只猫的数据结构。掌握该层次的能力可对稍微复杂的问题进行处理。

该能力要求学生具备初级的抽象能力。如何将现实中存在的多属性实体用C语言描述出来,学生在该阶段首次尝试从自然语言到程序设计语言的转换。在该层级学生要掌握数组、结构体的定义和使用方法,循环只作为数组遍历工具使用。

(三)推理计算能力

要求能运用C语言对批量数据进行基本的统计运算,如求最大、最小值,统计符合某些条件的数值个数,以及进行简单的数列计算等。

该能力要求学生具备良好的推理思维。学生将在此阶段进一步体会程序的计算方法与数学中手工运算方法的不同,并深入理解和掌握循环结构,掌握一些基本算法。在本阶段,学生应养成将问题分析清楚再进行程序语言描述的习惯。

(四)问题分解能力

这是面对一个较为复杂的问题,能够将其进行分解和抽象,转化为通过程序设计能解决的问题的能力。可以适当引入部分面向对象的思想,教授学生如何去分解和抽象实际问题。

该能力对应C语言的多文件、函数等知识点,但知识在其中起到的主要是工具的作用,更多的是要通过案例传授问题分解的思想。可以将问题分析过程分成三步(问题分解三步骤):①用语言将问题记录下来,尽可能包含足够多的细节,这是进一步分析的基础;②进行功能划分,可借助思维导图等工具,将问题分解成多个子问题,如有必要可继续划分;③将每个子问题的实现过程用伪代码、流程图描述出来。有了以上步骤,再进行编码。

(五)封装和协作能力

此时,学生考虑的不再是如何解决某个特定问题,而是要解决一类问题,要考虑到代码的复用性、可读性等。可以适当引入一些设计模式[4]相关的知识,使代码具有更好的扩展性。该阶段是寻求代码的精简,是从多到少的过程。

在企业中,程序设计通常由多人团队来完成,因此,接口的协商、完整的测试发布流程等知识点可适当涉及,敏捷开发、单元测试等知识点可有选择的适当讲解,作为大作业或者课程设计中的一环,开阔学生的眼界。

在確定能力层级培养目标之后,现有的教学手段也要加以调整,以适应从面向应试到面向能力培养的教学目标的转变。总体上,要做出三方面调整。

1.增加动手环节的教学比重。与数学等纯理科课程相比,程序设计属于典型的工科课程,没有足够时长的训练很难保证效果。为使教学内容及时转化为动手能力,可以在课堂讲授中穿叉代码的编写练习,让学生即学即练。更要加大应用题在课后练习中的比重,语法错误可以交给现代编译器去查找,宝贵的练习时间应当用于应用能力的培养。

2.专业实例融入教学案例。即便是最近新编写的教材,仍然可见大量二十年前的经典示例,这些示例是否都适合于当前的教学需求有待商榷。比如过去,计算机硬件资源非常有限,程序设计时需要非常注意每个变量的定义和使用,而常用算法的函数库也远不如今天这样丰富。教学案例也应当迎合时代的变革,更多地从实践中选取,将专业领域内有影响力的开源代码作为示例进行教学,可以更加贴近专业的需要。

3.教学手段根据能力培养目标有所侧重。不同专业对程序设计的要求是不同的,并非所有的专业都需要追求与计算机专业完全一致的能力培养目标。要明确学生在专业上需要掌握何种能力,在课堂教学的内容和方法上,进行适当调整。比如通信工程专业以解决具体业务问题为主,需要加强问题分析和分解能力,增加这部分的课时,进行更加细致的讲解和练习,但可以一定程度上弱化封装和协作能力的培养,而数学专业的算法,往往作为基础库被上层应用调用,则不能忽略这项能力。因此,各类专业在程序设计能力培养上,应当有所区分,在教学时长中有所偏重,重点内容应多分析案例,增加训练强度。

四、习惯培养

拥有知识和技能可以编写出“能用”的程序,但良好的习惯可以让学生编写出“好用”的代码,一份能用的程序只是一切的开始,是最基本的要求[5]。企业的核心模块的代码生存期长达十年之久,一份可读性差、难以修改的源程序往往维护代价高昂,而一份优秀的程序则令开发工作事半功倍。下面是初学者应重点培养的习惯。

(一)良好的编码风格

良好的编码风格应当从学生第一次动手编程开始强调。各大企业往往都有自己的编码风格要求,新进企业的应届生对此往往感到痛苦,因为在学校学习时,要求代码功能正确即可。如果在学习之初就加以引导,让学生了解到编码风格之于程序犹如笔迹风格之于考试作文的重要性,则可避免此类问题。

(二)勤于添加注释

如果按照上文的“问题分解三步骤”进行问题分析,最终能得到一份伪代码,它既是设计文档,也是最初的注释,让学生从思想到程序平滑过渡。不但如此,阅读一份陌生代码的过程中将笔记用注释的方式写出来,对于学生内化新知识、复习老知识有帮助。对教学来说,程序本身很难避免千篇一律,但学生在注释中写下自己的程序设计过程、对代码的理解,教师能通过注释第一时间了解学生的学习情况,及时了解教学效果,改进教学方式。

(三)优先选用开源工具

一套良好的开发环境至少应当包括代码高亮,语法检查,代码缩进,注释/反注释,变量/函数追踪,查找,编译运行,调试等,包括自动生成注释,代码折叠,自动补全功能更佳。

具备这些功能的软件众多,但学校教学往往以商业软件为主。事实上,主流企业的开发者,多以开源软件为主,且不谈Vim/Emacs等功能强大的编辑器,像Notepad++这样的软件对初学者非常友好,容易学习。如果学生希望在课后自主学习,由学校采用的商业软件对培养学生的版权思维并无益处。相反,如果能及早接触开源软件,有助于学生开阔思路,有机会了解现实世界中的软件、程序内部结构是怎样的。

五、总结

提出了面向程序设计能力的C语言改革方案,整体分为三点:教学知识点根据专业需要剪裁;将程序设计能力划分为单一数值表达运算、复杂数据的抽象和表达、推理计算、分解问题、封装和协作等五个能力微模块;在实践环节中注重培养良好的程序设计习惯。整个方案以程序设计能力的培养为核心,以学生能够通过程序设计的思想解决问题为目标,这是笔者在工业界帮助应届生适应企业工作的经验与在高校进行教学的经验相结合的产物,具体效果还需要充分的实践验证。

参考文献

[1]杨银花.浅谈案例教学在C语言教学改革中的探索[J].中外企业家,2019(36):177.

[2]曹凤雪,陈艳萍,黄成.非计算机专业C语言课程的教学方法[J].福建电脑,2020,36(1):104-105.

[3]贾晓琪.基于对分课堂的C语言程序设计课程实践教学改革研究[J].办公自动化,2019,24(27):30-31.

[4]埃里克·伽瑪,理查德·赫尔姆,拉尔夫·约翰逊,等.设计模式:可复用面向对象软件的基础[M].李英军,马晓星,蔡敏,等译.北京:机械工业出版社,2019:3.

[5]史蒂夫·迈克康奈尔.代码大全[M].金戈,汤凌,陈硕,等译. 北京:电子工业出版社,2006:161-163.

Abstract: C language is an introductory course of programming for computer majors, and also a required course for most non-computer majors of science and engineering. As an important professional course and a basic tool, learning C language well is of great significance to the follow-up courses of computer major. However, there are too many problems in C language teaching nowadays, such as too much knowledge orientation and unclear key points. After learning many obscure grammar, students cannot use it flexibly, and their ability to solve problems is insufficient. In view of the above problems, this paper analyzes the existing teaching defects, and puts forward the teaching reform of C language for the training of programming ability. Systematic improvement measures are taken from the aspects of knowledge carding, ability micro modularization and habit cultivation, so as to cultivate learners who are good at solving problems with programming thinking, and achieve the C language teaching results that meet the needs of employers.

Key words: C language teaching; programming ability; teaching reform; ability training; habit cultivation

    猜你喜欢

    评论列表(0 条评论)

    扫一扫,加好友咨询