许多程序员坚持的一句古老谚语是:“学习编程需要某种心态,但并不是每个人都能做到。”我们自己的轶事证据库,但是对此进行了科学研究吗?

评论

听起来像是一个很好的怀疑论者问题。

学习如何编程与实际成为一名有价值的程序员大不相同。编程在大多数情况下非常简单。阅读规格书,相应实施。测试。重复。是的,每个人都可以成为程序员。并非每个人都能成为有价值的程序员。特别是某些任务比其他任务需要更多的思考和实验。这样的事情最好留给真正喜欢这样做的人。一个示例可能是实现低级构造,不使用任何现代programmig工具或任何东西来计数时钟周期,位和字节。并非每个人都能解决。

@zxcdw-我并不是真的在问“不是每个人都可以成为优秀/有价值的程序员”。这是给定的,因为“几乎每个人都不可能成为一个好/有价值的X”对于X的几乎任何价值都是一种普遍真理。我要问的是能够学习编程并为普通人缠住头的能力。

每天在程序员
上都证明了这句话是正确的
我认为这个问题的实质不是程序员的素质,而是更多的是“每个人都可以接受培训以使用非人类语言解决问题并提出逻辑上正确的解决方案”,我有时认为这不是每个人都可以做的事情。设计逻辑来指示非人类机器基于非物质的行为的概念非常抽象,这一抽象级别要求一个人能够在心理上遵循许多逻辑上的间接指示,因为您无法触及每一个产品用双手踩。

#1 楼

另一项研究,调查初学者程序员所拥有的心理模型的可行性:


本文描述了对Java编程第一年末初学者所使用的心理模型的可行性的调查课程。定性的发现确定了参与者所持有的价值观念和参考分配的心理模型的范围。定量分析表明,大约三分之一的学生持有价值分配的不可行心理模型,只有17%的学生持有参考分配的可行心理模型。此外,通过比较参与者的心理模型与他们在课程评估和期末考试中的表现,发现具有可行的心理模型的学生的表现明显好于没有可行的模型的学生。这些发现被用来提出一种基于“认知冲突”和程序可视化相结合的更“建构主义”的教学方法。绵羊与山羊研究(尚未明确发表)。他们在2009年以来关于该主题的最新研究是对一致性对编程早期学习成功的影响的元分析(pdf)。


设计了一个测试,该测试显然检查了学生在编程的第一门课程之前的作业和顺序知识,但实际上旨在捕获他们的推理策略。实验发现了两个截然不同的学生群体:一个可以建立并始终如一地应用程序执行的心理模型;另一个似乎无法建立模型或无法始终如一地应用模型。就成功或失败而言,第一组在课程结束时的考试成绩要好于第二组。该测试不能非常准确地预测性能水平,但是通过结合该实验的六次重复(在英国重复五次,在澳大利亚重复一次)的结果,我们证明了一致性确实对早期学习编程的成功有很大影响-但是另一方面,后台编程经验几乎没有效果。


评论


“ ...第一年Java编程课程...” <-我发现了您的问题。

–琼·加洛韦(Jon Galloway)
2012年9月25日下午4:34

博尔纳特(Bornat)除了收回原始论文外,还讨论了重现2009年结果的尝试-对我来说,这似乎并不令人鼓舞:

–布莱布莱德
15年3月15日在0:06

如上所述,与此相关的原始文件已撤回:retractionwatch.com/2014/07/18/…

–海绵宝宝
2015年12月21日在5:28

#2 楼

是的,在线上有一篇非常有名的论文,旨在或多或少地确定“谁被选为程序员。”
所有程序设计老师都发现他们的成绩显示出“双重
驼峰”。好像有两个人群:可以编程的人
和不能编程的人,每个人都有自己独立的钟声

几乎所有对编程教学的研究和学习
专注于教学:更改语言,更改应用程序区域,使用IDE并进行激励。它们都不起作用,
双峰仍然存在。
我们有一个测试,可以在课程开始之前挑选出可以编程的人群。我们可以将
双峰分开。您可能不相信这一点,但是您会在
听完谈话之后。我们不知道确切如何/为什么起作用,但是我们有一些很好的理论。

尽管自1950年代发明电子计算以来发生了巨大的变化,但某些事物仍然顽固地保持不变。特别是,大多数人不会学习编程:每个大学计算机科学系的30%到60%的入学率都不是第一次编程课程。 br忘了这个事实;聪明的初学者,他们相信旧的
一定做错了,从痛苦的经验中学到真相。自从1960年代开始研究这个主题以来,已经有近两代人了。


评论


公平地说-这项研究证明,学校录取的30-60%的人不会为做任何工作而烦恼。所有学科和所有时间都是如此!

–马丁·贝克特(Martin Beckett)
2012年9月4日17:39

这是一篇非常有趣的论文,它确实支持了并非所有人都被编程的想法。不幸的是,作者后来的工作(也在链接页面上)显示,他们的测试没有最初想象的那么可预测。 “我们不能声称要把正在编程的山羊与没有编程的绵羊分开……不幸的是,结果并没有达到最初的承诺,但是还没有完全关闭我们的勘探大门。”

– AShelly
2012年9月4日在17:40

需要明确的是,2006年的第一篇论文只是草稿,从未发表过。因此,它并没有经过科学审查。也许最好在作者页面上查看以后的研究。

–杰夫·阿特伍德
2012年9月4日18:26



研究学术课程中的成功是研究这种现象的一种怪异方法。首先,讲座可能是最不适合教授编程的方法。其次,并不是每个人都从讲座中学到(好)的东西。那里的设计对我来说太过偏颇了。

–拉斐尔
2012年9月5日下午12:36

博尔纳特教授后来不愿主动撤回该草案,因为当时他的心理健康问题。 eis.mdx.ac.uk/staffpages/r_bornat/papers/…此外,我对第二节的阅读。第三点是其他人未能复制该结果-正如他们所说,即使是2009年的荟萃分析结论也“至少受到文化环境和教育实践的影响”。总的来说,我最好的猜测是这门课程很糟糕,这并不奇怪,因为“如何有效教授编程”是一个研究问题。

–布莱布莱德
15 Mar 15 '15 at 0:04

#3 楼

任何人都可以成为程序员。考虑人们如何轻松地掌握电子表格。考虑一下艾伦·凯(Alan Kay)在可编程环境中通过实验和探索的方式将孩子介绍给编程的可能性。 。但是,这样的结论严重超越了所观察到的证据的范围。相反,多少失败可以归因于如何教授编程(太抽象?),或者教导哪种编程风格(太命令?)或编程环境(编译,没有即时反馈?)。

众所周知,人们已经在使用多个具体实例后最容易掌握抽象-即,我们要学习到几乎已经知道的知识。因此,从抽象开始是教授编程的完全愚蠢的方式。如果在更具体的环境中接受实时反馈(例如,在卡恩学院的CS中)进行教学,然后鼓励他们准备好抽象的阶梯,那么许多迷失了误解的“心理模型”的人就会壮成长。可学习编程是Bret Victor最近发表的一篇文章,提请人们注意程序员在学习中面临的不必要的环境挑战。

在某些情况下,是学生不能上课。智力懒惰和故意的无知将存在于任何一大群人中。聪明的人也不例外,任何以出色的曲柄争论的人都可以证明。但是,尤其是对于编程和数学,往往是班级让学生不及格。

评论


我认为几乎任何人都可以像学习基础音乐一样学习基本的编码。但是,以此为生是另一回事。例如,我喜欢弹吉他,但我不会很快去多城市体育场巡演或出现在大型录音室专辑中。

– jfrankcarr
2012年9月4日19:33

看一下Serg的答案中链接的论文。即使并没有像他们最初想象的那样清晰,事实是,即使经过一两个月的课程,有些人还是无法将最基本的编程概念束之高阁,例如:x = 1; y = x;问题是“ x和y的值是多少?”

–伊兹卡塔
2012年9月4日19:43



你好,欢迎光临!您可能不知道这一点,因为您很新,但是我们真的不喜欢开放式和/或讨论型问题。我删除了“不是每个人都可以学习如何编程吗?”是真的吗?从问题的角度来看,我们经验丰富的成员忽略了该问题,意识到该问题不符合我们的准则,而是将答案集中在问题的研究/科学方面。你能做同样的吗?

– yannis
2012年9月4日19:51

@jfrankcarr-专业或竞争水平的任何技能,都将使许多从业者落伍。大多数人甚至不能说或写自然语言。

–垃圾
2012年9月5日在6:10

@Izkata-Serg链接的论文具有可疑的科学价值;任何教学水平差的班级都可以得到类似的结果:已经了解该主题的人做得很好。关于示例问题:更常见的是假设命令式语义的问题,这些问题肯定不是直观的。如果您不能假设没有并发,您甚至可以回答自己的问题?

–垃圾
2012年9月5日下午6:17

#4 楼

也许这是轶事,但是当我向数百名文科学生教授入门编程时,我发现没有这种“双峰”。 br />和极少数人试图虚张声势。

这与教法有很大关系。

许多也与欲望有关-有些人觉得编程没什么意思。
即使这样,只要他们付出诚实的努力,他们仍然可以学习。

评论


我经常想知道欲望在哪里发生,我们都知道编程对于绝大多数普通百姓来说完全没有兴趣,这使我想知道有多少人尝试以钱换钱,但让普通人完全缺乏兴趣,电脑工作。

–吉米·霍法(Jimmy Hoffa)
2012年9月5日,下午3:46

@Jimmy:我试图通过让他们进行有关游戏,科学,金融,音乐等个人项目的有趣项目来使其变得有趣。编程是达到目的的一种手段,它会变得更加有趣。

–迈克·邓拉维(Mike Dunlavey)
2012年9月5日在11:51



@Den:好吧,他们必须做一些小作业来做小程序,进行测验和测试,而且每个人都必须做一个重要的个人编程项目,所有这些我都给我评分。该课程是必需的。

–迈克·邓拉维(Mike Dunlavey)
2012年9月5日在11:54



@MikeDunlavey学生总是有可以编程的朋友,可以很容易地欺骗家庭作业。

–苏丹
2012年9月15日下午0:43

@Sulthan:不在我班上,他们没有。有些尝试过。有些人在测试中尝试从其他人那里复制。很明显-代码太像别人的代码了,同时还包含明显的错误。对于项目而言,没有两个人是一样的,没有什么比在测验和家庭作业中做得平庸但能完成一个漂亮项目的人举起了红旗。我只是再做一个测试,然后交给他们。如果他们显然不知道前进的方向,则我没有义务给他们打好分数。或者,我可以请另一位教授。

–迈克·邓拉维(Mike Dunlavey)
2012年9月15日15:36

#5 楼

当我刚开始时,通常在进行编程工作之前先进行“能力测试”。计算机科学专业的毕业生人数不多,因此从其他学科招聘人才是很普遍的。 。

轶事证据是,虽然并非所有通过测试的人都成为了一名优秀的程序员,但没有一个未通过测试但由于其他原因而被雇用的人成为了一名优秀的程序员。 />可悲的是HR无人机不了解这些测试(并在接受测试时失败!),因此,如今的招聘取决于HR无人机所了解的东西-良好的大学,沟通和穿西装的技能。很大程度上是大型IT部门拥有很多在PowerPoint演示中都很出色的人,而很少有好的程序员的原因。

评论


+我非常感激,以至于我从未(几乎)不必经历HR。

–迈克·邓拉维(Mike Dunlavey)
2012年9月5日下午14:10

#6 楼

对于那些引用Dehnadi和Bornat的双峰或山羊对羊的研究的人来说,值得一试的是Caspersen等人(2007年)尝试复制的心理模型和编程能力:


预测参加入门课程的学生的成功情况
25多年来一直是活跃的研究领域。直到最近,还没有变量或检验具有任何显着的预测能力。但是,Dehnadi和Bornat声称找到了一个
简单的编程能力测试,可以将编程的绵羊与非编程的山羊完全分开。我们简要介绍了他们的理论和测试工具。

我们在本地环境中重复了他们的测试,以验证
并推广他们的发现,但是我们无法证明
测试可以预测学生在我们的入门编程课程
中的成功。

基于测试仪器的这种失败,我们讨论了不同的各种解释
结果,并提出一种研究方法
,从中可以概括该领域的局部结果。此外,我们讨论和批评Dehnadi和Bornat的编程能力测试,并设计替代测试工具。


#7 楼

可以研究抽象能力或其他有用的知识,但编程的定义尚不清楚,我认为引号无关紧要,因为有相反的方式查看编程:

第一种:编程语言是(或应该是)某种人类语言,用来描述计算机要执行的任务,因此,每个说话的人都应该可以编程。它称为脚本,BASIC,排版系统TeX等...语言或系统无关紧要,这是他们的创建者和人们看待它的方式:“亲爱的程序/计算机,请打印我的名字”,而不是“为我提供11个字符大小的空间,然后给我这个空间的地址,然后让我存储它,然后在该内存中输入11个字符,您可以从键盘缓冲区中取出它(但不要忘记清理它等。“

在这种情况下,很明显,研究宁愿是“不是所有语言都可以快速被同化吗?”。

另一方面,编程语言是只是描述计算机工作方式或工作方式的一种方式,如果您想到的是1950年代的计算机,则应如何“连接”,因此,即使程序员完全“说”了编程语言,程序员也无能为力。他/她的智能无法达到此抽象级别,在该级别您会看到字节beeing存储在内存中,字符串作为指针等,然后返回地球将其链接到问题。因此,并不是每个人都可以编程(使用汇编语言...)。

除此之外,您将需要工作和产生某些东西所需的所有素质:非常了解您想要的东西,使其易于使用其他人可以理解/完成/审查,专注于您的目标等等。但是就像建筑师,作家,音乐家,妓女..aehh义肢等,

但是大多数人,特别是儿童,具有良好的抽象能力。一些德国学校正在向未成年的孩子教授Haskell(每所德国学校都在教诸如Pascal或Delphi之类的编程语言)。

所以我想说这个问题很难回答,任何答案(或研究)都可能是无关紧要的。人们在Peter Norvig的“十年内自学编程”一文中学习编程。他似乎认为没有天生的程序员。

评论


你好,欢迎光临!我对您的答案如何回答这个问题感到困惑,这实际上与是否已经研究过有关……

– yannis
2012年9月4日20:15在

抱歉,我搞砸了“发送”按钮...我希望这更有意义

–伊夫
2012年9月4日20:52

您走在正确的道路上,但是将编程语言与硬件(计算机)紧密地联系在一起。编程不仅是与计算机对话的能力。编程是关于以一致的方式描述过程。将过程描述给其他人类似于使用高级编程语言对其进行编码。最大的不同是人类对歧义的容忍度更高。

– Orionii皇帝
2012年9月5日于13:24

我不捍卫这种观点,而是试图指出一个事实,人们倾向于看到编程语言及其应作为任务描述的用途(这对高级编程和脚本编制很重要),或者作为“计算机进程”的描述(例如,即使是编程语言,低级语言似乎也更接近VHDL建模语言而不是VB.NET)。这两种方法非常不同,但是同一枚硬币的两个方面。他们坚持难以量化的人类智力的不同方面。因此,很难研究它们。

–伊夫
2012年9月6日上午10:01

#8 楼

许多年前,我做了几门课程,其中包括军事领导理论。该理论的一部分是,存在着一个领导力连续体,从那些天生的领导者到那些不能用皮带牵引狗的人。当时的想法是,人们按钟形曲线分布在这个领导连续体上,大多数人处于两个极端之间。除了极少数“不能带领狗”的极端情况外,几乎每个人都可以学会领导艺术。将某人转变为领导者所需的工作量取决于他们坐在连续体上的位置。

我怀疑编程具有相似的连续体和相似的分布。有些人会毫不费力地获得它,而有些人如果生活依赖它就永远无法获得它。但是它们是钟形曲线末端的少数几个。大多数人坐在连续体的极端之间。他们可以学习编程,但是教他们所需的精力将取决于他们坐着的连续性。

评论


我看到许多人没有正确地用皮带牵引狗。我曾经能够在没有皮带的情况下to狗,即使在城镇也是如此。我一直想知道为什么人们不介意狗。

–user251748
17年3月20日在18:28

#9 楼

我不确定这只是编程。我看到人们只是学习使用计算机,就出现了同样的现象。回到大学时,我曾是一个实验室的实验室助理,负责为高年级学生提供计算机知识。

两周之内,我就能找到那些能做到这一点的人和那些不会做到这一点的人。您要么接受了这就是计算机的工作方式,要么在整个课堂上都为之奋斗。没有中间立场。 (事实上​​,这是一个高年级课程,这意味着我们有很多反对者,这使这种模式更加明显。)