许多程序员坚持的一句古老谚语是:“学习编程需要某种心态,并非所有人都能做到。”
现在,我确定我们都有自己的轶事证据库,但是是否对此进行了科学研究?
许多程序员坚持的一句古老谚语是:“学习编程需要某种心态,并非所有人都能做到。”
现在,我确定我们都有自己的轶事证据库,但是是否对此进行了科学研究?
Answers:
另一项研究,调查初学者程序员持有的心理模型的可行性:
本文描述了对Java初学课程结束时新手程序员使用的心理模型的可行性的调查。定性的发现确定了参与者持有的价值观念和参考分配的心理模型的范围。定量分析显示,大约三分之一的学生持有价值分配的不可行心理模型,只有17%的学生持有参考分配的可行心理模型。此外,通过比较参与者的心理模型与他们在课程评估和期末考试中的表现,发现具有可行的心理模型的学生的表现明显好于没有可行的模型的学生。这些发现被用来提出一个更“建构主义的”
另外,请参见《羊与山羊》研究的同一作者的后来研究(要明确,该研究从未真正发表过)。他们在2009年以来关于该主题的最新研究是对一致性对编程早期学习成功的影响的Meta分析(pdf)。
设计了一个测试,该测试显然检查了学生在编程第一门课程之前的作业和顺序知识,但实际上旨在捕获他们的推理策略。一项实验发现了两个截然不同的学生群体:一个可以建立并始终如一地应用程序执行的心理模型;另一个可以建立一个程序模型。另一个似乎无法建立模型或无法始终如一地应用模型。就成功或失败而言,第一组在课程结束时的考试成绩要好于第二组。该测试不能非常准确地预测性能水平,但是通过结合实验的六次重复,英国的五次和澳大利亚的五次重复的结果,我们证明了一致性确实对早期学习编程的成功有很大影响-但另一方面,有后台编程经验
是的,在线上有一篇非常有名的论文旨在或多或少地确定“谁被选为程序员”。
编程早期学习的认知研究 -Richard Bornat教授,Ray Adams博士
所有程序设计老师都发现他们的结果显示出“双重驼峰”。好像有两个种群:可以[编程]的人和不能[编程]的人,每个人都有自己独立的钟形曲线。
几乎所有对编程教学的研究都集中在教学上:更改语言,更改应用程序区域,使用IDE并进行激励。它们都不起作用,并且双峰仍然存在。
在课程开始之前,我们进行了一项测试,挑选出可以编程的人群。我们可以分开双峰。您可能不相信这一点,但是您会在听完演讲后再说。我们不知道确切如何/为什么运行,但是我们有一些很好的理论。
这是杰夫·阿特伍德(Jeff Atwood)的博客文章,该文章解释了结果并将某些内容置于上下文中。
尽管自1950年代发明电子计算以来发生了巨大的变化,但某些事情仍然顽固地保持不变。特别是,大多数人不会学习编程:每个大学计算机科学系的入学人数中有30%至60%的人没有通过第一门编程课程。
有经验的老师很疲倦,但从来没有忘记这一事实。聪明的初学者认为老人一定做错了,他们从痛苦的经验中学到了真理。自从1960年代开始研究这个话题以来,已经有近两代人了。
任何人都可以成为程序员。考虑人们如何轻松地掌握电子表格。考虑一下艾伦·凯(Alan Kay)在可编程环境中通过实验和探索将孩子介绍给编程的可能性。
人们可能会在大学课程中学习成功,然后得出结论:“有些人不适合学习编程”。但是,这样的结论严重超越了所观察到的证据的范围。多少失败可以归因于如何教授编程(太抽象?),或教导哪种编程风格(太命令?)或编程环境(编译,没有即时反馈?)。
众所周知,人们已经在使用多个具体实例之后最容易掌握抽象-即,我们只有几乎已经知道一些东西,才能学习到东西。因此,从抽象开始是教授编程的完全愚蠢的方式。如果在更具体的环境中接受实时反馈(例如,在卡恩学院的CS中)进行教学,然后鼓励他们准备好抽象的阶梯,许多迷失了误解的“心理模型”的人就会壮成长。可学习编程是Bret Victor最近发表的一篇文章,提请人们注意程序员在学习中面临的不必要的环境挑战。
在某些情况下,是学生不及格。智力懒惰和故意的无知将存在于任何一大群人中。聪明的人也不例外,任何以出色的曲柄争论的人都可以证明。但是,尤其是对于编程和数学,往往是班级让学生不及格。
x = 1; y = x;
问题是“ x
和的值是y
什么?”
Is it true that not everyone can learn how to program?
从问题中删除了这一行,我们经验丰富的成员将其忽略了,意识到它不符合我们的指导原则,并将他们的答案集中在问题的研究/科学方面。你能做同样的吗?
也许这是轶事,但是当我向数百名文科学生教授入门编程时,我发现没有这种“双重障碍”。在我看来,他们都很有能力,尽管有些人比其他人更努力,而很少有人试图虚张声势。
这与教学方式有很多关系。
欲望也与很多事情有关-有些人觉得编程没什么趣味。但是即使这样,只要他们诚实地努力,他们仍然可以学习。
当我刚开始时,通常在进行编程工作之前先进行“能力测试”。计算机科学专业的毕业生人数不多,因此从其他学科招聘人才是很普遍的。
这些测试与您在IQ测试中看到的类似(序列中的下一个数字是什么,等等)。
轶事证据表明,虽然并非所有通过测试的人都成为一名优秀的程序员,但没有一个人通过测试而失败,但由于其他原因而被录用,就成为了一名优秀的程序员。
可悲的是,HR无人机不了解这些测试(并在接受测试时失败!),因此,如今的招聘取决于HR无人机所了解的东西-良好的大学,沟通能力和穿西装的技能。
这完全是大型IT部门有很多人都擅长PowerPoint演示而很少有优秀程序员的原因。
对于那些引用Dehnadi和Bornat的双峰或山羊对羊的研究的人来说,值得去研究一下Caspersen等人(2007年)的心理模型和编程能力,他们试图复制这种思想:
预测参加入门编程课程的学生的成功已超过25年,是一个活跃的研究领域。直到最近,还没有变量或检验具有显着的预测能力。但是,Dehnadi和Bornat声称找到了一种简单的编程能力测试,可以将编程绵羊与非编程山羊完全分开。我们简要介绍他们的理论和测试仪器。
我们已经在本地环境中重复了他们的测试,以验证和概括他们的发现,但是我们无法证明该测试可以预测学生在入门编程课程中的成功。
基于测试仪器的这种故障,我们讨论了针对不同结果的各种解释,并提出了一种研究方法,从中可以概括该领域的局部结果。此外,我们讨论和批评Dehnadi和Bornat的编程能力测试,并设计替代测试工具。
可以对抽象能力或其他有用的知识进行研究,但是编程的定义尚不清楚,而且我认为引用是无关紧要的,因为有相反的方式可以查看编程:
第一类:编程语言是(或应该是)某种人类语言,用来描述计算机要执行的任务,因此,每个说话的人都应该能够编程。它被称为脚本,BASIC,排版系统TeX等...语言或系统无关紧要,这是他们的创建者和人们看待它的方式:“亲爱的程序/计算机,请打印我的名字”,而不是“为我提供11个字符大小的空间,然后给我这个空间的地址,然后让我存储它,然后在该内存中输入11个字符,您可以从键盘缓冲区中取出该字符(但不要忘记清理它)等等。”
在这种情况下,很明显该研究宁愿是“不是所有语言都可以很快被吸收吗?”。
另一方面,编程语言只是描述计算机的工作方式或工作方式,以及1950年代的计算机应如何“连接”的一种方式。因此,即使程序员的智能不能达到这个抽象级别,即您看到字节beeing存储在内存中,字符串作为指针等,然后即使他或她的“智能”说得很好,程序员也不会做任何事情。回到地球,将其与问题联系起来。因此,并非每个人都可以编程(使用汇编语言...)。
除此之外,您将需要工作和产生某种东西所需的所有素质:非常了解您想要的东西,使其他人易于理解/完成/审查,专注于您的目标等。但是就像建筑师一样,作家,音乐家,妓女..aehh义肢等。
但是大多数人,特别是儿童,具有良好的抽象能力。一些德国学校正在向未成年的孩子教授Haskell(每所德国学校都在教诸如Pascal或Delphi之类的编程语言)。
因此,我想说这个问题很难回答,任何答案(或研究)都可能无关紧要。
您将在 Peter Norvig的《十年内自学编程》一文中找到有关人们如何学习编程的非常简短的分析。他似乎认为没有天生的程序员。
许多年前,我做了几门课程,其中包括军事领导理论。该理论的一部分是,存在着一个领导力连续体,从那些天生的领导者到那些不能用皮带牵引狗的人。这个想法是,人们按照钟形曲线分布在这个领导连续体上,大多数人处于两个极端之间。除了极少数“不能带领狗”的极端情况外,几乎每个人都可以学会领导艺术。使某人成为领导者所需的工作量取决于他们坐在连续体上的位置。
我怀疑编程具有相似的连续性和相似的分布。有些人会毫不费力地获得它,而如果他们的生活依赖它,那将永远无法获得它。但它们是钟形曲线末端的少数几个。大多数人坐在连续体的极端之间。他们可以学习编程,但是教他们所需的精力将取决于他们坐在连续的地方。
我不确定这只是编程。在人们只是学习使用计算机的情况下,我看到了相同的现象。回到大学时,我曾是一家实验室的实验室助理,负责为高年级学生提供计算机知识。
在两周之内,我就可以确定那些将要得到它的人和那些根本不能100%准确地找到它们的人。您要么承认这是计算机的工作方式,要么在整个课程中都为之奋斗。没有中间立场。(事实上,这是一个高年级课程,这意味着我们有很多反对者,这使得这种模式更加明显。)