大作业在程序设计语言学习中的作用

摘 要:通过访谈北京地区17所高校的60名程序设计课程初学者,了解他们学习程序设计语言产生困难的原因以及他们的学习方式和看法.从学生的角度对大作业教学形式进行益处分析,并指出面临的挑战.

关 键 词:大作业;程序设计课程;语言学习;调研

1.初学者学习程序设计语言产生困难的原因

1.1单一化的课程设置

受到教学资源和教学能力的影响,目前国内大学的程序设计课程除了某些特殊专业的课程需要一些特殊语言(如浙江大学生物医学工程系要求采用Mcs51单片机汇编语言)之外,大多数采用C/C++、Ja、VB、C#等语言.对于初学者而言,较多院系选择让学生学习C/C++,但是学生常常会在后续其他课程的学习中发现所学语言并不是需要使用的语言.例如,学生在清华大学水利系课程的学习中,有时会使用到Matlab、VB、Fortran乃至Lisp等语言.

这就对学生如何理解编程思想和设计程序提出挑战,但现状往往是学生学完了C/C++语言课程,认为掌握得也不错,却对别的语言望而生畏.究其原因有以下几点:①学生只学过c语言,于是只会用C语言编程;②害怕学习其他语言会像C语言一样枯燥且花费时间;③尽量绕开需要使用语言的地方.最终的结果是学生越来越不敢应用自己曾经学习的编程技能,导致程序设计能力下降.

1.2众多基础技能和知识需要学习

对于初学者而言,程序设计这门课的学习任务往往比较重,有各种作业和实验课.但不可忽视的是,要想学好程序设计并能够自主编写程序,就必须具备一些其他学科的基础知识,如线性代数、离散数学、算法设计、数据结构等,而主要矛盾就在于上述课程或者没有开设,或者比较难.因此,这门本来就比较难学的课程容易给初学者造成一个暗示,即“应该先把上述课程学好再来学编程”,这种现象从信心上打击了初学者.

1.3紧凑的课程设计和短时间内转化思维

程序设计语言的内容相对较多,受学期学时的限制必然被安排得比较紧凑.对于初学者而言,比较难的正是前面几节课,因为就算是一个最简单的“HelloWorld!”程序,教师都需要对其中所包含的很多内容进行解释,有时还会涉及后面章节的内容(如#include指令和cout命令就涉及头文件、编译、运算符等内容).因此,学生在前面几节课中对于很多内容需要先记下来如何使用,然后在后续的课程学习中再掌握原理,而这会不停地增加初学者的疑惑,直至最终使初学者认为程序设计是一门不适合自己的课程.

编程重在思维的转化,而这对于初学者来说往往是最难的.无论是面向过程还是面向对象的程序设计语言,对初学者而言都是一种新鲜的思维方式,而不仅仅是一套知识体系.以前受固定思维模式影响比较严重的初学者往往难以在短时间内转换思维,跟上紧凑的课程设计,这导致的最终结果是初学者既没有学好程序设计,又被打击了学习信心和积极性.

2.大作业及其益处分析

2.1大作业概述

大作业不同于一般的编程练习题,从量和复杂度上来说都有相当大的区别.大作业是一个较为完整的程序开发过程,具体来说就是要求学生编程解决一个有一定难度的问题,综合利用所学课程的基本内容、基本理论和知识结构对难点问题进行分析的作业形式.


2.2原始调研数据罗列

笔者通过对北京地区17所高校的60名程序设计课程初学者进行访谈(调查问卷及结果如表1所示),了解他们学习程序设计语言产生困难的原因以及他们的学习方式和看法

2.3数据处理和益处分析

综合被调研者的口述内容和调研数据,大作业有以下几个优点:训练方面广、灵活性较强、连贯性强.

1)训练方面广.是否进行大作业设计的初学者平均代码编写行数如图1所示.从数据上来看,进行大作业的初学者为44人,占总调研人数的73.3%;进行大作业设计的初学者平均代码编写行数是不进行大作业设计的初学者平均代码编写行数的5倍,其中有11名初学者编写的程序多于1000行.可以看出,编写大程序可以保证初学者尽量多地使用语言.

2)灵活性较强.主要表现在不同大学不同课程的大作业具体内容的实行上,包括2个方面.首先,从设计命题(有的学校不要求)到开题,再到算法讨论和实现以及最后的程序提交和总结过程,导师都可以针对不同的要求和课程难度设置,灵活地安排大作业难度.在调研中,也有初学者表示他们可以按照自己的水平,灵活地选择目标和方向以及需要自己完成的项目.其次,导师的考查形式具有灵活性,对于开放性问题,导师可以设置面试答辩方式,也可以使用提交报告和运行展示的方式.考查时间可以设置在项目进程的关键时期,此期间可以由初学者进行一些汇报展示等.

3)连贯性强.主要表现在初学者的表述上.有的学校会为大作业设置一些必须使用的关键技术(如文件读取、多态、继承等).比较优秀的大作业程序设计重点应该放在核心思路的讨论和核心算法的优选上.程序设计往往贯穿整个学期,有的学校还专门设计一套时间表,精确到每个具体日期,要求初学者在某个日期提交程序设计的具体内容.从程序设计安排上看,大多数学校主要以培养编程习惯和熟练度作为编程核心,有条件的会更加重视思维的培养和小组团队合作共同开发的能力训练.大作业可以比较容易地将教学、自学、互学联系在一起,将整个学期的课程串起来.

对于初学者而言,面对程序设计有两道坎.第一是掌握语言本身,即能够顺利地使用本门课程的语言达到自己想要的目标.第二是掌握程序设计思想,即掌握结构化程序设计的精髓,以便在后续的应用中举一反三.初学者通过一般的小作业能够巩固基本的程序设计语言知识,相对而言,通过大作业则能够将程序语言的学习内容贯穿起来,训练整体思维的同时还能够加强程序使用的熟练度,提高小组合作能力和自主解决问题的能力,在量和质上达到飞跃.最关键的是,由于大作业课堂上的知识很难满足需求,使得初学者在实践过程中自主学习新的技术和算法,提高了自学程序设计语言和举一反三的能力,为后续程序设计思想的培养奠定基础.

3.面临的挑战

总的来看,90%以上的学生认为大作业对编程训练有效果,其中有半数以上认为这个作业很值得做.然而,笔者综合60名受访者陈述的观点发现,相当多的学生仍然无法达到培养编程思想并在后续学习中运用该编程思想的目标,仍然为后续语言需求不对等的问题感到迷茫.究其原因主要包括以下几个方面:①题目由老师布置;②几乎没有小组合作;③繁重的课业导致学生无法专心投入;④没有改进程序的意识,认为能够编出程序即可;⑤考查形式对于学生没有压力.

中国的“传授一接受”教学模式会使学生减少自主学习活动,逐渐产生依赖教师的习惯,降低自主学习能力.对于教师的依赖使得学生不愿意自主设计命题,即使设计出命题,该命题也存在各种缺陷.少见的小组合作模式是难点,学生没有小组合作的习惯,其实小组合作的模式不仅能培养学生合作讨论并解决问题的能力,而且可以起到让学生相互监督和督促的作用.学生对于课业压力与学习精力的平衡较难把握,除了面对繁重的学习压力还要完成大作业,算法的设计和优化也是需要面对的难题,需要学生投入较大精力.学生动手能力的提高过程中需要解决2大问题:①程序设计能力;②程序调试能力.这2个问题相辅相成,都是一个逐步实践和提高&# 30340;过程,怎么从中找到一个平衡也是教师亟待思考的问题.

4.结语

学生对于程序设计语言的学习有语言设计不对口、牵连知识多、思维转化难等困难.综合整个调研,笔者发现被广泛采用的大作业教学模式有相当突出的优点,应用形式也多种多样,是很有意义也很值得推广的一种作业形式.很多学生无法达到培养程序设计思维能力的目标,而这正是教师通过一门程序课程教学所要达到的目标,因此在大作业的完成过程中,教师应该更加关注这方面内容和技能的培养.

该调研有几个明显缺陷:①样本容量不够大,调查区域不够广,主要涉及北京地区大学本科教学的一小个方面;②调研采访的方式较为固定,应结合多种方法进行综合调研;③调研对象仅涉及学生,应该扩展到广泛的教学工作者.

致谢

该论文得到清华大学郑莉教授以及参与调研工作的包括清华大学、北京大学、北京林业大学等17所大学的60名受访者的支持,在此表示诚挚感谢.

(编辑:宋文婷)

类似论文

计算机程序设计语言教学

【文章摘 要】随着社会不断的发展与进步,计算机作为现代先进产物的代表,已经很快的进入到社会中的各。
更新日期:2024-2-15 浏览量:31593 点赞量:7830

大学计算机程序设计语言教学的

摘 要:大学生计算机程序设计语言教学的开展在我国已有20多年的历史,如何更好地开展这门课程&。
更新日期:2024-5-21 浏览量:70319 点赞量:16025

非计算机专业程序设计语言教学方法

摘 要:在《高级语言程序设计》教学过程中,如何使学生不再感到枯燥、难懂,找到一条新颖有趣的教学方。
更新日期:2024-11-25 浏览量:145574 点赞量:31602

《程序设计语言》性教学改革与实践

摘 要:为让学生更好掌握程序设计的基本方法和培养他们利用计算机分析问题、解决问题的能力,论文在分析程序设计语言课。
更新日期:2024-6-8 浏览量:15494 点赞量:5144

C程序设计语言教学方法的

【摘 要】目的:探索提高C程序设计语言课程教学质量、增强教学效果的方法 方法:在教学实践过程中尝试多种教学方。
更新日期:2024-9-27 浏览量:119364 点赞量:25726

JA程序设计语言在高校教学中的探究

摘 要:随着科学技术的不断发展,计算机技术越来越受到人们的重视,在我国,很多高校都陆续在计算机相关专业开设了《。
更新日期:2024-6-25 浏览量:83902 点赞量:19017