基于技能和思维强化训练的程序设计课程在线实践教学探讨

2021-02-16 19:20张翠莲
广西广播电视大学学报 2021年5期
关键词:在线教育程序设计实践教学

[摘 要]程序设计是一门实践性很强的课程,其强调技能和思维的训练。文章从程序设计课程在线实践教学的问题出发,针对如何训练编程技能、提升计算思维能力和做好在线实践教学进行了实例研讨,列举了五种引导方法,旨在使学生能按教学要求进行程序设计实践。

[关键词]实践教学;程序设计;在线教育

[中图分类号]G642;TP311 [文献标识码]A [文章编号]1008-7656(2021)05-0034-06

引言

程序设计是计算机类专业的一门核心基础课程,也是一门实践性很强的课程。学习这门课程需要掌握复杂的语法规则,还需要能动手编写程序解决问题。对于初学程序设计课程的学生,刚开始能读懂例题程序,但动手写程序却感觉较难,需要课程教师手把手指导编写程序。通过在线教育学习的学生,程序设计课程的整个教学环节全部在网络上完成。怎样有效引导在线教育的学生学习该课程,强化他们的动手编程技能,做好这门课程的实践环节,需要进一步探讨。

一、程序设计课程的在线教学现状

程序设计课程是一门比较难学的课程,因此,很多高校对这门课程的教学模式、方法等方面作了很多研究,提出各種教学改革措施。

(一)程序设计课程的在线实践教学现状

大部分开设有程序设计课程的普通高校,都使用了在线评测系统作为学生实训编程作业与考试提交的平台。在线作业与考试评测系统,即在线评测(online judge,OJ)系统,该系统最早是应用于ACM国际大学生程序设计竞赛,随着多年的发展和应用,很多高校也搭建起自己的OJ系统,用于开展程序设计类课程实践教学,例如浙江大学的ZOJ、北京大学的POJ、杭州电子科技大学的HDUOJ等,这些高校的评测系统很好地应用在程序设计课程的教学中[1]。其中,使用率较高的是北京大学的在线评测系统,实训编程练习的题库也较多。由此可见,程序设计课程使用在线评测系统作为实践教学辅助系统,有利于训练学生的编程技能,也为教师省去了许多批改程序作业的工作,提高了教学效率,也便于教师开展实践教学。

在成人高等院校中,对于程序设计课程,由于成人学生是利用业余时间学习,存在学习时间相对较短、督促不足等情况[2],很多成人学校对该课程的考核侧重于理论方面,采用传统的选择、填空、阅读程序问答题等考核方式,实践编程方面的训练不足。

(二)程序设计课程的在线实践教学指导主要采用的方式

随着在线教育的发展,程序设计课程也在线上开展实践教学,主要的教学指导方式有使用远程视频课堂介绍课程中的具体实践、实践辅助教学平台、用互动交流平台指导、实训过程自动提示与评判等。实践辅助教学平台主要是提供给学生编程实训作业提交与编程实践操作考试的平台,目前大多还是使用在线评测系统(OJ)。实践互动交流平台主要是使用QQ群、QQ远程协助、远程操控、TeamViewer、向日葵等远程工具,以及钉钉、微信群等各种社会性交互工具作为在线互动交流平台[3]。而使用专门在线教学平台的院校,一般相应的平台提供有交流互动的论坛,教师与学生可以在论坛交流,例如,MOOCs教学交互主要发生在MOOC论坛中[4]。实训过程自动提示与评判,是程序设计过程中使用单元测试模块测试学生的程序,给予错误信息和启示性提示,从而让学生获得即时反馈和成绩[5]。

二、在线程序设计课程实践教学存在的问题

(一)在线教育学生的知识水平各异

参加在线教育学习的学生,知识水平各异,他们的自学能力相差也较大,而且成人教育学生存在工学矛盾的缘故,可以用于自主学习的时间较少,因此,完全参照普通高校的教学方法不太适用。

(二)部分在线程序设计课程的实践训练效果需要提升

对于初学程序设计的学生,面对各种复杂的语法,如何独立编程解决问题,是一件较困难的事,需要教师在旁边引导,手把手教学生操作,提示学生如何入手写程序,并及时纠正学生写程序出现的各种错误操作。而对于没有教师在旁边指导的在线教育学生,很难把程序设计课程学好,这也是很多在线教育开展实践性较强的课程效果不理想的主要原因之一。

使用OJ系统作为程序设计实践教学平台,对于实施面授课程开展程序设计教学的学生,提供了较好的编程训练平台。而对于通过远程在线教育授课的学生,这种仅仅在在线评测系统上提供实训题目、提交程序、反馈程序结果对错,而没有教师在旁边实时指导的学习模式,学生在做编程实训时,会出现写程序作业题无从下手的情况,或是没有严格遵循在线课堂教师讲的编程思路和操作方法设计、编写与调试程序。动手编写程序的技能原本就不容易掌握,导致在线教育学生学习程序设计课程的效果不太理想,实际动手设计、调试程序的能力需要加强。

(三)有效在线辅导的人力和时间成本偏高

前文提到的使用单元测试实现自动提示和自动评判的方法应用于程序设计过程中[5],提示指导侧重于检测、判定学生设计程序作业的结果,给予学生程序作业打分以及错误提示信息,对学生的编程过程提供了有效的帮助。但教师需要花费较多的时间在编程的准备工作中,实现方法不够便捷;另一方面,出现学生看到编程实训作业无从下手或者未按照编写规则书写程序的情况。

在线互动答疑,是为在线教育学生提供辅导的平台,学生遇到问题可以通过答疑平台提问。而作为初学者,当不知道如何入手时,提出的问题大多是“这题怎么做?”“我不会做,怎么办?”等,表现出没有思路。这时在答疑平台的指导教师,需要大量时间对学生一对一回复,引导学生一步一步地做实践题目。如果简单地发给学生正确的实践程序题答案,就达不到训练学生编程技能的效果。这样的在线答疑、辅导方式需要耗费大量的人力和时间,但实际较难真正指导到位。如何弥补在线教育缺少指导教师做实践提示和引导的不足,让自学程序设计的初学者更容易掌握用程序解决问题的技能,找到一种便捷、有效的引导方法,是一个值得探讨的问题。

三、基于技能和思维训练的实践教学方法探讨

(一)编程技能和思维训练的重要性与方法

周以真教授认为,计算思维是运用计算机科学的基础概念进行问题求解、系统设计、以及人类行为理解等涵盖计算机科学之广度的一系列思维活动[6]。程序设计课程是计算思维教学的重点,尤其程序设计算法是解决问题的方法,是计算思维的内容[7]。而这解决问题的方法需要通过一系列的强化训练才可以培养出来。计算思维的核心是抽象,而程序设计是从总体设计到细化实现的过程,是从抽象描述到具体实现的过程。程序设计方法中强调的逐步求精技术,更是设计过程的抽象表现。程序设计实践教学的目标就是要学生学会抽象的设计方法,并用抽象思想指导实践操作过程的每一步。抽象教育的另一个内容是要强化学生的归纳、抽象能力。

在线教育课程通常是一位教师面对众多学生的教学模式,实践教学过程,教师较难通过网络长时间远程实时指导多个学生,很多时候就是学生自己独立思考及动手实践。为了让学生在做程序实训习题时,可以像面授课堂的实训操作一样,在有引导的状态下做编程实训,需要在设计实训题目时,在题目中给学生一些提示的信息,引导和启发学生分析问题、设计程序的框架,让学生遵循在线课堂教师讲的编程思路,强化训练学生的编程技能,训练他们自觉地用计算思维指导程序设计实践。

学生的技能学习是一个循序渐进的过程,在设计实践编程题目时,要根据课程针对不同的知识点,从入门到提升阶段分别设计不同层次的实践编程題目,让学生从入门开始,循序渐进地做题训练、提升编程技能。

(二)实践编程题目设计案例

设计编写程序是一个逐步扩展程序、逐步填空的过程[8]。在设计实践编程题目时,要按照这个思路设计提示,引导学生遵循计算思维,用逐步求精的程序设计方法解答题目。

1. 强化训练用计算思维解决问题

“a+b问题”是入门级的实训编程题目,对初学程序设计的学生,关键要让他们遵循“自顶向下、逐步求精”的设计方法,图1所示的提示在于引导学生写程序时,采用逐步扩展的方式设计程序。引导学生编写程序遵循“保证书写程序的每一步编译是正确的”[8]的操作方法。

2. 训练程序语句的编写规则

在程序设计课程中,让学生养成良好的编写程序习惯尤其重要,在程序扩展过程中间的每一步,保证程序都能正确通过编译,而且可测试运行,那样可以避免少出错。下页图2通过引导方式强化if条件复合语句框架的编写规则、操作过程,让学生在实践训练中用这样逐步填空的方式设计程序,减少编译错误。引导学生在长期的实践训练中掌握逐步求精的程序设计方法和操作方法。

3. 引导学生使用通用框架解决新问题

程序设计课程的语法规则繁多,课堂讲授的某些新知识时会出现一次呈现太多程序语法规则的情况,学生难以全部记住,以致于在听课时似乎明白了,但由于语法规则多,到实践编写程序时,却不知从何入手编写程序,未能做到灵活应用课程学习的新知识,没有真正掌握相应新知识的使用。为了让学生更容易掌握新知识,图3是在设计实践编程题目时,给予的提示让学生回想起课堂讲授的顺序扫描字符串的方法,引导学生学会写程序读取字符串的单个字符。通过解决图3“单词变换”题目的问题,让学生用已学知识的通用框架解决新问题,从而强化学生设计循环控制语句的能力,引导学生学会用循环编写程序读取字符串中各个字符的方法。

4. 从解决具体问题中训练归纳、抽象的能力

程序设计除了有正确的思想方法,要实现设计,还需要学习了解编程语言知识细节[8]。在用程序解决问题时,经历从具体问题中归纳、再抽象的过程。图4的“计算存款收益”题目引导学生从解决本金为1000元计算一年、二年、三年后的本息总额的具体问题入手,再归纳、抽象化到计算本金为M元n年的通用问题,让学生遵循、体会这样的认知过程,更好地培养学生计算思维的能力。

5. 引导学生学习设计函数,训练分解问题的能力

学好程序设计,就需要学习解决问题的方法。解决问题是一个逐步细化的过程。在设计程序时,采用的自顶向下逐步求精的方法,就是把复杂的问题分成多个独立的小问题, 逐步细化,直到小的问题可以较好地解决为止。在这样设计过程中,把复杂问题分解,在程序实现中,就是分解成独立的模块,进行模块化设计。用函数式编程可以较好地实现模块化设计程序。因此,学会用函数设计与编写程序,是学习程序设计课程的重要功课。而对于初学者,不习惯运用函数设计方法,如下页图5中的习题,目的就是引导学生正确设计函数,习惯于用函数实现逐步求精设计过程。

四、结语

经过近几年的实践教学,使用文中的这种方法设计在线评测系统的编程实践题目,比单纯提供问题描述的题目,学生更容易独立动手编程,同时也能让学生养成用正确的思维和操作方法指导编程实践的良好习惯,较好地训练及提高学生的程序设计实践技能。对于在线程序设计课程的教育,可节省在线答疑、指导的成本,对培养学生程序设计技能也是一种有效的方法。

[参考文献]

[1]苗桂君,刘勇,许南山,等.在线评测系统在程序设计类教学中的应用研究[J].计算机教育,2016(9):157-162.

[2]张伟龙,孟玉琴.ACM在线评测系统在成人高等教育程序设计类课程中的应用初探[J].中国新技术新产品,2010(6):45.

[3]孟凡楼,高永存.计算机工程类课程在线教学研究与实践[J].教育教学论坛,2020(44):243-244.

[4]孙洪涛,郑勤华,陈丽.中国MOOCs教学交互状况调查研究[J].开放教育研究,2016(1):72-79.

[5]张治国.在程序设计学习过程中使用单元测试实现自动提示和自动评判[A]. Science and Engineering Research Center.Proceedings of 2021 International Conference on Modern Education and Humanities Science (ICMEHS2021)[C].Science and Engineering Research Center:Science and Engineering Research Center,2021:4.

[6]Jeannette M. Wing. Computational thinking[J]. Communications of the ACM, 2006, 49(3) : 33-35.

[7]龚沛曾,杨志强.大学计算机基础教学中的计算思维培养[J].中国大学教学,2012(5):51-54.

[8]赵冯平,张翠莲,黄镭.基于知识与能力导引的程序设计课程作业在线评测系统[J].广西广播电视大学学报,2020(2):19-23.

[作者简介]张翠莲,广西开放大学工程师,硕士,研究方向:计算机课程教学。

[责任编辑 韦书令]

猜你喜欢
在线教育程序设计实践教学
基于OBE的Java程序设计个性化教学研究
项目化教学在Python程序设计课程中的应用
C++程序设计课程教学改革研究
医学专业“Python程序设计”课程教学改革总结与思考
提高机械原理教学质量的几点思考
慕课中美应用差异的四大原因分析
混合学习模式及其实施要点 
基于在线教育的大数据研究
茶学专业校企合作实践教学探索
《电气工程毕业设计》 课程的教学设计