作者:ACM 的 Brett A. Becker 通讯,2021 年 8 月,卷。 64 No. 8, Pages 27-29 10.1145/3469115 评论 (1) 普遍认为编程天生就难的观点缺乏足够的证据。表达这种信念会发出有影响力的信息,这些信息可能会产生严重的意外后果,包括不公平的做法。 4 此外,这一立场通常基于对世界学习者的不完整知识。更多的研究需要包括更多种类的多样性,包括但不限于能力、种族、地理区域、性别认同、母语、种族和社会经济背景。语言是一种强大的工具。说编程很难应该会引起几个问题,但很少有。为什么做出如此笼统和明确的声明似乎是可以接受的——可以说是时尚的?为什么这些陈述通常没有支持证据?从广义上讲,编程本质上是困难的,或者比数学中的微积分等可能的类似物更难的经验证据是什么?即使该证据存在,在实践中又意味着什么?它在什么情况下成立?它适用于谁,不适用于谁?计算机科学享有盛誉 3,这次谈话就是其中的一部分。编程本身就很难吗?虽然值得讨论,但本观点并不关心明确回答这个问题。它涉及诸如“编程很难”之类的陈述,尤其是此类陈述可以传达的直接和间接信息。它探讨了这句话是谁说的,为什么说以及如何说,以及后果是什么。考虑“计算机编程可以变得更容易”这句话。 7 虽然这意味着编程可能比它需要的更困难,但它显然传达了与“编程很难”不同的信息。这说明了两个相当相似的陈述如何传达截然不同的信息并可能产生不同的效果。教师和研究人员似乎普遍认为编程很难。 4 学术论文经常说编程很难,好像只是在陈述显而易见的事情。然而,除了激励和证明研究之外,它很少被讨论。尽管这种方法很少受到挑战,但一旦受到挑战,风险就很高。一种批评指出,这种立场可能导致不加批判的教学实践、糟糕的学生成绩,并可能对多样性和公平产生负面影响。 4 这项工作表明教育者的期望是不切实际的——并不是说编程太难了。困难的信息也通过更多的日常机制来传递。它可能会在不知不觉中或无意中通过我们的教学习惯、教科书语言、术语、我们教室中的防御气氛、3 种工具和编程语言本身而永久存在。一个典型的例子是编程错误消息,在几乎所有语言中,这些错误消息因引起混乱、沮丧和恐吓而臭名昭著,并且被描述为神秘和高深莫测。 1 认为编程很难的信念并不仅限于学术界。 “10 倍开发人员”的概念——难以捉摸的开发人员的生产力是其他人的 10 倍——用于传达编程是困难的,很少有人能擅长它。甚至专业人士也将编程称为黑色艺术,8 这种观点对某些人来说一直持续到今天。好莱坞排版体现了黑客的刻板印象,盯着屏幕,而 1 和 0 快速流过,将编程呈现为一种神秘的超自然能力。除了娱乐价值外,此类描绘可能还会产生负面影响。更准确地说,编程的某些方面比其他方面更难或更具有挑战性。这大大淡化了编程天生就很难的观念,因为许多努力的某些方面比其他方面更难。更尖锐的陈述也不太可能对普通观众造成附带损害,也不太可能被滥用。被认为具有挑战性的编程方面包括知识转移问题(包括负转移)和开发概念机器等。 3 编程有几个候选阈值概念 5 但许多学科的方面也是如此。
编程也是许多误解的主题。 5 这可能是因为它很难。另一方面,说它很难可能是解释这些误解的一种方便的方式。其他(通常是较旧的)学科也面临着误解的挑战。许多物理专业的学生都在为力学的基本原理而苦苦挣扎,例如力与加速度、速度与速度、重量与质量以及惯性的概念。这种比较并不是那么间接。这些完善的概念在许多实践中支持了一种更加公式化的方法,类似于编程的概念基础最终在代码中的表达方式。工程也可能受到硬形象的影响。数学很难的观念已经存在于许多学校系统中,并且经常得到家长和其他利益相关者的回应,导致负面影响,包括反对扩大参与。然而,计算在现代社会中撒下了一张非常广泛的网。它与日常生活的大部分内容交织在一起,并以多种方式影响成功的机会。数学也可以这样说,但对许多人来说,计算似乎更明显、更触手可及。对于明天的毕业生来说,这也是一条非常有吸引力且需求旺盛的职业道路。有一些例子支持编程并不难。在结对编程、同伴指导、工作示例、游戏和情境化方法(如媒体计算)中已经取得了成功。 3 这些通常有经验证据 5 支持,但在方便时经常被忽视。基于块的编程已经变得非常成功,尤其是对于年幼的孩子。新模式还表明计算相对年轻且变化迅速。这种变化速度本身可能是导致编程难度的主要因素之一。考虑到有多少人受到计算技术的影响,关于编程困难的陈述的另一个问题是,大多数研究和媒体报道都基于非常狭窄的地球人口样本——主要来自美国、英联邦和欧洲的背景。有整个国家,几乎整个大陆,以及无数没有经过严格研究和对比的群体。即使在更频繁研究的地区,我们目前的观点也不能代表很多。这很少被承认或采取行动。许多亚群在各种多样性和身份方面,包括能力、文化和种族、地理、性别、母语、种族、社会经济背景和许多其他方面,在任何地方仍然代表性不足。此外,目前大多数数据和经验都来自计算机专业的学生,但计算机正迅速成为嵌入学校课程和越来越多的高等教育学科的主流学科。 5 声称编程对于资源相对丰富的西方计算机专业的学生来说很难,这对其他人来说是一种悲观的看法。即使发现编程对这些学生来说是独一无二的,但这一发现可能只适用于对我们当前知识做出贡献的非常有限的、有偏见的样本。粗心地试图概括这样的发现将有助于对那些尚未计算其经验的人关上大门。实际上,当编程困难的信息在很少或没有上下文的情况下永久存在时,这种做法已经发生了。有几个例子说明对计算教育中观察的解释会产生意想不到的负面后果。例如,为了解释坐在高成就者旁边的苦苦挣扎的学生,“极客基因”假设被证明很方便。这表明编程是一种与生俱来的能力。换句话说,一个人通常无法学会成为一名优秀的程序员;一个是或不是,大多数不是。有证据表明,计算机科学家认为先天能力在计算中比在其他学科中更重要,众所周知,这是扩大参与的障碍。 3 尽管极客基因假说遇到了阻力 3,但已经造成了 8 次损害并且可能会继续。人们不必过多地寻找具有不良影响的意外消息的其他当代例子。最近的研究表明,大学计算机专业的竞争性招生政策会对学生的归属感、自我效能感和部门认知产生负面影响。 6 当然,这些都不是预期的结果。竞争性招生主要是对不断增长的学生人数和无法满足的需求的回应。尽管如此,这种机制向学生发出了一个意想不到的信号,导致了意想不到的负面后果。编程很难这一消息的延续很可能会产生类似的影响。最近的一系列 NSF 研讨会揭示了非计算教育工作者在讨论计算课程时最常听到的评论之一是“不要让计算/编程看起来很可怕”。 2 这真的是我们打算描绘的形象还是只是计算文化的副产品?如果教育者认为编程很可怕,我们怎么能期望学生有不同的想法呢?这些消息可能已经导致无数学生放弃计算,或者一开始就没有考虑。我们永远不会知道。无法估量的损害很可能已经发生并继续累积。
编程的历史相对较短,充满了不断的变化,所教的内容也经常变化。 3 总体而言,基于字符的高级编程引领了采用率的斗争,尤其是在大学和工业界,但有许多编程示例并不适合这种模式。从 Logo 和 Hypertalk,到原型口语编程语言,再到基于块的编程,以及特定于领域和任务的编程,编程的确切构成取决于被问到的人以及被问到的时间。今天,低代码和无代码是新兴的编程模式,这是构成编程不断变化的另一个迹象。非计算环境中的程序员数量也在迅速增加。 1 当然,即使昨天认为编程很难,也不意味着明天就难了。我们怎样才能改变编程臭名昭著的名声?答案可能是多方面的,包括意识到我们所持有的信念和我们发送的信息的真实影响。此外,这些应基于证据,并由适当的多元化人群提供信息。我们应该对学生有现实的期望,并专注于我们所知道的在实践和我们的信息传递中取得成功的东西,包括检查关于此事的陈述的意图。 “编程很难”的观念经常在我们的课堂、工作场所、学术文献和媒体中得到强化。然而,这一立场经常反映意识形态观点,缺乏足够的证据。编程困难的说法可能会产生明显的直接后果。然而,它们也可以传达更多的间接信息——实际上是发送可能对学生、教育工作者、社区和计算学科本身产生意想不到的后果的信号。这些很少被考虑。编程难不难?目前的证据既不令人信服,也不够多样化,无法从总体上回答这个问题。更合理(并且可能是诚实的)答案是:“这取决于”和“两者兼而有之”。那么,为什么说它很难呢?经常说轶事是因为没有那么多证据支持它吗?因为确实存在的证据难以理解?会不会是为了激励和证明工作太方便了?是不是很多人都希望编程看起来很难,有意识还是无意识?科技公司和招聘经理是否依赖于强硬和精英编程的形象?解释真实解释仍然难以捉摸的现象是否太方便了?这只是失败的简单借口吗?延续这种信念只会加强摇摇欲坠的证据基础,从而破坏任何更严格的循证研究。如果我们要声称编程的难度,社区有责任提供来自不同背景的可靠经验证据,并负责任地陈述调查结果。最近,许多时事和社会政治现实使我们质疑我们的教育实践。考虑到当前的全球环境,“编程很难”的笼统信息似乎已经过时、没有成效,而且充其量也可能无济于事。在最坏的情况下,它们可能真的有害。我们需要停止指责编程太难,而要专注于让每个人都更容易和愉快地编程。 1. Becker, BA 等。认为无用的编译器错误消息:基于文本的编程错误消息研究的前景。在计算机科学教育创新和技术工作组报告(英国苏格兰阿伯丁)(ITiCSE-WGR '19)中。 ACM,纽约,纽约,2019 年,177-210; https://bit.ly/2T97WUT 2. Birnbaum, L.、Hambrusch, S. 和 Lewis, C. 关于 CUE.NEXT 研讨会的报告。技术报告(2020); https://bit.ly/3x8ev8Q
3. Guzdial, M. 以学习者为中心的计算教育设计:面向所有人的计算研究。以人为本的信息学综合讲座 8, 6 (2015), 1-165。 4. Luxton-Reilly, A. 学习编程很容易。在 2016 年 ACM 计算机科学教育创新与技术会议(秘鲁阿雷基帕)(ITiCSE '16)的会议记录中。 ACM,纽约,纽约,2016 年,284–289; https://bit.ly/3ivrKfM 5. Luxton-Reilly, A. 等。介绍性编程:系统文献综述。在第 23 届 ACM 计算机科学教育创新与技术会议(塞浦路斯拉纳卡)(ITiCSE 2018 Companion)的 Proceedings Companion 中。 ACM,纽约,纽约,2018 年,55-106; https://bit.ly/3v1D9qh 6. Nguyen, A. 和 Lewis, CM 计算机系的竞争性招生政策负面预测一年级学生的归属感、自我效能感和对系的看法。第 51 届 ACM 计算机科学教育技术研讨会论文集(美国俄勒冈州波特兰)(SIGCSE '20)。 ACM,纽约,纽约,2020 年,685–691; https://bit.ly/2TTr3Tl 7. Sime、ME、Arblaster、AT 和 Green,TRG 构建程序员的任务。职业心理学杂志 50, 3 (1977), 205–216; https://bit.ly/3w4NNxL 8. Tedre, M. 从黑色艺术到学校科目:计算教育对地位的追求。在 2020 年 ACM 计算机科学教育创新与技术会议(挪威特隆赫姆)(ITiCSE '20)的会议记录中。 ACM,纽约,纽约,2020 年,3-4; https://bit.ly/3v436po 数字图书馆由计算机协会出版。版权所有 © 2021 ACM, Inc.
2021年7月28日11:13 谢谢你的刺激观点。一个问题。您得出的结论是,我们需要停止责怪编程太难,而要专注于让每个人都更容易和愉快地编程,这不是计算机科学教育领域(例如 Logo)至少 50 年来一直在做的事情吗?为什么编程需要简单?观察孩子们玩有时令人难以置信的困难的电子游戏。不是因为它们容易,而是因为它们很难。 Papert 称这很有趣。人们应该看看认知容易/困难频谱的不同极端。有 1 小时,Hour of Code 类型的编程,专注于扩大参与度和乐趣的体验。但是,要达到真正专业知识水平的 10,000 小时(大众科学)标记,还有 9,999 小时。达到 1 小时大关可能并不难,但目前尚不清楚这对 10,000 小时一小时意味着什么。这种观点的一个问题是关注认知挑战。当我开始我们的研究采访一位中学生关于她对编程的看法时,她说编程既困难又乏味。请注意,除了编程困难的认知挑战之外,编程无聊还有同样重要的情感挑战。这不是权衡。 21 世纪的学生、教师、家长和公民一般都没有完全理解编程的投资回报。为什么我要编写一个程序来计算无聊的素数?更一般地说,编程技能背后令人信服的工具动机是什么?有些人找到了答案,但很多人没有。没关系。虽然总体而言,您的观点在某个方面暗示了对编程的负面看法有些严峻,但当您认为基于块的编程已经变得非常成功时,尤其是对年幼的孩子来说,这可能过于乐观了。基于块的编程真的让编程变得简单吗?使用编程作为一个二维研究空间既困难又乏味,在过去的 25 年里,我们试图通过引入基于块的编程(例如 AgentSheets)和制作基于游戏设计的课程,从困难和乏味转变为可访问和令人兴奋的(例如,可扩展的游戏设计)。虽然我们从经验上确实发现编程变得更容易访问并且游戏设计具有广泛的吸引力,但基于块的编程的影响通常被大大高估了。基于块的编程消除了使编程变得困难的一个重要障碍(语法)。但正如拼写检查不会自动将每个人都变成有成就的作者一样,语法可能是迄今为止我们能够从编程中消除的最小挑战。这有点像想要攀登珠穆朗玛峰。当您从家乡飞往加德满都时,您可能已经走了很长一段路(就像语法一样),但爬山的真正挑战仍在前方。使编程更易于访问和愉快是关于开始实际攀登。它是关于创建新一代工具和教学策略来支持语义甚至编程的语用学。