教育资源网图标 教育资讯 学前教育 K12教育 STEAM教育 考试相关 学校动态 教育机构
用户登录

编程学什么好,不妨看看这些文献资料吧

2020年08月26日

编程作为一项热门学习项目,刚还是学习编程都不知道学什么好,不妨看看这些文献资料吧文献综述

“当我不知道自己在做什么时,研究就是我正在做的事情。”

- Wernher von Braun

在过去的几年里,“学习编码”运动提出了编程是“新文化”的观点(Farag,2016)。它得到了许多行业领导者,名人和政界人士的支持,如纽约市市长迈克尔布隆伯格,他发表了一篇着名的推文:“我的新年决心是学习2012年Codecademy的编码!”(BBC,2012)。尽管它已经成功地激励了数百万人(试图)学习如何编码,但这种现象仍然是最新的。出于这个原因,“很少有研究可以解释成人开展在线自学或基于教​​学的入门课程如何体验学习代码和成果”(Vivian,Falkner,&Szabo,2014)。

相反,大多数关于学习编程的学术研究传统上都集中在大学生身上,尤其是第一年的计算机科学入门课程。这种环境显然与在互联网上独立学习编程完全不同,这就是为什么在为自学者得出结论之前必须仔细分析这项研究的许多发现。因此,本章首先介绍自学的特殊性(2.1)。之后,它列出了专注于大学生的学术研究,重点是与自学计划直接相关的研究结果。调查结果如下:导致学习编程困难的主要因素(2.2),对编程教学方法缺乏共识(2.3),2.1编程学什么好,自主学习的主要挑战

在深入了解自学的特定性之前,建立学习实际意义的定义是有帮助的。(Dreyfus&Dreyfus,1986)开发的五步模型是成人学习者如何掌握技能的最重要的理论之一:从初学者开始,学习者通过高级初学者,能力,熟练程度的阶段进步,直到最终成为专家。学习技能的过程是渐进的,通过教学,实践和学徒获得技能。(Rogerson&Elsje,2010)提供了如何定义这些阶段的很好的总结:

“在新手阶段,学生通过应用规则和遵循指示来学习。

在高级初学者阶段,学习者开始处理实际情况并识别在适当的环境中应用先前学习的技能的位置。在这个阶段,学习者开始从经验中吸取经验,但仍然遵循指示并通过实例学习。在学习的能力阶段,学习者意识到将规则和程序应用于手头的情况的不同方式,现在必须做出选择。学习者意识到,结果不仅取决于他们自己的行为,而且还必须对这些行为承担责任。正是这种情感参与和经验将胜任的表演者提升到了熟练阶段。为了达到预期的效果,熟练的学习者仍然必须决定做什么,并可能回到遵循学习的规则和程序。要达到第五个[专家]阶段,熟练的表演者不仅要感知需要做什么,还要无意识地知道如何达到预期的结果。专家阶段需要多年的实践和经验。“

一般来说,学习过程的理论基础对于研究自学编程过程时要牢记有用。

自学习1被定义为“学习一门或几乎没有正规教育的科目的行为”(维基百科,2016a)。(Bolhuis,1996)和(Garrison,1997)补充说,“[自学]将学习者视为自己学习过程中负责任的所有者和管理者。[自学]将自我管理(环境管理,包括社会环境,资源和行动)与自我监控(学习者监控,评估和规范其认知学习策略的过程)相结合。自我管理意味着学习者可以自由选择他们的学习目标,并通过课程来实现目标。这种自由留下了很大的灵活性,但同时也是许多方面的陷阱,本文将对此进行讨论。(驻军,

与“传统”课堂学习相比,自主学习具有随时随地可用的优势。尽管如此,它的方法也有缺点。首先,在线自学缺乏课堂学习的结构。例如,在线课程通常不提供严格的时间表(Elvers,Polzella,&Graetz,2003)。因此,学生需要特别自律并激励自己(Zhang&Perris,2004)。因为学生习惯于课堂环境的结构和规律性,所以他们很难对自己的学习负全部责任。其次,自学不提供像教室设置那样的社交社区。这可以使学生感到与班级社区隔离(Zhang&Perris,2004)。这也使得识别知识差距和误解变得更加困难,因为学习者之间的沟通较少(Krause,Stark,&Mandl,2009)。第三,学生在有问题时无法立即得到老师的反馈(Zhang&Perris,2004),这可能令人沮丧并且减少了动机。最后,许多大学生“经常关注与评估相关的主题,而不是其他任何事情”(Gibbs&Simpson,2004)。成绩和文凭提供了自学者无法获得的外部动机。许多大学生“经常关注与评估相关的主题而不是其他任何事情”(Gibbs&Simpson,2004)。成绩和文凭提供了自学者无法获得的外部动机。许多大学生“经常关注与评估相关的主题而不是其他任何事情”(Gibbs&Simpson,2004)。成绩和文凭提供了自学者无法获得的外部动机。2.2编程学什么好,什么使学习编程变得困难

这是涵盖大学进行的学术研究的几个部分中的第一部分,大多数研究侧重于入门计算机科学课程。少数彻底建立和无可争议的发现之一似乎是编程被认为是大多数学生的艰巨任务(Boyle,Carter,&Clark,2002),(Jenkins,2002),(Robins,Rountree,&Rountree) ,2003),(Bergin&Reilly,2005a),(Bergin&Reilly,2005b),(Fincher,et al。,2006),(Gomes&Mendes,2007a),和(Gomes&Mendes,2007b)。

尽管几十年来为改进编程教育付出了巨大努力,但学生学习中的这些困难仍然占了上风(Eckerdal,2009)。并且,用(詹金斯,2002年)的话说,“如果学生努力学习某些东西,那么这个东西由于某种原因难以学习”。(Anewalt,2008)和(Porter&Calder,2004)发现这种困难是学生退出CS课程的主要原因。关于为什么编程被证明对学生来说如此困难,有很多可能的解释。(Baldwin&Kuljis,2001)将其归结为“学习编程需要复杂的认知技能,如计划,推理和解决问题。”其他研究为学习如何编写困难任务提供了更切实的因素。(Dann,Cooper和Pausch,2011)发现了四个因素:(i)程序创建的脆弱机制,特别是语法; (ii)程序运行时无法查看计算结果; (iii)缺乏编程动机; (iv)难以理解复合逻辑和学习设计技巧。(Kelleher&Pausch,2005)给出了另一种解释:“除了学习形成问题的结构化解决方案和理解程序如何执行的挑战之外,初学程序员还必须学习严格的语法和严格的命令,这些命令可能看起来是任意的或者或许令人困惑的名字。同时应对所有这些挑战对于初学程序员来说可能是压倒性的并且常常令人沮丧。(Rogerson&Elsje的一项研究,2010)采取了有趣的方法来研究学生如何编程的挑战和困难,由学生自己叙述。他们发现大多数参与者经历了编程的字面“恐惧”,这部分归因于编程的本质。“尽管这些参与者都有动力去取得成功,但随之而来的斗争导致了拖延和避免的典型症状,这只会增加问题”。虽然这个特定的研究仅代表一个小样本,并且不允许对研究结果进行统计推广,但它显示了自学者应该避免的开始:被学习的大量概念所淹没和恐吓,而是逐渐进行在整个过程中提供满足感的方法,从而有助于维持自我效能和动力。另一项研究(Lahtinen,Ala-Mutka和Järvinen,2005)发现“新手程序员最大的问题似乎不是对基本概念的理解,而是学会应用它们”。在他们的研究中,“学生和老师都认为实际的学习情境是最有用的。即使理论在学习编程中非常重要,学生也需要实践经验来理解这些概念。学习情境和材料越实际和具体,学习就越多“。正如我们将在第3.3.2章中看到的那样,这种观点已经被自学者和从业者广泛共享。2005)发现“新手程序员最大的问题似乎不是对基本概念的理解,而是学会应用它们”。在他们的研究中,“学生和老师都认为实际的学习情境是最有用的。即使理论在学习编程中非常重要,学生也需要实践经验来理解这些概念。学习情境和材料越实际和具体,学习就越多“。正如我们将在第3.3.2章中看到的那样,这种观点已经被自学者和从业者广泛共享。2005)发现“新手程序员最大的问题似乎不是对基本概念的理解,而是学会应用它们”。在他们的研究中,“学生和老师都认为实际的学习情境是最有用的。即使理论在学习编程中非常重要,学生也需要实践经验来理解这些概念。学习情境和材料越实际和具体,学习就越多“。正如我们将在第3.3.2章中看到的那样,这种观点已经被自学者和从业者广泛共享。学习情境和材料越实际和具体,学习就越多“。正如我们将在第3.3.2章中看到的那样,这种观点已经被自学者和从业者广泛共享。学习情境和材料越实际和具体,学习就越多“。正如我们将在第3.3.2章中看到的那样,这种观点已经被自学者和从业者广泛共享。2.3编程学什么好,对编程教学方法缺乏共识

由于许多学生发现学习编程很困难,所以教授第一门编程课程已成为众多研究的主题,例如(Carter&Jenkins,2002),(Kelleher&Pausch,2005),(Pears,et al。,2007) ),(Ali,Mensch,2008),(Hu,Winikoff,&Cranefield,2012),(Verdú,et al。,2012),和(Combéfis,Beresnevicius,&Dagiene,2016)。有许多不同的方法可以为教学编程提出新的方法或框架,旨在简化初学者或入门级学习编程的学生的学习。(de Aquino Leal&Ferreira,2016)评论说,学术界对“学习编程的最佳方式”没有“共识”。这种观点通常得到了证实,例如(Michaelson,2015),他说“在第一台计算机建成70年后,

今天缺乏共识可能有很多原因。正如(Michaelson,2015)所指出的那样,许多研究都是由“时尚,热情或希望遵循最佳工业实践,而不适合新手程序员”推动的。一个由时尚驱动的研究的例子,最重要的是,在方法上是脆弱的(Amer&Ibrahim,2014)。他们在教授入门编程时研究了在课堂上使用iPad的效果,并通过管理学生满意度调查(最终得出适度积极的结果)来衡量他们的方法的有效性。另一个因素可能是存在如此众多的教学方法“难以跟上它们”(Zendler,2015) - (Gugel,2011)引用了2,000种方法,包括它们的变化。

因此,本文侧重于一些选定的研究方法,这些方法对于自学者来说很有意义,因为他们提倡许多在线学习资源遵循的相同原则:( Herbert,2007)提出了三个因素来学习如何更容易地编程:最小化语法,提供视觉反馈,并改进实施和结果。他澄清说,学生应该“轻轻地”接触新材料,随着时间的推移会增加越来越多的细节。这一点对于自学者来说很重要,因为在编程中获得对新概念的理解的有效方法是通过隐喻和类比将新材料与熟悉的知识联系起来。在足够缓慢和渐进的变化下,它运作得相当好; 然而,在严重不连续的情况下,该方法会崩溃。(Dijkstra,1989)。(鲍德温&Kuljis,2001)进一步建议“设计界面,以便用户可以与之积极互动; 用比喻和类比来解释概念; 并使用空间关系,以便用户可以开发心理模拟的能力“。(Porter&Calder,2004)注意到学生应该能够与他们的课程输出进行互动,因为这可以提供即时反馈。如果输出有趣,它也可以帮助保持学生的积极性。另一个有趣的方法(McCartney,Eckerdal,Mostrom,Sanders,&Zander,2007)向学生们自己询问,事后看,他们会建议成功。主要内容是关注实践,持久性,社交网络和分步说明。一般来说,上面介绍的大多数方法都集中在“使交互变得有吸引力而不是识别和诊断学生的动机”(Thinakaran&Ali,2016),这可以解释为什么对“最佳方法”没有达成共识 - 方法的选择可能与学生动机相比,具有次要的重要性。(Thinakaran&Ali,2016)指出,缺乏对在线环境中学生动机的研究,这是自学者的一个基本问题。他们的论文是在撰写本文之前两个月发表的,这表明这一研究流程仍处于起步阶段。截至今天,学术界仍然存在各种各样的教学方法和缺乏共识。这可以解释为什么对“最佳方法”没有达成共识 - 与学生动机相比,方法的选择可能是次要的。(Thinakaran&Ali,2016)指出,缺乏对在线环境中学生动机的研究,这是自学者的一个基本问题。他们的论文是在撰写本文之前两个月发表的,这表明这一研究流程仍处于起步阶段。截至今天,学术界仍然存在各种各样的教学方法和缺乏共识。这可以解释为什么对“最佳方法”没有达成共识 - 与学生动机相比,方法的选择可能是次要的。(Thinakaran&Ali,2016)指出,缺乏对在线环境中学生动机的研究,这是自学者的一个基本问题。他们的论文是在撰写本文之前两个月发表的,这表明这一研究流程仍处于起步阶段。截至今天,学术界仍然存在各种各样的教学方法和缺乏共识。已被指出(Thinakaran&Ali,2016)。他们的论文是在撰写本文之前两个月发表的,这表明这一研究流程仍处于起步阶段。截至今天,学术界仍然存在各种各样的教学方法和缺乏共识。已被指出(Thinakaran&Ali,2016)。他们的论文是在撰写本文之前两个月发表的,这表明这一研究流程仍处于起步阶段。截至今天,学术界仍然存在各种各样的教学方法和缺乏共识。

作为一个旁注,它在有时“特殊”的编程世界中提供了一种有趣的见解,(Robins,Rountree,&Rountree,2003)引用了“对教学编程艺术有影响且完全不同的观点”:( Dijkstra,1989)在一个名为“真正教授计算机科学的残酷性”的名称中,人们认为拟人隐喻,图形编程环境等具有误导性,并且代表了这个过程中令人无法接受的“愚蠢”。他提出了一种基于数学基础的不同类型的课程,如谓词演算和布尔代数,并建立了程序正确性的形式证明。2.4编程学什么好,学习编程成功的预测因子

有大量研究试图确定学生成功的预测因素,例如(Byrne&Lyons,2001),(McCracken等,2001),(Wilson&Shrock,2001),(Bergin&Reilly,2005a) ,(Fincher,et al。,2006),(Gomes&Mendes,2007a),(Gomes&Mendes,2007b),和(Kinnunen,McCartney,Murphy,&Thomas,2007)。(Wilson&Shrock,2001)建立了十二个因素的指示性清单,包括:以前的编程经验,以前的非编程经验,工作方式偏好,数学背景,性别,学生自己的成功或失败归因,以及学生的舒适程度。他们的结论是,在所有变量中,舒适度是最可靠的成功预测因素。低水平的舒适感往往导致焦虑,

其他研究侧重于内在因素,如性别,年龄,文化和语言。有趣的是,他们的发现是多种多样的,没有可靠的预测因子出现(Byrne&Lyons,2001),(Jenkins,2002)和(Kinnunen,McCartney,Murphy,&Thomas,2007)。唯一的例外是情报:似乎普遍认为,一般智力的测量与学习编程的成功有关(Mayer,Dyck,&Vilberg,1986)。我认为这一发现是令人鼓舞的:学生们掌握着这一点,努力提高技能,使他们成为优秀的程序员,而不会受到他们无法控制的因素的影响。一个例子是性别:虽然大多数程序员和编程学生都是男性(Stack Overflow,2016),

正如(Gomes&Mendes,2007a,2007b)所述,解决问题的能力常常是编程学生失败的首要原因,这表明善于解决问题可能是学习编程时成功的主要预测因素。一些作者采取了类似的方法,并专注于除了解决问题之外,哪些特定主题需要学生学习才能在入门编程课程中取得成功。(Dann,Cooper,&Pausch,2011)将其中三个命名为:算法思考,抽象和对优雅的欣赏。(Winslow,1996)补充说,“研究表明,编写程序的能力与阅读程序的能力之间几乎没有对应关系。两者都需要与一些基本的测试和调试策略一起教授“。(Soloway&Spohrer,1989年)注意到“学生们没有得到足够的指导,如何将这些作品组合在一起。” 明确专注于实施协调和整合计划代码基础的目标和计划的具体战略可能有助于扭转这一趋势。“(Berglund&Eckerdal,2015)在他们说学生需要”同时学习“时提出了类似的观点。编程的理论方面(例如if子句的含义,思想方法)或多或少同时学习实践方面(手工艺,例如在哪里放分号,如何对错误信息采取行动) )”。在一个普遍接受的更全面的方法中,(McGill&Volet,1997)总结了学习者需要掌握的三种技能:第一种是句法知识,即 有关编程语言及其使用规则的知识。其次,概念知识涉及计算机编程的构造和原理。正如(Baldwin&Kuljis,2001)指出的那样,通过“语法和概念知识,学习者能够为他们在课堂上遇到的简单或密切相关的问题设计解决方案。”第三,战略知识涉及一般问题 - 针对特定项目的技能。(Baldwin&Kuljis,2001)评论说“通过句法,概念和战略知识,学习者能够解决新的编程问题。它是识别和分解问题以及测试和调试错误以及设计编程阶段所需的战略知识。“(Kinnunen,McCartney,Murphy和Thomas,

心理态度也被发现是成功的预测因素:学习的动机和态度,以及相信自己和自己的能力,这被称为自我效能(Gomes&Mendes,2007b),(Jenkins,2002) ,(McCartney,Eckerdal,Mostrom,Sanders,&Zander,2007),和(Robins,Rountree,&Rountree,2003)。“情绪和感知在学习编程中发挥作用,因为发现表现出乐观的学习归因的学生比那些观点不太乐观的学生表现得更好,而且学生们认为积极的事件归因于自我(内部因素)和不可改变的(例如能力)比具有悲观归因的学生具有更好的成绩“(Vivian,Falkner,&Szabo,2014)。此外,“虽然努力,

最后,一系列文献发现,拥有先前的编程经验是成功的明确预测因素(Hagan&Markham,2000),(Byrne&Lyons,2001),(Bergin&Reilly,2005a),(Capovilla,Berges,Mühling, &Hubwieser,2015)。虽然这一发现很有意思,但它对本文重点关注的初学者没有帮助 - 它可以被视为鼓励人们尽可能地开始和编程。2.5编程学什么好,选择第一种编程语言

大量文献侧重于为初学者选择哪种语言。他们研究了许多不同的语言,并提供了广泛的可能结论。在学术界,Python相对常见,因为它提供了许多可用于科学背景的库(例如数据科学/统计学)。在比较C ++和Python的研究中,(Ateeq,Habib,Umer,&Rehman,2014)赞成Python,因为“更简单的伪编码语法,易于学习的环境和更高的抽象”。(Yadin,2011)补充说,Python的简单语法允许学生专注于提高他们的解决问题的能力和算法思维。现在,Python在美国排名前10位的计算机科学中有8门被教授,并且作为第一种编程语言似乎有着广阔的前景。还有其他几位作者(Leping,et al。,

然而,总的来说,没有就第一种编程语言选择达成共识 - 大量研究倾向于使用同样多的语言。(Holvikivi,2010)提倡JavaScript,因为“它在网络上的简单语法和适用性”有助于激励学生。其他人,如(Winslow,1996)和一些贡献者(Soloway&Spohrer,1989),建议为初学者使用简单的,专门设计的教学语言。示例包括Alice,Kara,Scratch,Pascal或BASIC。(McIver,2000)介绍了一种名为GRAIL的新语言,她发现这种语言优于LOGO。一些作者赞成使用工业强度编程语言,例如Java,C / C ++,FORTRAN或COBOL(Michaelson,2015) - 该列表可以继续使用。虽然这些调查结果似乎是矛盾和不确定的,

“使用'更安全'或更多托管语言和环境可以帮助学生学习。但是,这些语言可能提供一定程度的抽象,模糊了对实际机器执行的理解,并且难以评估性能权衡。关于是否使用“低级”语言来促进更接近机器实际执行的程序执行的特定心理模型的决定通常是当地受众需求的问题。使用为入门教学法设计的语言或环境可以促进学生学习,但在CS1之外可能使用有限。相反,专业上常用的语言或环境可能会使学生过早地复杂化。“(计算机协会(ACM),2013)。

总之,编程语言本身并不好或坏; 它们的好坏取决于个体自学者的目标。2.6编程学什么好,新手和专家程序员的区别

大量工作集中在确定编程初学者之间的差异,称为“新手”和专家。一般来说,文献认为将初学者变成专家程序员大约需要10年时间(Winslow,1996)。(Rist,1995)总结了专家程序员的优势如下:“编程专业知识应该通过三种方式减少变化:通过定义接近设计任务的最佳方式,提供一组标准模式来回答问题,以及将执行结构的选择限制在“最佳”解决方案中“。(Robins,Rountree,&Rountree,2003)补充说,专家“善于识别,使用和调整模式或模式(从而避免了对明确的工作或计算的需要)。它们更快,更准确,

至于新手,(Winslow,1996)已经得出结论,他们仅限于表面和表面组织的知识,缺乏详细的心理模型,未能应用相关知识,并且“逐行”地进行编程而不是使用有意义的程序“块”或结构:“[重要的一点]是大量的研究得出结论,新手程序员知道单个语句的语法和语义,但他们不知道如何将这些功能组合成有效的程序。即使他们知道如何手动解决问题,他们也难以将手部解决方案转换为等效的计算机程序“。(Soloway&Spohrer,1989)增加新手缺乏对各种特定编程语言结构(如变量,循环,数组和递归)的理解,注意他们在规划和测试代码时的缺点,展示先验知识如何成为错误的来源,等等。这些发现有助于说明哪些高级技能对于自学者在编程方面变得更加重要。

最近的一项贡献承认存在一个看似明显但以前被广泛忽视的第三组:所谓的“会话程序员”。他们不打算成为专业程序员,但希望获得编程的基本素养,这样他们就可以“用'程序员的语言'说话”并改善他们在软件行业的工作前景(Chilana,et al。,2015)。

编程学什么好,看看这些文献资料想必你也已经非常清楚该如何做了吧。