acm-header
登录

ACM通信

BLOG@CACM

Dijkstra关于“彻底的新奇”是错误的:CS教育中的隐喻


马克Guzdial教授

图片来源:密歇根大学

Edsger Dijkstra 1988年的论文论真正教授计算机科学的残酷”(在这里是纯文本形式)是计算机科学(CS)教育方面被引用最多的论文之一。这也是错误的。最近越来越多的研究探索了Dijkstra试图警告我们远离的主题——如何用隐喻学习和教授计算机科学。

根据谷歌Scholar, Dijkstra的论文被引用了571次。相比之下,在所有ACM数字图书馆与SIGCSE相关的论文中被引用最多的论文有412次被引用(参见这里的数据).Dijkstra的论文被引用的次数超过了任何同行评议的CS教育研究。许多引用可能是引用了“残忍”的论文作为陪衬,比如欧文·阿斯特拉坎的《论计算机科学真正教学的残酷复归”。

Dijkstra的观点是计算机代表"激进的新奇“在人类的经验中没有类似的东西,我们不能用过去的经验来理解它们。”特别是,我们不应该使用隐喻。

这是应对新事物最常见的方法:通过隐喻和类比,我们试图将新事物与旧事物联系起来,将小说与熟悉的事物联系起来。在足够缓慢和渐进的变化下,它运行得相当好;然而,在出现明显的不连续性时,这种方法就失效了:尽管我们可以用“常识”这个名字来美化它,但我们过去的经验已不再相关,类比变得过于肤浅,隐喻变得更具误导性而非启发性。这就是“激进”新奇的特点。

应对激进的新事物需要一种正交方法。一个人必须把自己的过去、所积累的经验和在其中形成的习惯看作是历史上的不幸的偶然事件,他必须以一种空白的头脑来对待激进的新鲜事物,有意识地拒绝把它与已经熟悉的事物联系起来,因为熟悉的事物是完全不充分的。

我们现在知道,这可能是不可能的。学习科学告诉我们,所有的学习都是建立在将新的经验与以前的经验联系起来的基础上的,这个过程叫做建构主义由让·皮亚杰(Jean Piaget)开发这里有一个很好的解释).试着学习一些东西没有与先前经验的联系会抑制学习。这就导致了一种现象惰性知识(见维基百科页面)你为了通过考试而死记硬背,但你并没有真正理解,也不能真正使用这些知识。

在SIGCSE 2014论文发表之前,我从未真正思考过我们在学习和教授计算机科学时使用的隐喻。”我们通过隐喻来教学CS的老师和学生一直无视Dijkstra的警告。他们用各种各样的隐喻来教学,尽管它们都有局限性(Dijkstra在这一点上是正确的),本文探讨了教师如何处理断点。

一篇2019年的论文”确定计算机教育的具体隐喻更进一步,专注于基于身体的隐喻。从“彻底的新奇”的角度来看,这可能看起来很荒谬——没有什么比“数组”和“控制流”这样的想法更不物理的了。但从“建构主义”的角度来看,没有什么比这更自然的了。我们所有体验的基础都是在物质世界中成为物质存在。当我们处理新想法时,我们可能会把它们与物理过程联系起来。

我和博士生Amber Solomon一起工作,她一直在研究老师如何教授递归以及学生如何学习递归。去年夏天,她在2020年国际学习科学会议上发表了一篇关于教师在教授递归时使用的具身隐喻的论文这里是博客文章摘要).老师的手势和指向,但不清楚是什么。他们谈论“在这里”和“去”。他们使用的语言暗示着像程序这样的隐喻。””的东西。

安布尔的顾问是贝琪·迪萨沃和我。我们三个人一直在花时间编写她的CS学生理解和修改使用递归的程序的视频。这些绝对是迷人的,一旦你开始寻找隐喻和化身的用法,你会发现它无处不在。我特别喜欢学生转换比喻的方式,例如,谈论递归函数“前进”,然后被基本情况“停止”,然后谈论“向下”堆栈和执行“在返回的路上”不同。我们知道在计算机过程中没有“下”、“上”或“回”——这些都是使用我们日常物理世界的概念来理解计算过程的例子。

1988年,当Dijkstra写这篇文章的时候,认知科学杂志才诞生了大约10年,而学习科学直到20世纪90年代才建立起来。Dijkstra可能不知道建构主义,这是可以理解的。今天,我们知道建构主义是最被广泛接受的人类学习理论。用建构主义的视角来学习计算机,我们可以更好地理解如何帮助学生使用他们的日常知识作为隐喻来学习计算机科学。

马克Guzdial她是密歇根大学工程学院电气工程和计算机科学教授,以及信息学院的信息教授。


评论


托马斯•琼斯

Dijkstra错了就是错了。
根据我们今天的了解,我们可以评价Dijkistra的论文的想法是现在主义,错过了Dijkistra的观点。如果我们想要取得进展,我们需要充分利用我们已经知道的东西(Guzdial的观点),但我们也需要进入下一个层次。在这种努力中,过去的比喻被排除在外。我自己发现,当我陷入困境时,我常常需要放弃我已经知道的东西,去寻找我不知道的东西。库尔特·哥德尔需要抛弃罗素现有的知识,寻找一种新的思考不确定性的方式。克劳德·香农和迪基斯特拉本人也是如此。Lampson告诉我们计算机科学中的所有问题都可以通过另一层抽象来解决。我们新的计算机科学家需要了解这一点!


马克Guzdial

你好托马斯,

正如我在文章末尾所写的,我们不能责怪Dijkstra的错误。他可能没有接触到我们今天的认知科学发现。确定新知识如何帮助我们纠正之前的理解仍然很重要。Dijkstra发表了许多关于教育的错误观点,这些观点直到今天还在被引用。纠正这些是很重要的。

在你们的笔记和Dijkstra最初的文章中有一个假设,现在已经不成立了。今天大多数学习计算机科学的学生并没有准备成为计算机科学家。随着计算教育在K-12教育中的增长,以及我们为非cs专业的学生(例如,计算科学家和记者)提供计算教育,我们必须认识到,我们并不总是像你所说的那样为学生“进入下一个阶段”做好准备。想想看,教一个12岁的孩子用Scratch编程,而不依赖任何隐喻或之前的知识,是多么困难。你不太可能成功。

也许Dijkstra避免隐喻的告诫对处于或即将进入计算机科学知识前沿的学生有一定的价值。这对当今大多数学习计算机科学的学生来说并不是一个好建议。


托马斯·麦奎尔

马克,
虽然建构主义有它的位置,但我不确定Dijkstra是错的。引用你对建构主义理论的一篇参考文献;

“建构主义理论假设知识只能存在于人类的头脑中,它不需要与任何现实世界的现实相匹配”(Driscoll, 2000)。

这就是Dijkstra试图克服的问题。而不是让学生开发的抽象概念发挥作用。他想为学生提供一个可以依赖的数学框架。他称之为他的正式方法倡议。这意味着:不管学生的大脑决定如何存储形式方法,当它们以具体形式呈现时,他们应该遵守这种方法的规则。更重要的是,正式的方法对学生和其他人来说是可以理解的。具体形式也应该被证明,在学生的能力范围内和形式方法的规则。

Dijkstra谈到了操作推理的危险,因为它效率低下,而且是由简单的隐喻造成的。我相信这比Dijkstra讲话的时候更危险。今天,每个人都可以使用图形化的计算机环境。人们首先编写代码,然后再考虑结构和架构。在Dijkstra演讲之前的十年里,使用计算机更加困难,在实际编码之前,需要大量的笔、纸和黑板的准备工作(尤其是对学生而言)。
我自己的孩子就对这种推理感到内疚,当我用笔和纸勾勒出他们应该努力完成的事情的草图时,他们会不寒而栗。

对于非cs专业的学生,我同意你的观点,但是你可以让它们发挥作用。但我把你的博客主题的意思是:我们如何教育使计算机科学作为一种职业,更容易接触到更多对该领域感兴趣的学生。不幸的是,我认为最大的缺点是时间。电脑很像一种乐器,它需要几个小时的练习才能熟练,而许多人不愿意投入时间。


马克Guzdial

你好托马斯,
最后你提出了一个有趣的观点——CS教育的目标是什么?我们的CS教育目标是谁?当然,我们很关心那些把计算机科学作为职业的人。对于我的工作,我更感兴趣的是那些需要了解一些计算机知识但不会成为计算机科学专业人员的更大的人群。

无论哪种情况,每个人都是先走后跑。想象一下,如果我们告诉婴儿,当他们说的句子不够语法正确时,他们是错的,那么学习说话将会有多么困难?每个人在每个领域的起步都是相同的:尝试新事物,瞎折腾,使用日常生活中的经验和隐喻,犯很多错误和失败。我们必须考虑到这一点。形式方法不是第一位的。做之前的计划并不是第一位的。是的,我们想从专业人士那里得到更多。对大多数人来说,发展理解比有计划和按部就班更重要。


显示所有4评论

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