学习编程在某些方面类似于学习一门新语言。它需要学习新的符号和术语,并且必须正确组织以指导计算机执行任务。同时,代码还必须足够清晰,以便其他程序员可以阅读和理解它。
尽管有这些相似之处,麻省理工学院的神经科学家发现,阅读计算机代码并不会激活大脑中负责语言处理的区域。相反,它激活了一个分布式网络,称为多需求网络,这个网络也在解决数学问题或填字游戏等复杂认知任务时被调用。
然而,尽管阅读代码激活了多需求网络,但它似乎比数学或逻辑问题更多地依赖于该网络的不同部分,这表明编程的认知需求并不完全等同于数学。
“理解计算机代码似乎是独立的一件事。它不同于语言,也不同于数学和逻辑,”麻省理工学院研究生兼该研究的主要作者Anna Ivanova说。
这篇研究论文的资深作者是弗雷德里克·A和卡罗尔·J·米德尔顿职业发展副教授、麦戈文脑研究所成员Evelina Fedorenko,论文今天发表在《eLife》上。麻省理工学院计算机科学与人工智能实验室和塔夫茨大学的研究人员也参与了这项研究。
语言与认知
Fedorenko的研究重点之一是语言与其他认知功能之间的关系。她特别研究了其他功能是否依赖于大脑的语言网络,包括Broca区和大脑左半球的其他区域。在之前的工作中,她的实验室已经显示音乐和数学似乎并不会激活这个语言网络。
“我们对探索语言与计算机编程之间的关系很感兴趣,部分原因是编程是如此新的发明,我们知道不可能有任何硬连线机制使我们成为优秀的程序员,”Ivanova说。
她提到,关于大脑如何学习编码,有两种观点。一种认为,要成为优秀的程序员,你必须擅长数学。另一种则认为,由于编码和语言之间的相似之处,语言技能可能更为重要。为了阐明这个问题,研究人员着手研究阅读代码时的大脑活动模式是否会与语言相关的大脑活动重叠。
研究人员在这项研究中关注的两种编程语言以其可读性著称——Python和专为5岁及以上儿童设计的可视化编程语言ScratchJr。研究对象都是熟练掌握测试语言的年轻成年人。当程序员躺在功能性磁共振成像(fMRI)扫描仪中时,研究人员向他们展示了代码片段,并要求他们预测代码将产生的操作。
研究人员发现,语言区域对代码几乎没有反应。相反,他们发现编码任务主要激活了所谓的多需求网络。这个网络的活动分布在大脑的额叶和顶叶,通常被用于需要同时记住许多信息的任务,并负责我们执行各种心理任务的能力。
“它几乎处理任何认知挑战,让你费脑筋的事情,”Ivanova说。
以前的研究表明,数学和逻辑问题似乎主要依赖于左半球的多需求区域,而涉及空间导航的任务则更多激活右半球。与塔夫茨大学儿童研究和人类发展教授Marina Bers合作,麻省理工学院团队发现,阅读计算机代码似乎激活了多需求网络的左右两侧,ScratchJr则略微更多地激活了右侧。
经验的影响
研究人员表示,尽管他们没有发现任何专门用于编程的区域,但这种专门化的脑活动可能会在有更多编码经验的人身上发展出来。
“如果你找来那些职业程序员,他们在特定语言上已经编程了30或40年,你可能会开始看到一些专门化,或者多需求系统的一些部分固定化,”Fedorenko说。“在那些熟悉编码并能高效完成这些任务但经验相对有限的人身上,似乎还没有看到任何专门化。”
在同一期《eLife》上发表的另一篇论文中,约翰·霍普金斯大学的研究团队也报告说,解决代码问题激活了多需求网络,而不是语言区域。
这些发现表明,编程应该被作为数学技能还是语言技能来教授并没有明确的答案。部分原因是学习编程可能同时涉及语言和多需求系统,即使在学会之后,编程并不依赖语言区域,研究人员说。
“两个阵营都有各自的说法——必须与数学一起,必须与语言一起,”Ivanova说。“但看起来计算机科学教育者将不得不开发自己的方法来最有效地教授编程。”
这项研究由国家科学基金会、麻省理工学院脑与认知科学系和麦戈文脑研究所资助。