视学算法报道

转载自:机器之心

编辑:泽南、小舟

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

© THE END

转载请联系 机器之心 公众号获得授权

投稿或寻求报道:content@jiqizhixin.com

点个在看 paper不断!

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

  1. 数学好=编程能力强?MIT新发现:二者激活大脑区域并不同

    金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 都说学编程就像学一门新的语言,但事实真的如此吗? 不不不,起码在读代码这件事上,你的大脑可不这么认为. 最近,MIT神经科学家在eLife期 ...

  2. 高薪编程,品牌公司——人往高处走,作为程序员的你够格吗

    高薪编程,品牌公司--人往高处走,作为程序员的你够格吗 前言: 暑假马上就要结束了,暑假没回过家,在学校留校学习一个半月,每天键盘敲击声不断,很充实,每天都在不同程度的进步.且不说学了多少东西,头发反 ...

  3. 编程十年 (15):宿命,程序员

    编程十年 (15):宿命,程序员 本文地址:http://www.cnblogs.com/AndersLiu/archive/2011/05/04/programming10years-15.html ...

  4. 简单的计算机程序代码,优秀程序员通过简单代码,窥探电脑编程中强大的数组操作功能...

    优秀程序员通过简单代码,窥探电脑编程中强大的数组操作功能.编程语言中,数组是一个非常重要的概念,也是一种很常用的类型.本文中通过javascript语言的代码实例,展现编程中数组的魅力.在javasc ...

  5. tail怎么写中文_为什么不能用中文进行编程,而英文却可以?程序员的分析很透彻...

    很多人都认为程序员很厉害,而且心中对他们有一丝敬佩,那这么复杂的程序,他么究竟是怎么写出来的呢?不知道大家有没有注意一个细节,那就是编程都是英文,如果用中文去编译的话,那就是出现很多"bug ...

  6. 程序员python代码打招呼方式_某编程少年说他是Python大神,神级程序员不用一行代码教他做人!...

    听君一席话,胜读十年书. 1.扎实的python基础 个人的技术基础知识是否扎实,决定了个人是否能够做的工作层次. 比如某些Python半吊子,只能够纸上谈兵,和Python小白谈谈人生理想,而只要涉 ...

  7. 互相之间吹吹水,聊聊古今中外,感慨生不逢时,如果再小个十几年,一定不做程序员(Ajax的介绍)

    平日上班:伴随着无数键盘的敲响声.噼里啪啦,噼里啪啦,噼里啪啦,噼里啪啦唯一的乐趣就是,中午吃饭的时候,一群人坐在餐桌互相之间吹吹水,聊聊古今中外,感慨生不逢时,如果再小个十几年,一定不做程序员!晚上 ...

  8. Erlang之父去世,忠告程序员:先思考再编程,累的时候不要写代码

    作者:黄哲铿<技术管理之巅>作者.技术领导力特约撰稿人 Erlang之父Joe Armstrong于4月20日去世,享年68岁. Erlang Solutions.Erlang Facto ...

  9. 不要迷恋哥,哥不只是传说(再【转】世界上最牛的程序员)

    原文链接网址:[转]世界上最牛的程序员 话说偶当年还在大学求学的时候,以为最牛的就是教程序设计和数据结构的的那两个谢顶老头,直到偶看到了下面的神奇的传说(粗体部分). MIT BBS上说微软电话面试的 ...

最新文章

  1. 腾讯offer是什么样子_记一次腾讯社招前端面试(已拿到offer入职)
  2. Python ML环境搭建与学习资料推荐
  3. C++中函数模板template和函数参数为指针,且有返回值的结合使用
  4. 如何安全使用SWT的显示器asyncExec
  5. 【转】C++学习二 vector的用法(使用sort对于vector排序)
  6. SortedDictionaryTKey,TValue正序与反序排序及Dicttionary相关
  7. 关于editor网页编辑器ueditor.config.js 配置图片上传
  8. AVAudioSession
  9. Linux下 RabbitMQ的安装与配置
  10. 跨平台日志清理工具 Log-Cutter v2.0.1 RC-1 发布
  11. 【Hoxton.SR1版本】Spring Cloud Gateway网关初体验
  12. Linux中chmod命令修改权限详解
  13. 【统计学】【2008.11】中国铜铝未来市场价格的时间序列预测模型
  14. Linux gd库安装步骤说明
  15. 雷蛇鼠标垫真假区分_您真的需要鼠标垫吗?
  16. 站内优化第一篇:页面标签对于网站SEO的重要性
  17. 用Python海归作图--turtle,画椭圆
  18. 神经网络控制与matlab仿真,matlab神经网络拟合预测
  19. 计算机是如何做加法的?(7)——回顾与总结
  20. tarjan算法求SCC,e-DCC,v-DCC

热门文章

  1. jquery实现心算练习
  2. 安装SQL SERVER2000提示注册表文件被挂起的解决方案
  3. LeetCode实战:螺旋矩阵
  4. 【HDU】3635 Dragon Balls (带权并查集 一)
  5. mysql 5.x 安装_mysql 5.5.x zip直接解压版安装方法
  6. 倪光南院士:openEuler与全球开发者共同推动计算产业发展
  7. 石锤!谷歌排名第一的编程语言,死磕这点,程序员都收益
  8. 谷歌这波大动作,暴露了什么信号?
  9. 29篇计算机视觉领域论文,篇篇惊艳!内附链接!
  10. 阿里AI再摘一冠,大幅提高视觉对话世界纪录