编程究竟是数学还是语言?程序员的大脑又如何处理计算机语言? 2024-08-02 18:34:29 2016 年盖洛普民意测验(Gallup poll)调查发现,在美国,大多数学校希望开始教授编程,且 66% 的美国基础教育(简称 K-12 教育)学校的校长认为,非计算机专业的学生也应该考虑学习计算机科学。大多数欧洲国家都在学校课程中增设了编程课和计算机科学,其中法国和西班牙早在 2015 年就开设了这些课程。很显然,在这样高速增长的势头之下,新生代程序员持续涌现,预计会将全球开发人员的规模从 2019 年的 2390 万增加到 2024 年的 2870 万。而在中国,编程教育有多火热就更不用赘述了,“内卷” 这个词便被频频用来形容该领域。尽管各行各业在编程的教育上做了如此多的努力,但对于如何教授编程仍然存在一些困惑。比如说,我们至今都没搞明白,它究竟更像一种语言,还是更像数学?尤其从脑科学的角度来看,计算机编程是一种新颖的认知工具,已经改变了现代社会。哪些认知和神经机制支持这项技能?这个问题至关重要,因为它将决定着我们的传授该领域知识的方式应该遵循怎样的底层方法。正如麻省理工学院的神经科学家安娜・伊万诺娃(Anna Ivanova)所说:“我们有兴趣探讨语言和计算机编程之间的关系,部分原因在于,计算机编程是一个新的发明,我们知道不可能有任何结构上的硬件机制(hardwired mechanisms)让我们成为优秀的程序员。”安娜・伊万诺娃也和她的同事进行了一项新的研究,尝试通过观察受试者在阅读 Python 代码时的大脑活动,来回答这个问题。编程语言本质是什么?两种不同的解答目前,针对上述疑问,存在两种思想流派 ——“语言派” 和 “数学派”。其中,较为流行的观点是,编程是一种语言,必须遵循自己的语法规则和语义规则。毕竟,它们被称为编程语言是有原因的。在某些方面,学习计算机编程也与学习新语言相似。它要求学习新的符号和术语,必须正确组织这些符号和术语以指导计算机该怎么做。计算机代码还必须足够清晰,以便其他程序员可以阅读和理解。因此,依附于该观点之下,还有一个颇为时髦的缩写:CAL, Coding as Another Language。而与之对立的是,有些人认为编程更像是学习数学中的逻辑,即借助公式和算法来创建输入和输出。究竟哪种方法更贴近真理?自编程进入到教育体系以来,争论就从未休止,但目前看来,“语言派” 显然已占据上风。比如说,在美国德克萨斯州(Texas)、俄克拉何马州(Oklahoma)和乔治亚州(Georgia)的法律均允许高中生选修计算机科学课程,以完成他们的外语学分。但这场辩论对神经科学家似乎有着特殊的意义:由于计算机编程才出现了几十年,大脑还没有进化出任何特殊的区域来对其进行处理,所它必须重新利用大脑中通常用来处理其他事情的区域。.因此,就在去年年底,麻省理工学院(MIT, Massachusetts Institute of Technology)的神经科学家试图观察人们在处理计算机编程时会用到大脑的哪些区域和所对应的功能系统。他们认为,“解释计算机代码的能力是一种非凡的认知技能,与包括一般执行功能、数学、逻辑和语言在内的不同认知领域有着相似之处。”考虑到一个人成年后可以学会编程的事实,它一定是依赖于我们大脑中某些预先存在的认知系统。由此看来,以下两个大脑系统似乎是可能的 “候选者”:要么是大脑的语言系统,要么是处理复杂认知任务的系统,如解决数学问题或填字游戏的 “多需求网络”(multiple demand network)。大脑中的编程在这支 MIT 团队的实验中,研究人员要求精通代码的参与者躺在磁共振功能成像(fMRI, Functional Magnetic Resonance Imaging)机器中,以方便测量他们的大脑活动,规则是要求被试者阅读编程问题并预测输出答案。在这项研究中使用的两种编程语言是以 “可读性”(readability)著称的 Python 和 ScratchJr。其中,后者是以符号为基础,专门为儿童开发的语言,以便尚未学会阅读的儿童也可以使用它。首先,研究的主要任务包括给定一个人的身高和体重参数,让参与者计算一个人的身体质量指数(BMI, Body Mass Index)。实验中的代码示例和难题这个问题要么以 Python 风格的代码的形式呈现,要么以普通句子的形式呈现。类似地,ScratchJr 也采用了同样的方法,只是参与者被要求去追踪小猫走路和跳跃时的位置。其次,研究的控制任务包括两项:其一记住网格上的一系列方块,以激活参与者的多重需求系统;其二阅读一个正常和一个无意义的句子,以激活他们的语言系统。最后,研究结果表明,当参与者在阅读代码时,大脑的语言部分反应微弱,论文作者认为,这很可能是在整个过程中未涉及口语和听力的原因。相反地,这些任务主要由多需求网络处理。具体来说,多需求网络分布在我们大脑的额叶(frontal lobes)和顶叶(parietal lobes),它主要负责处理复杂繁重的心理任务,即日常生活中我们需要努力思考的部分。该网络大致可以分为负责逻辑的左侧部分和主管抽象思维的右侧部分。此外,MIT 的研究人员发现,阅读 Python 代码似乎可以同时激活多需求网络的左、右两侧,而在 ScratchJr 语言的实验中则显示,相对于左侧来说,右侧激活的比例更大。他们写道:“我们发现,尽管代码和自然语言之间有许多相似之处,但语言系统在代码理解过程中的反应并不一致。”编程似乎进化出了新的处理网络有趣的是,解码过程激活了多需求网络的部分,而这些部分在解决数学问题时没有被激活,因此,大脑并没有把它当作语言或逻辑来处理,它更像是自己独立的一个部分。尽管阅读计算机代码可以激活多需求网络,但与数学或逻辑问题相比,它似乎更多地依赖于网络的不同部分,这表明编程并不能精确地复制数学的认知需求。“这些发现表明,大脑将编码视为一个独特而复杂的过程。理解计算机代码似乎是独立的事件。它和语言不一样,和数学和逻辑也不一样……”,麻省理工学院研究生、该研究的主要作者安娜・伊万诺娃说。同时作者指出,这并不排除经验丰富的程序员可能有专门用于编码的大脑区域的可能性。去年,日本神经科学家做的另一项实验,支持解释了计算机代码所涉及的大脑独特过程。在那项研究中,分别向新手级、经验级和专家级程序员展示代码片段,与此同时,他们需要躺在 fMRI 中完成将这些代码片段分类到四种类型算法的任务。正如预期的那样,具有更高技能的程序员可以更好地分类代码片段。不过,研究人员还发现,与自然语言处理(natural language processing)、情景记忆检索(episodic memory retrieval)和注意力控制(attention control)相关的大脑区域的活动,也随着程序员的技能水平而加强。由此看来,虽然编程与语言的相似性并非我们想象的那样,但两者似乎都是越早学越受益。Refenrence:https://elifesciences.org/articles/58906 赞 (0) 相关推荐 你以为我在玩游戏,其实我在学编程,这一波我在大气层 嗨,大家好啊 这里是汐仔 还记得大家一起住宿舍的日子吗?在宿舍的时间除了和一起打游戏开黑,或者看电影,反正除了学习一切事情都能干. 忽然有一天你醒悟过来,想捧一本看看,好的,你将成为一道景点,你会察觉 ... 编程究竟是数学还是语言? 图片来源:Pixabay 作者 青苹果 来源 公众号"数据实战派" 2016 年盖洛普民意测验(Gallup poll)调查发现,在美国,大多数学校希望开始教授编程,且 66% 的 ... 创世纪:上帝究竟是赌徒,还是程序员? 疫情的突如其来,让所有人始料未及. 在疫情中,我们逐渐学会了出门戴口罩,逐渐学会了酒精消毒,逐渐学会了少聚集.少活动. 学会了之后,我们逐渐习惯了这一切,这些在平日看似奇怪的行为. 突然一看时间,已经 ... VS Code能自己编程了,GitHub推出“AI程序员”插件,根据注释自动补全代码 Python爱好者社区 2021-07-06 明敏 发自 凹非寺 量子位 报道 | 公众号 QbitAI 描述出你想要执行的命令,就能生成相应的代码. 现在,GitHub官方和openAI联合为程序员 ... 程序员的数学基础课:编程中的数学思维 本文将从编程的角度出发,重新梳理这些内容,作为第一篇"基础思想"的总结. 5.1 数据结构.编程语言和基础算法 这一节我们汇总数学在常见的数据结构.编程语言和基础算法中的体现,让你 ... 嵌入式C语言基础编程——5年程序员给你讲解程序设计之三种结构 嵌入式C语言基础编程--5年程序员给你讲解程序设计之三种结构 IT百科大学堂2020-05-18 17:08:05 本文主要是对C基础编程关于程序设计的初步讲解,属于C编程入门的小白基础课,后续会深入 ... 还在为网页遇到自己想要的文字无法复制而烦恼?程序员教你一招轻松解!#程序员 #编程 #知识分享 还在为网页遇到自己想要的文字无法复制而烦恼?程序员教你一招轻松解!#程序员 #编程 #知识分享 程序员该信中医吗?中医理论和编程的“关系”即将刷新你的认知! 程序员该信中医吗?中医理论和编程的“关系”即将刷新你的认知! 为什么有些编程界程序员需要两个显示器? 一个写代码,然后一个程序员通常在写代码的时候,还需要: 1.看需求文档 2.看美工设计的界面 3.查编程语言reference.调用的第三方库接口API说明 4.gui界面预览,根据预览情况调整代码 ... 编程新手该如何调优程序?程序员必备性能调优利器——火焰图 让我们回想一下,曾经作为编程新手的我们是如何调优程序的?通常是在没有数据的情况下依靠主观臆断来瞎蒙,稍微有些经验的同学则会对差异代码进行二分或者逐段调试.这种定位问题的方式不仅耗时耗力,而且还不具有通 ...