查看原文
其他

中学再不学编程就晚了?MIT、JHU研究:程序员大脑思考代码的机制不对劲

程序猿 2021-05-17
本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载编辑:泽南、小舟
MIT、约翰霍普金斯大学的研究人员发现,思考编程并不像组织语言,但也不靠纯粹的逻辑。这是因为我们通常是在成年之后才开始学代码?

很多时候,我们认为优秀的程序员需要拥有以数学为中心的思想,而编程时大脑的活跃区域与解决数学问题时所用的区域相同。又有些时候,我们会觉得编程语言之所以为语言,是因为编程时大脑的基础神经机制和语言处理区域相同,也可能是大脑的一部分用于逻辑推理或「执行控制」的问题解决机制。

然而最近来自麻省理工学院(MIT)、约翰霍普金斯大学(JHU)的一些研究告诉我们,这些都只是想当然而已。

如今,写代码正在变得越来越重要,越来越多的人正在学习编程,脑神经科学家正在解开人们在「思考代码」时大脑中正在做的事。

「计算机编程并不是一个古老的技艺,因此我们的大脑中不存在用于处理这项任务的天然模块,」MIT脑认知科学系在读博士安娜·伊万诺娃(Anna Ivanova)说道。「这意味着我们必须使用一些现有的神经系统来完成任务。」

伊万诺娃等人研究了两个可能适合用于处理代码的大脑系统:多重需求系统——倾向于处理数学、逻辑推理等挑战,以及语言系统。

语言系统未被激活

尽管编程语言和自然语言在结构上有相似之处,但研究人员发现在写代码时大脑的语言系统并没有被激活,而是多重需求系统活跃了起来。

我们知道,编程中不只存在一种编程语言,使用不同的编程语言,语言系统会发生什么变化?MIT研究了流行的编程语言 Python 和图形化编程语言 ScratchJr。参与测试的对象均来自MIT、塔夫茨大学(Tufts University)以及两所大学附近地区,都是一些精通所测语言的年轻人。

论文《Comprehension of computer code relies primarily on domain-general executive brain regions》:
https://elifesciences.org/articles/58906

在研究中,测试对象会躺在功能磁共振(fMRI)扫描仪中,阅读研究人员展示的一些代码片段和文字描述,同时思考这些代码包含的意义以及预测可能产生结果。研究人员则会通过 fMRI 实时观察测试对象的大脑活动状态。

根据研究,无论使用哪种编程语言、问题类型(数学与字符串操作)亦或是代码元素(顺序语句,if语句和for循环),结果都是一致的。MIT的研究还发现,多重需求系统可能还负责存储与代码相关的信息的表示形式,包括常见的代码概念(如循环)和特定编程语言的知识(如Java和Python中for循环的语法)。



大脑的哪个区域在看代码

然而,编写代码、数学和逻辑三者并不是使用完全相同的大脑机制。伊万诺娃说:「多重需求系统包含左右两个区域。对于数学和逻辑,左半区通常会有更多的活动。而编写代码则激活了左右两个区域的多需求系统,因此它的激活模式与数学和逻辑的激活模式不同。

「有些人的大脑中存在专门用于编码的脑组织,这会让他们变得非常出色。但即使没有,也可以成为优秀的程序员。

综合考虑麻省理工学院的研究结果与约翰·霍普金斯大学(JHU)类似研究的结果,研究者发现读取和理解代码的神经机制与逻辑有部分重叠,与数学重叠的部分则较少。但是,JHU的研究表明,大脑对多重需求系统左半区的依赖性更大。

论文《Computer code comprehension shares neural resources with formal logical inference in the fronto-parietal network》:https://elifesciences.org/articles/59340

看代码和逻辑推理、组织语言相比人类大脑的激活区域。(图片来自约翰霍普金斯大学)

人们学习编程的方式各不相同,从看视频、课堂教学到动手实践,但令人惊讶的是我们可以在程序员的大脑中看到非常一致的激活模式。我们知道,人类在学习语言的关键时期通常是在青春期之前,而学代码大多是在成年之后,这或许也是现象不同的一个原因。

该研究团队的主要成员,JHU神经可塑性与发展实验室(Neuroplasticity and Development Lab)的研究生Yun-Fei Liu说:「阅读代码时,我们可能更喜欢使用大脑中神经网络的左半部分」。同时他指出:使用左右哪一边可能存在个人差异,就像人们的习惯一样。

Liu说:「大多数人用右手写字,也有一些人用左手写字,只有少部分人能用双手写字。阅读代码可能也是如此。大多数人使用左逻辑推理系统,有些人使用右逻辑系统,但也许有些人同时使用。每个人在读代码时对左脑的依赖程度与他们执行语言任务对左脑的依赖程度有关。」这表明即使该过程不涉及大脑中的语言网络,但语言仍可能在理解代码中发挥重要作用。

麻省理工学院的研究并未在多需求系统中找出专门用于解释代码的专用区域。但伊万诺娃指出,随着编程熟练程度的提高,这样的区域可能会出现。



不过,两项研究都存在参与者较少、使用代码段较短等局限性。「这些还不是涉及多个知识领域的大型编程任务,后者需要应用复杂的业务逻辑,」瑞士圣加仑大学教授Barbara Weber说道,她最近领导的一项有关软件工程与大脑活动关系的研究被发表在了《Journal of Systems and Software》上。「我们不知道在数百行代码的情形下,大脑的活动行为是否还是如此。」

未来,根据编码任务的类型如前端和后端、写代码与debug,程序员的水平等方面的变量,我们还可以进一步研究以确定大脑的行为是否会不同,进而研究年轻人是否会像学习语言一样能够更快地学习编程。

「成年人当然可以学习编程,但孩子们是不是能做得更好?或许学习代码没有特定年龄的优势,这就是它的与众不同之处,」约翰霍普金斯大学心理和脑科学系副教授Marina Bedny说道。「但这可能是我们教育系统的错误,我们可能应该教孩子们在中学学习编程,否则他们将失去最好的机会。」

Marina Bedny是约翰霍普金斯大学研究的作者之一。
伊万诺娃认为,让人们了解写代码时认知和神经机制的好处很多。「这可以让我们拥有更好的科学基础,从而找到最具有效性的编程学习方式,」她说道。「而且我们可以利用认知科学更广泛的领域来设计编程语言本身,使其更适合人类的大脑。」

参考内容:
https://spectrum.ieee.org/tech-talk/computing/software/what-does-your-brain-do-when-you-read-code
https://hub.jhu.edu/2020/12/17/brain-activity-while-reading-code/?mc_cid=918d6a1880&mc_eid=0d9c6e233c


--- EOF ---


推荐↓↓↓

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存