acm-header
登录

ACM通信

教育

“编程很难”到底是什么意思?是关于谁的?


手握键盘输入代码

信贷:RedPixel.pl

通常认为编程天生难做的想法缺乏足够的证据。陈述这一信念可以传递出有影响力的信息,可能产生严重的意外后果,包括不公平的做法。4此外,这种观点通常是建立在对全世界学习者的不完全知识的基础上的。更多的研究需要包括各种各样的多样性,包括但不限于能力、种族、地理区域、性别认同、本土语言、种族和社会经济背景。

语言是一个强大的工具。说编程是困难的应该会引起几个问题,但很少会这样做。为什么说这样一个笼统而明确的声明似乎总是可以接受的——可以说是时髦的——呢?为什么这些说法往往没有证据支持?从广义上说,编程是固有的困难,或者比数学中的微积分等可能的类似物更难的经验证据是什么?即使有这样的证据,在实践中又意味着什么呢?它在什么情况下成立?它适用于谁,不适用于谁?

计算机科学享有盛誉3.这次谈话就是其中的一部分。编程本身就很难吗?虽然这个观点值得讨论,但它并没有明确地回答这个问题。它与语句比如“编程很难”,尤其是直接和间接的消息这样的声明可以传达。它探讨了是谁这么说的,为什么这么说,怎么说的,以及后果是什么。考虑一下这句话“计算机编程可以变得更容易”。7尽管这意味着编程可能比它需要的更困难,但它显然传递了与“编程是困难的”不同的信息。这说明了两个非常相似的语句如何传达截然不同的信息,并可能产生不同的效果。

回到顶部

谁说编程很难?

编程很难的观点似乎在教师和研究人员中广为流传。4学术论文经常说编程是困难的,似乎只是在陈述显而易见的事实。然而,除了激励和证明研究之外,它很少被讨论。虽然这种方法很少受到挑战,但一旦受到挑战,风险就很高。一名批评人士指出,这种立场可能导致不加批判的教学实践、糟糕的学生结果,并可能对多样性和公平性产生负面影响。4这项工作表明教育工作者的期望是不现实的——并不是编程太难。

困难的信息也通过更多的日常机制传递。它可能在不知不觉中或无意中通过我们的教学习惯、教科书语言、术语、教室里的防御气氛、3.工具和编程语言本身。一个恰当的例子是编程错误消息,几乎在所有语言中,它都因引起困惑、沮丧和恐吓而臭名昭著,并被描述为神秘和不可思议。1

编程是困难的这一信念并不局限于学术界。“10倍开发人员”的概念——难以捉摸的开发人员比其他人的生产力高10倍——旨在传达编程是困难的,很少有人能擅长它。就连专业人士也将编程视为一种魔法,8至今仍有一些人持这种观点。好莱坞的角色都是典型的黑客形象,他们盯着屏幕,而1和0快速流过,将编程描述为一种神秘的超自然能力。除了娱乐价值之外,也有可能产生负面影响。

回到顶部

已知的困难和被忽视的成功

更准确地说,编程的某些方面比其他方面更困难或更具挑战性。这大大削弱了编程天生困难的概念,因为许多努力的某些方面比其他方面更困难。更尖锐的言论也不太可能对普通观众造成附带损害,也不太容易被误用。编程中被认为具有挑战性的方面包括知识转移问题——包括负转移——以及开发一个概念机器等等。3.编程有几个候选阈值概念5但许多学科的某些方面也是如此。

编程也是许多误解的主题。5这可能是因为它很难。另一方面,说这很难可能是解释这些误解的一种方便的方式。其他(通常是更老的)学科也面临着误解的挑战。许多学物理的学生纠结于力学的基础知识,比如力与加速度、速度与速度、重量与质量以及惯性的概念。这样的比较并不是那么间接。这些成熟的概念在许多实践中支撑着一种更加公式化的方法,类似于编程的概念基础最终是如何在代码中表达的。工程学也会受到刻板印象的影响。数学难的观点已经在许多学校系统中存在,经常得到家长和其他利益相关者的响应,导致了负面影响,包括反对扩大参与。然而,计算在现代社会中撒下了一张非常广泛的网;它与许多日常生活交织在一起,在许多方面影响着成功的机会。 Similar could be said for mathematics but computing may seem more visible and tangible to many. It is also a very attractive and in demand career path for tomorrow's graduates.


编程很难的观点似乎在教师和研究人员中广为流传。


有一些例子可以支持编程并不困难。结对编程、同伴指导、工作示例、游戏和情境化方法(如媒体计算)都取得了成功。3.这些通常都有经验证据的支持5但在方便的时候却经常被忽略。基于块的编程已经变得非常成功,尤其是对年幼的孩子。新的模式也表明,计算是相对年轻和快速变化。这种变化的速度本身可能是导致编程困难的主要因素之一。

回到顶部

为谁?

考虑到有多少人受到计算机技术的影响,“编程很难”这一说法的另一个问题是,大多数研究和媒体报道都是基于非常狭窄的地球人口样本——主要来自美国、英联邦和欧洲。有些国家、几乎整个大陆和无数群体的经验没有得到严格的研究和对比。即使在研究比较频繁的地区,我们目前的观点也不能代表很多人。这一点很少被承认或采取行动。在各种形式的多样性和身份方面,包括能力、文化和种族、地理、性别、母语、种族、社会经济背景,以及许多其他亚人口仍然没有得到充分代表,到处都是。

此外,目前大多数数据和经验来自计算机专业的学生,但计算机正迅速成为嵌入学校课程的主流学科,并在越来越多的高等教育学科中得到应用。5宣称编程对于资源相对充足的西方计算机专业学生来说很难,这对其他人来说是一种暗淡的景象。即使编程对这些学生来说是特别困难的,这一发现也可能只适用于非常有限的、有偏见的样本,而这些样本有助于我们当前的知识。草率地试图概括这样的发现,只会把那些还没有经验的人拒之门外。实际上,当编程是困难的信息在很少或没有上下文的情况下被永久保存时,这种实践已经发生了。

回到顶部

影响

有几个例子表明,在计算机教育中对观察结果的解释产生了意想不到的负面影响。例如,为了解释那些坐在成绩优异的学生旁边的学习困难的学生,“极客基因”假说被证明很方便。这说明编程是一种与生俱来的能力。换句话说,一个人通常不可能通过学习成为一个伟大的程序员;有一个是或不是,大多数都不是。有证据表明,计算机科学家认为,在计算机领域,先天能力比其他学科更重要,这被认为是扩大参与的障碍。3.虽然极客基因假说遇到了阻力3.8损害已经造成,可能还会继续。

我们不需要寻找其他当代的例子,意外消息产生了不希望的影响。最近的一项调查显示,大学级计算机专业的竞争招生政策对学生的归属感、自我效能感和院系感知产生了负面影响。6当然,这些都不是预期的结果。入学竞争很大程度上是对学生人数增长和需求无法满足的反应。然而,这种机制向学生传递了一个意想不到的信号,导致了不良后果。编程是困难的这一信息的延续很可能有类似的影响。

最近的一系列NSF研讨会揭示了非计算机教育者在讨论计算机课程时最常听到的评论之一是“不要让计算/编程看起来很可怕”。2这真的是我们想要描绘的形象吗?还是仅仅是计算机文化的副产品?如果教育者认为编程是可怕的,我们怎么能期望学生有不同的想法呢?这些信息可能已经导致无数学生放弃使用计算机,或者一开始就不考虑使用计算机。我们永远不会知道。很可能已经发生了无法估量的损害,并在继续累积。

回到顶部

未来

相对较短的编程历史充满了不断的变化,所教授的内容也经常发生变化。3.总的来说,基于字符的高级编程在大学和工业中引领了采用的战争,但是有很多编程的例子不符合这种模式。从Logo和Hypertalk,到原型语言编程语言,到基于块的编程,以及特定于领域和任务的编程,编程的具体构成取决于被询问的对象和被询问的时间。今天,低代码和无代码正在出现编程模式,这是构成编程的不断变化的另一个迹象。非计算环境中的程序员数量也在迅速增加。1当然,即使编程在昨天被认为是困难的,这并不意味着它在明天会是困难的。

我们怎样才能改变编程的恶名?答案可能是多方面的,包括意识到我们持有的信念和我们传递的信息的真正影响。此外,这些建议应以证据为基础,并由适当多样化的人提供信息。我们应该对学生有现实的期望,关注那些我们知道在实践和我们的信息中都是成功的,包括检查关于这个问题的声明的意图。

回到顶部

结论

“编程是困难的”这一概念在我们的教室、工作场所、学术文献和媒体中经常得到强化。然而,这一立场往往反映的是意识形态观点,缺乏充分的证据。“编程很难”的说法可能会产生明显的直接后果。然而,它们也可以传递更间接的信息——实际上,它们发出的信号可能会对学生、教育工作者、社区和计算学科本身产生意想不到的后果。这些很少被考虑。

编程难不难?目前的证据不足以令人信服,也不足以多样化地回答这个问题。更合理(也可能是诚实的)的回答是:“视情况而定”或“两者都有”。那么,为什么大家都说这很难呢?因为没有足够的证据来支持它,所以它经常被当作趣闻吗?因为确实存在的证据很难理解?会不会是它对激励和证明工作太方便了?是许多人有意还是无意地想让编程看起来很困难?科技公司和招聘经理是否依赖于编程严格而精英的形象?对于那些真实的解释仍然难以捉摸的现象,用它来解释是不是太方便了? Is it just an easy excuse for failure? Perpetuating this belief only serves to reinforce a shaky base of evidence that undermines any more rigorous evidence-based research. If we are going to make claims on the difficulty of programming, the community has a duty to provide robust empirical evidence from diverse contexts and state the findings responsibly.

最近许多时事和社会政治现实使我们对我们的教育实践产生了质疑。考虑到目前的全球环境,笼统地说“编程是困难的”似乎过时了,没有效率,最多可能没有帮助。在最坏的情况下,它们可能真的有害。我们需要停止指责编程难,而是专注于让编程对每个人来说更容易上手、更有趣。

回到顶部

参考文献

1.学士贝克尔等人。被认为没有帮助的编译器错误消息:基于文本的编程错误消息研究前景。在计算机科学教育创新及科技工作小组报告的会议记录(英国苏格兰阿伯丁)(ITiCSE-WGR’19)。ACM,纽约,纽约,2019,177-210;https://bit.ly/2T97WUT

2.Birnbaum, L. Hambrusch, S. and Lewis, C.。报告CUE。下一个车间。技术报告(2020);https://bit.ly/3x8ev8Q

3.以学习者为中心的计算机教育设计:人人使用计算机的研究。以人为中心的信息学综合讲座, 6(2015), 1-165。

4.学习编程很容易。在2016年ACM计算机科学教育创新与技术会议论文集(阿雷基帕,秘鲁)(ITiCSE’16)。ACM,纽约,纽约,2016,284-289;https://bit.ly/3ivrKfM

5.Luxton-Reilly, A.等人。介绍性编程:系统的文献回顾。在23的程序同伴理查德·道金斯计算机科学教育创新与技术年度ACM会议(塞浦路斯拉纳卡)(ITiCSE 2018 Companion)。ACM,纽约,纽约,2018,55-106;https://bit.ly/3v1D9qh

6.Nguyen, A.和Lewis, C.M.计算机系竞争招生政策负向预测一年级学生的归属感、自我效能感和系感。在51号法律程序美国计算机学会计算机科学教育技术研讨会(波特兰,OR,美国)(SIGCSE '20)。ACM,纽约,纽约,2020,685-691;https://bit.ly/2TTr3Tl

7.Sime,法医,Arblaster, a.t.,和Green, T.R.G.,组织程序员的任务。职业心理学杂志, 3 (1977), 205-216;https://bit.ly/3w4NNxL

8.从巫术到学校科目:计算机教育对地位的追求。在2020年ACM计算机科学教育创新与技术会议论文集(特隆赫姆,挪威)(ITiCSE’20)。ACM,纽约,纽约,2020年,3-4年;https://bit.ly/3v436po

回到顶部

作者

布雷特a·贝克尔brett.becker@ucd.ie)是爱尔兰都柏林大学学院计算机科学学院的助理教授。


版权归作者所有。
向所有者/作者请求(重新)发布许可

数字图书馆是由计算机协会出版的。版权所有©2021 ACM, Inc。


评论


亚历山大Repenning

亲爱的布雷特,

谢谢你的刺激观点。一个问题。你的结论是,我们需要停止指责编程是困难的,并专注于使编程更容易和愉快,对每个人来说,这不是计算机科学教育领域(例如,Logo)已经做了至少50年吗?

为什么编程需要简单?观察孩子们玩电子游戏的过程。不是因为它们容易,而是因为它们难。Papert称这是一种艰难的乐趣。我们应该看看认知easy/hard光谱的不同极端。有一个小时的代码类型编程,经验集中在扩大参与度和乐趣。然而,还有9999个小时才能达到10000小时(大众科学)的真正专业水平。达到1小时的目标可能并不难,但对于1万小时的目标来说,这意味着什么还不清楚。

这种观点的一个问题是它过于关注认知挑战。当我开始我们的研究采访一个中学女孩关于她对编程的看法,她说编程是艰难和无聊的。注意,除了让编程变得困难的认知挑战之外,编程变得无聊也是同样重要的情感挑战。这不是一种权衡。学生、教师、家长和21世纪的公民一般都没有充分认识到编程的投资回报。我为什么要写一个程序来计算无聊的质数呢?更普遍地说,编程技能背后令人信服的工具动机是什么?有些人找到了答案,但很多人没有。这没问题。

虽然从整体上看,你的观点表明编程的负面看法有些悲观,但从一个方面来看,当你认为基于块的编程已经变得非常成功,特别是对年幼的孩子来说,这可能是过于乐观了。基于块的编程真的让编程变得简单了吗?在过去的25年里,我们试图通过引入基于模块的编程(如AgentSheets)和制作基于游戏设计的课程(如Scalable Game Design),将编程作为一种二维研究空间,从困难和枯燥过渡到容易和令人兴奋。虽然我们确实发现编程变得更容易上手,游戏设计具有广泛的吸引力,但基于区块的编程的影响通常被高估了。基于块的编程消除了一个使编程变得困难的重要障碍(语法)。但是,就像拼写检查不能自动地把每个人都变成一个成功的作者一样,语法可能是我们目前能够从编程中消除的最小的挑战。这有点像想要攀登珠穆朗玛峰。当你从家乡飞到加德满都时,你可能已经走了很长一段路(就像语法一样),但真正的挑战还在你面前。让编程变得更容易上手和更有趣是关于开始真正的攀登。它是关于创建新一代的工具和教学策略,以支持编程的语义甚至语用学。

一切顺利,亚历克斯

亚历山大Repenning
科罗拉多大学博尔德分校和瑞士PH FHNW


丹·萨顿

编程并不难:它要么是显而易见的,要么是不可能的,这取决于你是谁。在过去四十年的编程生涯中,我的观察让我相信编程的能力是与生俱来的:你不能教别人拥有它——他们要么有,要么没有:这是一种特定类型的疯狂。

你不能教一个人编程:你只能向他们展示语法及其工作原理——过了这个阶段,他们要么会编程,要么不会。编写一个生成质数的程序,要么令人着迷,导致一种深深的满足感,要么不是。我们不可能让它变得迷人;我们不可能让玩家从坐在屏幕前,连续数小时沉迷于同一个深奥的概念中获得乐趣;我们不可能让一个人的大脑像一个程序员的大脑那样,以一种特殊的横向但又理性的精神分裂类型来运作:横向思维的艺术与理性思维的科学相融合:编程是唯一一种具有明确的正确和错误答案的艺术形式:为了抓住理性的想法,抛弃你的非理性思维。

程序员不会坐在那里,试图让一台机器执行一项任务:他坐在那里,向一个朋友解释他脑子里在想什么——这个朋友有一部分是电脑,但主要是他自己(因此得了精神分裂症),电脑只是一个曼荼罗,让他适当地集中思想。

简而言之,通过编写十行测试程序作为课堂练习,一个人要么会编程,要么不会:他们的大脑要么这样工作,要么不这样——在他们遇到计算机或编程语言之前很久。


布雷特贝克

嗨,亚历克斯,

谢谢你的评论。我确实觉得计算机教育界已经努力了很长一段时间,让编程变得更容易和有趣。然而,还有很多工作要做,社区应该偶尔检查和质疑进展,以便尽可能地继续下去。编程应该是简单的吗?它需要简单吗?应该很难吗?需要有难度吗?所有这些问题都可以用来调查我们的进展和意图。它们可能永远不会给出一致的答案,但它们仍然有助于我们判断事情的现状和我们的方向。

我确实认为基于块的编程能够成功地吸引许多更年轻的学生,并降低一些进入门槛。也许对于这个问题有一个很好的答案:编程到底难不难?两者都是。有许多敬业的专业人员投入了大量的精力、知识和经验来构建安全、可靠、高效、安全且通常非常复杂的代码。这并不容易,需要大量的学习才能做到这一点。有许多老师、导师和同事在教育方面投入了大量的工作。所有这些人都曾经是某种程度的学生,即使是自学的。这一切都需要社区,有这么多充满激情的人在计算领域,这是一件很棒的事情。

我同意,让编程变得更容易上手、更有趣是攀登的开始。我希望初学者在开始他们的旅程时不会感到不必要的沮丧,我当然不希望他们在开始之前就感到沮丧。当然,每段旅程都是不同的,每个人开始攀登的方式也会有所不同。

再次感谢,

布雷特贝克
都柏林大学学院


显示3评论

登录为完全访问
»忘记密码? *创建ACM Web帐户
文章内容:
Baidu
map