程序设计课程实验教学的改革与实践

2021-04-13 20:07徐伟吴超陈凯明
电脑知识与技术 2021年5期
关键词:程序设计实验教学

徐伟 吴超 陈凯明

摘要:针对以往程序设计课程实验中存在的代码规范混乱、学生调试代码困难等问题,提出了一种强化代码规范要求和加强程序调试教学的实验教学方法,并从代码规范的具体要求和评分细则方面、程序调试的要求和步骤方面分别阐述了实施方法。实际的数据说明教学情况良好,76.12%的学生的上机实验分数在90分以上,学生的实验完成度较高、对上机实验掌握情况良好;此外学生的代码规范有了明显提升,85.81%的学生的代码规范达到良好水平。这些教学改革应用于今年疫情期间的在线教学中,通过这些举措的实施,克服了在线教育的不利之处,学生的整体学习水平基本保持了稳定。

关键词:程序设计;代码规范;程序调试;实验教学

程序设计课程是计算机学科教育的基础,是计算机学科的入门课程[1-3]。该课程是一门介绍计算机程序设計基本思想和程序设计语言的课程,也是一门关于利用程序设计方法求解应用问题的实践性课程[4]。中国科学技术大学程序设计课程以C语言为主进行讲授,为了让学生能够较好地掌握C程序设计语言,通过语言规则的教学和的几个有针对性专题的实践训练,加深学生对C程序设计语言的理解,使学生具有编写一定规模的程序来求解应用问题的能力。由于程序设计课程是一门理论性、实践性很强的课程,学生要想学好此类课程,一方面要高质量地完成课堂知识点的教授与学习,另一方面也要多进行上机练习,通过加强课程实验部分的管理和指导,提高学生的实践能力[5-7]。理论知识的学习与上机实践练习,具有互相指导、互相促进的作用。加强实践能力的教学,也将促进学生对理论知识的掌握更加牢固。为了提高程序设计实验检查的效率,很多学校引入在线评测平台(Online Judge,OJ)来对程序设计课程实验进行自动的正确性检查[8]。OJ系统的引入,大大减轻了教师对学生实验检查的工作量,具有进一步推广的意义[9-10]。同时为了适应在线教育的浪潮,很多教师也将程序设计课程搬到了网络上,采用慕课等翻转课堂的教学方法。这些教学举措提高学生的学习效率,也更有效地培养学生的创新能力[11-13]。课题组通过数年程序设计课程的实验教学与调研,发现当下还存在以下比较突出、亟待解决的问题:

(1)学生在实验过程中多重视功能性的实现,而忽视代码编程规范。具体表现包括随意命名变量名、代码排版不清晰,程序可读性差等问题。

(2)学生程序调试效率低下,对于IDE调试工具掌握不熟练。调研中发现学生更愿意使用printf等打印命令将需要调试的信息打印出来进行查看。

加强学生的代码编程规范、让学生从一开始就写出可读性高、逻辑清晰的代码,具有重要的意义。而在调试过程,必须教会学生使用调试工具。正确有效的程序调试方法,将是培养合格的计算机人才必须掌握的能力。为了全面提高学生的编程能力,课题组经过研讨对于实验教学环节进行以下的教学改革:

(1)课题组专门编写了程序设计代码规范,详述了代码规范具体要求,同时编写了代码规范的评分细则,做到“有法可依”。对于实验中代码规范扣分情况,会在实验后专门反馈给学生,供学生认识和改正错误,从而提高代码规范水平。

(2)将程序调试方法作为专题,进行了培训。并以vs2017为例,着重介绍IDE等开发工具的调试办法。通过相关工具的介绍,让学生熟悉工具的变量查看、内存查看等方面的使用,引导学生采用正确的调试方法,提高编码调试效率。

今年上半年因为新冠疫情的影响,春季学期的程序设计课程的教学在线开展,课程实验也同步在线进行。相比线下教学,线上教学存在着师生交流不便、学情反馈不及时等缺点[14-15],得益于本次教学改革的实施,学生的代码规范有了较大幅度的提升,同时学生对程序设计课程的整体掌握程度基本保持了稳定。

1 加强代码规范要求

为了提高学生编程的规范程度,提高代码的可读性与可维护性,在课程教学中采用专题讲座的形式,对于代码规范进行了介绍,形成了专门的《代码规范评分细则》文档,存放在课程QQ群的共享空间上,供学生随时查看。代码规范以C语言为例进行了说明,分为以下五个大项进行要求:

1)缩进、括号、分行与空格

该项以学生每部分、每条代码语句的美观性,代码结构的工整性,作为根本评价依据;在每个方面的整体上符合、关键原则上符合、细节上不完全符合,但代码美观性和工整得到保障的,可以得分。

具体要求包括缩进的规则(以4个空格或tab键进行缩进)、大括号的风格统一(大括号允许单独分行或紧跟代码之后,二者择一使用,不要混用)、分行(对于较长的行、表达式等,应以分行方式书写)、小括号(有括号标识运算顺序和逻辑组合要求的必须使用)、空格(在算符、逗号等,应使用一个空格分开,保证显示的工整与美观)。

2)函数头与结构体注释

该项以是否充分说明函数参数、返回值与结构体成员的意义,作为根本评判依据。意义和用途,基本可以理解的,可以得分。

具体要求包括函数头注释(针对函数的目的、描述函数的作用、效果)、结构体注释(注释结构体用途、成员的意义,必要时说明成员取值范围)。

3)函数、变量、常量与结构体及其成员的命名

该项以是否满足命名风格(格式)的要求,是否足够“望文生义”,作为根本评判依据。命名格式需按规定条目严格要求;意义是否清晰应当结合变量命名与相关注释,一并评价。

具体要求包括命名规则(例如进行大/小驼峰命名,匈牙利命名法等,任何变量、常量、函数、结构体的名称都应可以直接或比较明确地反映其用途、含义)、不允许的命名方式(例如拼音命名等,推荐使用英文短单词(单音节)的缩写而非全拼)。

4)代码模块化与逻辑注释

该项以是否清晰展现代码的内在逻辑、执行意义和过程,作为根本评判标准。对于较长的代码块,有注释注解代码流程,基本清楚的,可以得分。

具体要求包括代码块逻辑(例如对于较长的代码/函数块,应用多行注释描述过程)、循环(循环的进入、退出逻辑需要说明)、分支逻辑(例如对于进入和退出时变量的变换逻辑进行说明)、运算逻辑(冗长的表达式需要说明)、变量使用逻辑(例如对结构体成员、布尔标志变量说明以什么含义进行使用,何种情况值会变化)。

5)变量、常数与函数的使用

该项涉及变量、常数的使用中应当避免的做法,以及函数编写时应当避免的写法。这些写法或者使得程序出现未定义的危险行为,或者使得程序易错。

具体要求包括不允许的写法(例如禁止使用未初始化的指针、类型不同的浮点数相等比较等)、需要限制的写法(例如同类型浮点数使用==,>=,<=等比较运算符、使用goto语句等)、需要注意的写法(例如有符号整数的负数与无符号整数之间的混合运算等)。

中国科学技术大学的近几年的程序设计课程实验,采用OJ系统进行实验的判误,得益于OJ系统的使得学生可以在离校在家的情况下,也能进行实验作业的提交。代码规范的评分细则中规定每个大项占一分,当学生完成实验作业的提交后,课程助教将学生代码从OJ后台取出,由助教进行规范审查决定代码规范的得分。若某次实验存在多项练习题,该次实验的代码规范分取这些练习题规范分的平均。最终的代码规范取所有实验代码规范的平均分。如图1所示,课程实验后,助教会在课程QQ群中公布出每个学生代码规范的违反情况,让学生了解为什么扣分,从而巩固和提高学生代码规范水平。

2 专题介绍程序调试方法

为了提高学生对程序调试的理解,课程专门安排了针对程序调试的专题学习。学习程序调试要求掌握以下几点。

(1)要求学习编译器提供的程序调试功能。

(2)熟练掌握设置断点,单步,逐个函数(过程),单条语句的调试方法。

(3)熟练掌握程序执行过程中的变量值的查询。

(4)由使用输出语句显示中间结果逐步改为通过调试器的变量查询功能查询。

程序调试是指对程序的查错和排错。教授学生对调试程序一般应经过以下两个步骤进行。

(1)先进行人工检查,即静态检查。

在写好一个程序以后,不要匆匆忙忙上机,而应对程序进行人工检查。这一步十分重要,它能发现程序设计人员由于疏忽而造成的多数错误。这一步往往容易被人忽视,总希望把一切都推给计算机去做,但这样会多占用机器时间,作为一个程序人员应当养成严谨的作风,每一步都要严格把关,不把问题留给后面的工序。为了更有效地进行人工检查,所编的程序应力求做到以下几点。

①应当采用结构化程序方法编程,以增加可读性。

②尽可能多加注释,以帮助理解每段程序的作用。

③在编写复杂的程序时不要将全部语句都写在main函数中,而要多利用函数,用一个函数来实现一个单独的功能。各函数之间除用参数传递数据外,尽量少出现耦合关系,这样便于分别检查和处理。

(2)在人工检查无误后,再上机调试。

通過上机发现错误称为动态检查。在编译时会给出语法错误的信息,调试时可以根据提示信息具体找出程序中出错之处并改正。应注意的是有时提示出错的地方并不是真正出错的位置,如果在提示出错的行找不到错误的话应当到上一行再找。有时提示出错的类型并非绝对准确,由于出错的情况繁多且各种错误互有关联,因此要善于分析,找出真正的错误,而不要只从字面意义上找出错信息,钻牛角尖。如果系统提示的出错信息很多,应当从上到下逐一改正。有时显示出一大片出错信息往往使人感到问题严重,无从下手。其实可能只有一两个错误。例如,对使用的变量未定义,编译时就会对所有含该变量的语句发出出错信息。这时只要加上一个变量定义,所有错误就都消除了。

对于具体的IDE工具,专题以vs2017为例进行了详细说明,具体涉及vs2017的启动调试、断点设置、逐过程调试、逐语句调试、调试跳出、自动运行到指定语句暂停、内存的查询方法、变量内存地址的查找、将变量地址输入到内存窗口中、设置内存存储的内容的显示方式。通过这些方面的介绍,覆盖了学生常用调试,并形成了专门的《程序调试基本方法》文档,存放在课程QQ群的共享空间,供学生随时查看。

3 教学改革效果评估

3.1 上机实验效果良好

图2为中国科学技术大学2020年春季学期程序设计某班的155名学生上机实验分数统计(满分100分)。从中可以发现76.12%的学生的实验分数在90分以上,85.81%的学生的实验分数在80分以上,通过强化程序调试方法的介绍,学生的实验完成度较高,学生对上机实验掌握情况良好。

3.2 代码规范进步明显

图3为中国科学技术大学2020年春季学期程序设计某班的155名学生上机实验代码规范分数统计(满分5分)。从中可以发现85.81%的学生的代码规范在4分以上,代码规范掌握情况良好。同时对该课程的八次实验,分别统计每次实验的代码规范分均值,如图4所示。从图4可以看出第一次~第三次实验存在明显的上升趋势,说明学生通过助教的反馈,快速提升代码规范水平,第三次试验后仍有缓慢上升的趋势,表明学生已基本掌握代码规范的要求。

3.3 疫情期间成绩保持稳定

如图5所示,分析了2018年、2019年、2020年的程序设计课程考试成绩,可以发现这三年的80分以上人员的比例分别为79.9%、76.1%、77.9%,说明虽然2020年的线上教育存在教师与学生互动较少、学生学情不便于及时获取等不利因素,但是通过教学改革的实施,学生的整体学习水平基本仍然保持了稳定。

4 总结

只有结合教学实际,找到教学中存在的问题,有针对性地提出教学方案,才能真正提高程序设计的教学质量。程序设计课程的教学改革实践表明,虽然2020年的教学由于疫情影响改为在线教学,但是通过相关教学改革方案的实施,程序设计课程的教学效果明显,特别是代码规范部分的进步尤其明显。接下来,课题组将验证和完善课程的教学改革方案,进一步巩固和提高程序设计课程的教学质量。

参考文献:

[1] 中国科学技术大学计算机科学与技术学院. 计算机科学与技术专业本科培养计划[EB/OL]. 合肥: 中国科学技术大学, 2013: 1-16. https://www.teach.ustc.edu.cn/education/241.html.

[2] 蒋社想,陈辉,梁兴柱.“双一流”背景下程序设计课程教学改革[J].软件导刊,2020,19(9):270-273.

[3] 罗迅,雷盟,郭晓艳,等.程序设计基础类课程教学改革的探索与实践[J].电脑与信息技术,2020,28(2):71-74.

[4] 原松梅.“双一流”背景下C++程序设计双语教学实践与探索[J].计算机教育,2018(10):110-112,117.

[5] 刘国梅,孙新德.C程序设计课程教学改革与实践[J].电脑知识与技術,2020,16(7):130-131,135.

[6] 王芳,张睿,司玉杰.以提升程序分析与设计能力为导向的C语言程序设计教学改革研究[J].计算机教育,2020(9):168-173.

[7] 潘飞,付景顺,李强,等.新工科背景下《C语言程序设计》课程教学体系改革探索[J].教育教学论坛,2020(14):163-164.

[8] 邹运兰,柴本成.互联网+教育背景下的C语言程序设计教学改革探究[J].计算机教育,2020(5):72-74.

[9] 丛丽晖,范纯龙,王丹,等.面向专业素质与能力培养的程序设计类课程改革与实践[J].沈阳航空航天大学学报,2017,34(S1):100-103.

[10] 王金鹏,曹旗磊,王涵.基于Online Judge的程序设计基础教学改革与实践[J].计算机教育,2020(2):101-104.

[11] 吴玫,王海晖,李伟波,等.面向混合学习的Java课程教学设计——以武汉工程大学为例[J].软件导刊,2018,17(4):220-221,226.

[12] 白鱼秀.“C语言程序设计”课程案例教学法研究[J].微型电脑应用,2018,34(3):55-57.

[13] 何迎生,王从银.基于慕课的C语言程序设计翻转课堂教学实践[J].计算机教育,2020(1):160-163.

[14] 杨惠荣,周珺.疫情期间面向对象程序设计课程线上教学实践[J].计算机教育,2020(8):1-5.

[15] 敬超.疫情下ACM程序设计实践课程线上教学探索[J].电脑知识与技术,2020,16(24):157-158.

【通联编辑:代影】

猜你喜欢
程序设计实验教学
关于基础教育阶段实验教学的几点看法
基于Visual Studio Code的C语言程序设计实践教学探索
电容器的实验教学
从细节入手,谈PLC程序设计技巧
几何体在高中数学实验教学中的应用
高职高专院校C语言程序设计教学改革探索
基于云计算的计算机实验教学探讨
OBE理念下基于Greenfoot的Java程序设计课程教学改革
PLC梯形图程序设计技巧及应用
三级甲等公立医院绩效考核程序设计