Arthur-多多,不想写好字的摄影爱好者不是一个合格的神经科学研究生 阅读原文 本回答含大量个人见解,请谨慎食用。 太长不看版: 计算机语言与自然语言有相似性,但在规范性、歧义性、适用环境等方面有很大不同; 理解计算机语言并没有明显激活和语言相关的脑区,而是激活了和逻辑有关的脑区; 不同的计算机语言,不同的逻辑结构对应的神经机制还有待进一步研究; 尚不明确计算机语言的输出和自然语言的输出是否有类似的模式。 2020 年 12 月 15 日,eLife 上发表了两篇相关文章[1][2],发现在理解计算机代码的过程中,和逻辑推理相关的脑区有明显激活。后面的讨论就从这两篇文章出发聊聊自然语言与计算机语言及其神经机制的异同。 一、计算机语言与自然语言的异同(非专业论述) 要回答这个问题,我们需要先定义什么是语言。参考百度百科: 语言(language)的三要素是语音、语法和词汇,是由词汇按一定的语法所构成的语音表义系统。[3] 知乎百科: 语言(Language),是人类最重要的交际工具。它同思维有密切的联系,是人类形成和表达思想的手段,也是人类社会最基本的信息载体和传递信息的工具[4]。 维基百科: A language is a structured system of communication used by humans. Languages consist of spoken sounds in spoken languages or written elements in written languages. Additionally, a language may consist of other symbolic elements like hand gestures in sign languages[5]. 在这里粗浅归纳部分要点(非专业名词): 语言传递信息 由表义元素组成的系统 有“语法”规则 显然,计算机语言也传递了信息,一串代码告诉了我们计算机正在执行的操作;同时,不同的计算机语言有各自使用的表义元素(主流编程语言多与英语相关);最后,计算机语言都有自己的语法规则。 事实上,计算机语言被认为是一种形式语言(Formal language)——用精确的数学或机器可处理的公式定义的语言。形式语言是一个字母表上的某些有限长字符串的集合,一个形式语言可以包含无限多个字符串。单纯考虑这些因素,计算机语言和自然语言确实有很大的相似性。 不过自然语言和计算机语言也有明显的不同:自然语言需要传递的信息来自于人类面对的真实世界,而计算机语言处理的是可以数学化的信息。故计算机语言多使用规范性语法,也力图消除歧义。相较而言,自然语言中可能导致的歧义的例子比比皆是,规范性语法和描述性语法同时存在。 二、编程语言和自然语言激活的脑区 语言可以激活大脑中的许多区域: 图片来源:Kandel, E. and Mack, S. (2013).Principles of Neural Science. 5th ed. Figure 60-5 原文图注:Imaging studies show that language processing involves a more complex and distributed network than previously thought. Particular brain areas are specialized for processing at the phonetic, word, or sentence level. 听说读写,包括语义理解都可能对激活的脑区产生影响。 那么编程呢?这就回到了开头提到的两篇文章。 Computer code comprehension shares neural resources with formal logical inference in the fronto-parietal network by Ivanova et. al. 程序员们根据给定的代码和输入计算输出,同时接受 fMRI 成像,其结果和程序员在完成其他涉及句子理解(Language)、数学(Math)和逻辑(Logic)等能力的任务时的结果作了比较,发现逻辑与计算机代码理解激活的脑区最相似。 这一结果说明,计算机语言的理解与自然语言的理解激活了不同的脑区。 Comprehension of computer code relies primarily on domain-general executive brain regions by Liu et. al. Code problem 和 sentence problem 的核心内容相同,但是前者用编程语言 python 表达,后者用英语呈现。 比较二者所激活的脑区,发现 MD system 有明显激活(与第一篇结果类似,详见原文),语言系统的激活并不明显。 MD system: The frontoparietal network (FPN), generally also known as the central executive network (CEN) is involved in sustained attention, complex problem-solving and working memory. Other names for the FPN have included the multiple-demand system, extrinsic mode network, domain-general system and cognitive control network[6]. 简单来说就是程序员在理解计算机语言的过程中,自然语言处理的系统贡献并不明显。 SR: sentence reading NR: nonword reading SP: sentence problem CP: code problem 综上,两篇文章的结果给出的结论是:程序员在理解计算机语言时激活的脑区与理解自然语言激活的脑区并不相似,前者主要涉及到额叶 - 顶叶网络,可能更多地要求工作记忆、认知控制、逻辑推理等认知功能。 三、不同编程语言涉及的脑区 Ivanova 的文章还使用了 ScratchJr——一种面向儿童的图形化编程语言。 其实验结果大体上与 python 的结果类似,部分区别可能来自于两种编程语言的不同形式(文字 / 图形)。 那都采用文字的编程语言(如 python,C++,matlab)会不会有区别?面向对象和面向过程在神经机制上会有不同吗?这些也许是今后可以研究的问题。 另一方面,顺序 /for 循环 /if 分支等不同的逻辑结构是否会有影响呢? Ivanova 等人的结果是没有: MD system BOLD response Liu 等人的文章则有不同的结果: MVPA analysis revealed that for and if functions could be distinguished based on patterns of activity within PFC (accuracy = 64.7%, p<0.001), IPS (accuracy = 67.4%, p<0.001) and pMTG (accuracy = 68.4%, p<0.001). for and if functions could also be distinguished within the early visual cortex (accuracy = 55.7%, p=0.015), however, decoding accuracy was lower than in the other regions (F(3, 56)=4.78, p=0.0048) 这一矛盾如何解释也是很有意思的问题。 四、总结与讨论 上述两篇文章说明计算机语言与自然语言在神经机制上有所不同,计算机语言更多地激活了 frontoparietal network,对工作记忆、认知控制、逻辑推理等认知功能有更多要求。但是就编程语言的神经机制而言,还有进一步研究的空间: 编程中的不同逻辑(面向对象 VS 面向过程、sequential/if/for)是否会激活逻辑相关脑区中的不同亚区? 计算机语言不仅包含了阅读理解,设计一个代码(但是不写代码)和代码调试过程中又是什么脑区在活跃? “Logic”这种认知能力能否继续细化,使我们对编程所需要的能力有更清晰的认识? 最后讨论一下计算机语言要不要从小学这个问题。语言的发展有关键期,但是目前没有研究表明计算机语言的学习也有关键期,编程所需的认知功能在很大程度上是与数学、逻辑等相关,如果仅仅是为了学习一门语言的语法那大可不必。那教编程思想呢?我个人觉得可行,但是什么时候开始学?怎么学?这些都是需要考虑的问题。目前我国已有强调编程教育的趋势,希望今后有研究能为计算机和信息科学教育的推广提供理论指导。 阅读原文