Java编程课上学生的编程错误分析外文翻译资料

 2022-10-25 02:10

英语原文共 11 页,剩余内容已隐藏,支付完成后下载完整资料


翻译原文:

Java编程课上学生的编程错误分析

伊万娜·图盖雷·陈·莫

计算机系,萨摩亚国立大学理学院

萨摩亚阿皮亚市

邮箱:i.chanmow@nus.edu.ws

摘要

计算机专业的学生在理解Java程序时遇到的困难,为(编程技术很难被掌握)这一现象持续出现的原因的调查提供了一个实际环境。国立萨摩亚大学的计算机系职工进行了一项探索性的研究,调查了哪些是学生在Java编程课上最容易犯的错误。本科生的Java编程课的源码被用于分析并找出这些常见的错误。这些错误被分类并且其发生频率也被记录下来。分析的结果将被用于给计算机专业课程提供建议并且改进教学实践。

关键词:编程错误,Java,语法,语义,逻辑错误

1.简介

在大学里教授计算机编程课程已经被认为是一个非常困难并有挑战性的任务,而且计算机学科的教育家们也越来越关注计算机编程初学者学习编程时遇到的困难。计算机编程是一个比较困难并具有挑战性的学科领域,给学生造成了很重的认知负荷[2],[3]。研究发现即使学习编程两年后,很多新手程序员仍在努力变得精通[3],[4]。根据[5]所说,一个新手程序员要变得精通编程需要花10年的时间。

大多数新手程序员没有编程的背景知识。编程要求学生在编程过程中掌握大量的信息。这些包括语法的细节和针对在用的编程语言的语义,以及怎么解决每个问题与区分解决问题和指定解决方案的能力[6]。计算机编程也需要用户对下列工具精通:(a)开发环境;(b)编程语言;(c)编译器/解释器。这是编程接口的不同级别,用户必须掌握这些才能熟练掌握编程技术[6]。因此,这些要求就给了学生一个沉重的认知负荷,使编程的学习成为一个复杂并具有挑战性的认知任务。有着这样一个计算机编程的认知挑战性的天性,一个提高入门编程的教学能力的途径是分析新手程序员产生的编程中的错误。

对初学者编程的错误进行分析可以从多个方面帮助改善对初学者的编程教育。着手开始这项研究的动机来源于改善编程教育和新手程序员解决问题的策略的需要。这些研究的发现可以找出学生(在编程时)需要注意的问题最严重的地方。这还有助于对投入时间最多的专题部分和学生最难处理的部分进行合理的时间分配。甚至可以用这些信息在早期就识别出那些“危险”学生并进行有针对性的干预。

本文描述了在国立萨摩亚大学的Java编程班级进行的关于新手编程所犯错误的一项研究。这项研究旨在找出学生在Java编程课程上常犯的错误和通过分析这些错误来划定一个常见错误范围从而可以让学校的课程更多的注意这些地方。这项研究尝试着去回答一个问题,那就是:从语法,语义和逻辑角度来看,这些学生常犯的编程错误都属于哪种常见类型?

国立萨摩亚大学的计算机编程课程是计算机专业本科(证书,文凭,学士)专业课程。除了有一门课程是VB语言,其他的都是用Java语言进行编程。Java课程一学期有四门课程:HCS181,HCS281,HCS286和HCS381。在学习HCS181之前,必须先学习HCS081,它包含了Java编程的一部分基础知识。HCS081的 Java部分的内容介绍了编程的基本概念,介绍了集成开发环境(IDE)的JBuilder(java程序编辑器,编译器和调试器),以及使用类,方法和属性,顺序和条件语句来创建简单的Java应用程序。HCS181介绍了编程的基本概念,以及软件开发,介绍了集成开发环境(IDE)的JBuilder(java程序编辑器,编译器和调试器),UML建模,以及用类,方法和属性,数组,顺序,条件和循环语句来创建一个简单的Java项目。HCS281则是延续HCS181的学习,包括条件和循环语句,异常处理,键盘读写,文件读写等内容。而HCS286则是延续HCS281的学习,包括异常处理,键盘读写,文件读写,访问控制等,然后还会介绍继承,静态对象,多态,重载,数组,链表,栈和队列,哈希表,排序,搜索和二叉树。HCS381则是Java课程的最后一门课程,扩展学习了HCS286中的一些概念,和教导学生要注重项目编程和应用程序开发。

实际上,关于新手程序员在学习编程时的困难已经有许多机构做过研究[2];[7-12]。基本的结论是:如果我们在学习第一门编程语言时能理解它的流程,那么我们就可以创造更有效的学习环境。此外,对编程错误的分析研究可以让编程教学课程就教学方法进行改进,并合理的分配教学实践的时间。

不同的研究[13-15]已经表明:有两个方面对编程的学习有最大的影响,第一个,项目方案制定,本质上就是[16]提到的“符号”和[14]提到的“语言结构”。也就是对任何程序来说都是至关重要的语法和语义的定义。第二个,问题描述,就是[16]中提到的“结构”和[14]中提到的需求分析。问题描述是为了解决一个特定问题而制定一个程序,其中的问题分析和构造程序必要的组建时最大的挑战。

[17]中提到了一项关于Java教学课程遇到的困难进行的一项专题调查。决定采取一些更有效率的教学活动,比如交互式教学,在线教学,在线编程等。调查结果表明:学生最容易出问题的地方有如下:数组,线程,多态,循环,异常和继承。在线教学被评为最有效的教学模式。此外,学生最大的障碍是Java的复杂性以及技术访问问题。

[18]中的另外一项国际调查,统计了来自500名学生和老师的意见,评比出了在学习编程和编程教学时经历和遇到的最大的困难。根据学生的意见评出的在编程学习时的最大的困难是:(a)如何设计一个程序来解决一个特定的问题;(b)功能分开和项目的集成;(c)找出自己的程序中的bug。这些都在说明一个问题:学生需要了解的是整个项目的整体架构,而不仅仅是一些细节。除此之外,最难理解的编程概念是递归,指针和引用,抽象数据类型,错误处理和使用语言库。这告诉我们,错误处理需要的是全面的了解你的程序。使用语言类库需要会独立的搜索信息,这对于新手来说是很困难的。递归,指针,引用和抽象数据类型都是抽象的概念,除非用日常生活中比较类似的现象来类比,否则很难以理解明白。在老师们的意见中关于最难的地方和学生的几乎差不多。除此之外,老师们普遍觉得理解程序的结构同编程一样难。

另外一项关于新手程序员的调查[10]是Otago Polytechnic的Java入门课程班组织的。作为调查的一部分,所有学生在实验课上遇到的难题都会被记录下来,而学生想要通过这一门课程需要进行一系列的25次的实验课程。学生在若干个老师的监督下学习,这些老师针对学生提出的所有问题都会予以解答。这些问题会被记录,分析,并按照问题的类别进行分类。结果表明,最常见的问题是:(a)基础知识;(b)程序设计;(c)基本程序结构问题;(d)理解任务。结果与文献指出的结果相一致,都突出了程序基本结构和程序编写这两个问题的重要意义。不同的问题也可以用来区分编程能力好坏的学生。

一个好的工具不仅可以标记出源程序中的错误而且还能提供调试器来帮助理解程序。[7]中的一项关于调试器的使用的研究中介绍了许多功能,包括调试练习,调试日志,调试工具,调试备忘录和协作式作业。这项研究的结果表明:(a)经过正式学习调试有助于提高学生发现和解决程序中的bug的能力;(b)那些完成了可选的调试练习的任务的学生那些没有完成的学生在调试他们的程序上花费的时间要少。此外,他们也学会了如何调试程序,在调试日志,调试工具,调试备忘录和评估调查等方面都养成了自己的习惯。这种模式可以让学生和老师都学会调试程序中的bug,从而提高他们的编程能力。

在Samoa,关于计算机编程唯一的研究是[1]中提到的,持续了三年,最终发明了一个计算机编程能力教学计划,称为CABLE(Cognitive Apprenticeship Based Learning Environment)。

在这项研究中,CABLE的设计包括了认知学徒制,协作学习,元认知以及远程学习和在线或CMC技术。从实际的实验中看,它有以下特点:(a)CABLE提供了一种可行的教学模式,这可以引进到大学的编程课程中去;(b)使用CABLE进行学习的学生比那些接受传统模式学习的学生在Java编程上取得的分数要高;(c)使用CABLE学习的学生和那些接受传统模式教育的学生在学习的态度上没有任何区别;(d)使用CABLE进行学习的学生相比那些通过传统模式进行学习的学生在心理上有更多的参与感。使用CABLE教学模式的学生在合作和在线学习上都表现出更积极的态度。

[1]中的研究评估了CABLE作为一个编程教学的环境在大学内容上的高效性,但是并没有具体的研究学生在编程时所犯错误的类型。但是本文的研究打算做到这一点并因此提供一些关于教学课程中的一些编程错误区域的一些相关数据,这些区域需要重点关注和提供有针对性的帮助。

方法

目前的研究注重于对国立萨摩亚大学的3门计算机本科生编程课程,即HCS181,HCS281和HCS286,上的数据的分析。这3门课程采取了每周为期4个小时,持续一个学期的演讲式的教学。这些课程的成绩评定采取了编程课题,考试和家庭作业的方式。这些课程使用的编程语言是Java,使用的IDE工具是JBuilder。对每一门课程的数据的分析都采取了两套方案,方案一是HCS181抽取25名学生,HCS281抽取28名学生,和HCS286抽取15名学生用于数据分析。这些评估任务的副本出现在附录1至3。三个班级的计算机程序会被导入JBuilder。然后编译和运行这些程序。编译器生成的错误会被根据该出现的错误的类型进行记录和分类。编译器窗口的形式生成器和编译器消息(这些显示为红色)的样品出现如图1。

图1:在JBuilder的编译器窗口出现的红色的错误提示信息

分析和结果

(经过上面的分析),将产生每一门课程的编程错误的频率分布情况,每个类型的错误都显示在下表中。正如前面所提到的,HCS181课程介绍了编程的基本概念,直到软件开发,介绍了集成开发环境(IDE)JBuilder(提供Java程序的编辑,编译和调试),UML建模,使用类,方法和属性,数组,顺序,条件和循环语句来创建Java应用程序。 对HCS181课程上的编程错误的分析揭示了以下内容,(学生在编程时)总是遇到了171种不同类型的错误,其中有五种常见的学生在编程时遇到的错误占据了90%的比例。他们分别是:变量未找到(59.1%),变量未定义(13.5%),未发现类(7%),括号不匹配(6.4%)和无效的方法声明(7%)。分析结果如下表1。

表一:HCS181课程编程错误总结

HCS281是HCS181的后续学习课程,主要内容包括条件和循环语句,字符串函数和字符串处理,文本处理,异常处理,键盘读写,文件读写。通过分析总共有80个错误,其中最常见的5中错误占71.25%,它们是:变量未定义(27.5%),变量未找到(22.5%),类型非法启动(7.5%),括号不匹配(7.5%)和无效的方法定义(6.3%)。分析的结果如下表2。

表二:HCS281课程编程错误总结

HCS286是HCS281的后续学习课程,是对一些专题的延伸,包括异常处理,键盘读写,文件读写,访问控制等,然后还介绍了继承,静态对象,多态性,重载,ArrayList,链表,队列,栈,哈希表,排序,搜索和二叉树。分析表明总共有70种错误,其中常见的五种错误占81.4%。它们是:变量未找到(58.6%),构造函数未找到(7.1%),需要数组类型(5.7%),元素缺失异常(5.7%)和返回值类型为void却返回了值(4.3%)。分析结果见下表3。

表三:HCS286课程编程错误总结

将这3门课程(HCS181,HCS281,HCS286)上学生犯的编程错误按不同类别结合起来,按3个级别总结出最常犯的8个错误列出在下表4中,这8个最常见的错误分别是:变量未找到(49.8%),标识预期(14%),找不到类(5%),不匹配括号/花括号(5.3%),无效的方法声明(3.7%),类型非法启动(3.4%),缺失(2.2%)和方法未找到(1.6%)。

表四:从3们课程HCS181,HCS281和HCS286中总结出的最常见的8个错误

讨论

这些编程的错误是在程序报错的时候检查得到的,分析指出,以下内容是产生这些错误的根本原因。大部分的语法错误是由于学生的疏忽造成的,变量未知类的错误,比如占49.8%的变量未找到的错误,则是学生的拼写错误或者忘记了声明该变量。变量预期的错误也是相同的原因,比如忘记了引入包含有问题类的包。未找到类错误通常是由忘记了引入包含该类的包,或者是在程序中混淆了类和其他的数据结构。不匹配括号/花括号错误包括所有类型的括号(“()”,“{}”和“[]”),是由于忘记了括号的匹配。无效的方法声明错误主要是由于函数声明的返回值类型和实际的返回值类型不一致导致的。表达式错误是由于括号不匹配或者分号丢失引起的。方法未找到和方法无效声明的错误是由于拼写错误,方法名称后忘记了“()”,在方法名后面加“;”,或者是在程序中没有声明方法和忘记了引入

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[154245],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。