我在教初级前端开发时,会让学生描述阅读 HTML 的感觉。我会给他们一个用于长篇幅文章的非常基础的标记,并让他们阅读两次:第一次在代码中,第二次在前端。
我听到的最常见的回答是:它就像学习一门新语言。
当然,我告诉他们,这是它的名字:超文本标记语言。 所以我建议他们像学习法语、西班牙语或任何其他语言一样对待课程中的材料。
然后我今天早上醒来,看到 麻省理工学院的这项研究,它表明阅读计算机代码并不与阅读语言相同,即使它们有相似之处。
尽管有这些相似之处,麻省理工学院的神经科学家发现,阅读计算机代码不会激活大脑中参与语言处理的区域。 相反,它激活了一个被称为多需求网络的分布式网络,该网络也被用于解决数学问题或填字游戏等复杂的认知任务。
当然,你可能会说。 但是等等,阅读代码实际上似乎激活了多需求网络的更多部分,这使得任务更接近于数学推理,而不是完全相同的事情。
麻省理工学院的研究小组发现,阅读计算机代码似乎激活了多需求网络的左右两侧[......]。 这一发现与数学和编码依赖于相同大脑机制的假设相悖。
那么,回到我的 HTML 阅读作业。 是应该将代码教作一种语言来识别向浏览器传达要做什么的符号,还是教作一种基于解决问题的数学技能呢?
答案是 🤷♂️。
对我来说,这项研究中最有趣的地方不是如何教代码,而是我如何使用它。 Chris 总是说 前端开发人员是清醒的,而阅读代码触及大脑中负责处理多任务处理和保存大量信息的部分这一事实恰好证明了这一点。 这也解释了为什么我个人在被拉开代码或被分散注意力时会感到烦躁——就像我的大脑不得不放下它正在平衡的所有盘子来关注其他事情,然后在重回之前捡起并重新组装所有部分我正在做的事情。
我认为原因是语言是单向流动的,而编程需要进进出出函数。 不同的流程使得它更像是一个谜题,需要弄清楚某件事的作用,而不是仅仅解释你所听到的内容。
我喜欢这里的观点,我完全同意。 我阅读语言和数学与阅读真实犯罪小说一样容易。
我认为最好还是将代码主要视为一种语言。 虽然数学推理无疑是其中一个重要因素,但程序员需要将这种数学推理以及所有业务逻辑传达给计算机以及(大多数情况下)其他开发人员。
数学推理至关重要,但通常情况下,对于给定的问题,只需进行一次,而大多数代码需要阅读多次。
我认为教授编码和教授算法是两件不同的事情。 对于后者,我肯定会更多地关注数学推理。
嗯,差不多吧。 我相信语言包含函数,但我们并不将其识别为函数。 以“激光”、“ABS”或“云存储”为例; 这些不是将一大堆含义作为占位符,我们以程序使用函数的方式使用它们吗? 我们将复杂性捆绑起来,并将其作为一个具有适当属性、行为和语法的词。
我的颠覆性观点是,如果一种计算策略可以用英语表达,它就应该用英语表达,计算机应该学会跟上。 如果不能,那么它就过于复杂,需要在语言中添加新的内容。
对我来说,数学或语言与软件开发在直觉上是不同的。 我有计算障碍,解决 UI 问题不会让我遇到像解决数学问题一样的障碍。
它更像是乐高积木、数独和填字游戏同时进行。
我认为这取决于您要解决的问题。 函数数学非常有助于更好地理解函数式编程。 离散数学也很有帮助。 算法也有帮助,它们用于遍历未知有效负载以进行通用处理逻辑。 我在前端和后端都遇到过复杂的问题。
我喜欢这篇文章。 这解释了为什么我如此热爱这个学科。 它是艺术与科学的结合。
我认为这篇文章谈论的是数学,而不是科学!
解释了为什么自闭症患者适合做这种工作。
我认为就语言而言,这取决于您的大脑正在处理的信息。 在法国理发店点剪发和破译克劳德·列维-斯特劳斯的文本是不一样的。
最后那部分……“就像我的大脑不得不放下它正在平衡的所有盘子”。 这正是我经历过的。 我需要花一点时间来“热身”,如果我离开的时间超过了上厕所的时间,就好像我需要在我的脑海中重新组装某些东西才能继续前进。 除了股票市场,没有其他事情能让我对周一早上如此感兴趣或兴奋!
我完全理解。 事实上,当我编码时,我思考的速度和效率比做数学作业时快得多……
这些东西太迷人了! 我想说阅读计算机代码不仅仅是阅读语言。 当然,阅读代码依赖于标记、语法和语法的语言属性……甚至习语,其中一些与口语无关。 阅读数学表达式也依赖于语法和符号。
但是,当我们阅读语言时,我们会对系统进行抽象推理或想象故事世界,这实际上是大脑非常容易做的事情。 我们中那些没有幻想症的人可以想象我们目前没有身处或经历的环境或场景。 我们从我们生活经历的片段的组合中创造出新的图像或理解。
与计算机代码的区别在于,当我们阅读它时,我们实际上必须在阅读时有效地在大脑中运行它。 我们必须在心理上应用与计算机相同的逻辑、规则和程序来解释它。 我想,等效的例子就像阅读小说并真正体验角色的经历,而不仅仅是想象我们被告知的故事。
IMO——作为一个患有注意力缺陷多动症的人——哦,看松鼠——学习过程屈服于“能力”。
当你考虑到能够编程的人的数量统计时,对我来说很清楚,我们中没有人按照任何“规范”运作。
大多数高容量、高保留能力的人由于大脑功能高,都有一些“社会”障碍。
我强烈推荐《主人与使者》这本书,它深入探讨了半球现象。
这真让人着迷!
我读了这篇文章! 我希望您能继续发表这样的文章与大家分享! 谢谢!
我再给你一个不同的视角。 我是一名开发人员,但我读的专业是历史音乐。 作为一名音乐家,我习惯阅读并演奏五个世纪的不同风格和音乐写作方式……对我来说,解码乐谱和解码一段代码是非常相似的过程! 因为,正如研究表明的那样,它们是大脑中的全局过程。
但我也会说 5 种(人类)语言,我一直将音乐/代码与语言进行比较,因为我们总是使用符号和声音的约定来传递意义,就像我可以阅读 C 代码或 Swift/Python 一样,但由于我没有使用它来写作和表达自己,所以如果没有学习和奉献,这几乎是不可能的。荷兰语或德语也是一样的,我可以看到文本并理解其要旨,但这些是我不会说的语言。
从科学的角度来说,语言和代码在大脑中使用不同的过程,但我认为我们可以争辩说,熟练学习这两种方法都涉及相同的路径/步骤。我只教过音乐,没有教过代码,而且我一直用语言来搭桥,因为它更接近人们,所以我可能会对代码做同样的事情,将一件事与另一件事进行比较并不意味着它们是一样的。
我喜欢 Liz 的评论,代码既是数学又是艺术。它是一个逻辑和创造性的过程。就像音乐一样。
这解释了为什么当我正在编码并且必须在晚上关机时,我为什么那么生气,哈哈……
我很好奇这对于代码中的大量注释意味着什么。
我认为将 HTML 作为一种语言来教授是可以的,因为它使用标记并且没有太多逻辑。另一方面,在教授 JavaScript 时,它应该被教授为数学技能。
100% 同意
所以不仅仅是我。当我编码时,我的妻子走进房间告诉我她姐姐对他们不喜欢的表弟说了什么,这确实很烦人。
我并不真的认为 html 是代码,但我明白了。对于 html,我会想象它在说什么。对于像 c# 或 Java 这样的代码,我会查看数据流,并且几乎像是在脑海中运行不同的同步测试一样阅读它,以了解它正在做什么以及预期的结果是什么。这几乎就像你的大脑编译代码以了解它在做什么。
一位实习生问我为什么我们不再使用 div,我告诉他的其中一件事是,如果我用语义 HTML 阅读他的代码,我可以在我脑海中清晰地描绘出网站,而使用 div 会让我想象出 5 个未完成的版本,并且我可能会回去阅读前面的行以记住元素会在哪些地方出现。
这就是他应该考虑如何声明 JavaScript 中的函数和变量的原因。
我的妻子在我身上发现了这一点!
“我个人会被从代码中拉走或被打扰而感到恼火——这就像我的大脑不得不放下它一直在平衡的所有盘子才能注意别的事情,然后在重新开始之前重新组合所有的部分。回到我正在做的事情。”
我认为学习编程的第一部分类似于学习语言。学习语义,哪些字符在什么情况下意味着什么。这就是如何做某事。仍然存在何时做某事以及如何组合多个事物以获得不同结果的问题。那是更像数学/谜题的部分。
在阅读了他们的摘要之后,我并不惊讶他们没有看到大脑中与语言相关的部分亮起来。他们以一种方式构建了问题,这将导致他们几乎没有理由这样做。
他们没有要求参与者用代码表达一个想法,而是要求他们接受预先存在的代码,并询问输出是什么。
他们要求他们不要生成代码,而是执行代码。
他们没有使用代码来实现语言的功能,即将你的大脑状态转换为其他人可以理解的信息。他们只在解码方面。
这就像期望一个绘画的观看者会使用与画家绘画相同的大脑部分一样。
根据我的经验,将编码视为与金属加工或木工相似的工艺是最有意义的。
我们不是生产机器零件或家具,而是生产软件,这是一种非常具体的东西。
我偶尔会听到有人说程序员必须“用编程语言表达他们的想法”,因此编程语言就是语言。
但是当你使用外语,比如普通话时,你并没有进入一种截然不同的思维模式。当你讲普通话时,没有变量要声明。你也不会调用你之前实现过的任何函数。当然,你会用普通话表达很多与用英语表达不同的东西,但最终,当你进行对话时,总体上语义概念是足够相似的。
在语言学习中,像实时听说话者和理解他们的技能更为重要。虽然你可以花几周甚至几个月的时间处理一段代码,但语言必须是即时的。
我很幸运地在学校上过金属加工课和英语课。我可以向你保证,这两种课程的教授方式截然不同。
我是一名行为神经学家。我的 n=1 说这并不那么清晰。我看到了一位前计算机工程师,他患有语义知识缺失(左颞极),他失去了理解他以前知道的某些计算机语言的语法和命令的能力(在
除了英语中的东西)。逻辑过程对他来说是有意义的,他可以给出代码应该如何运行的总体感觉,数学和其他执行功能方面是完整的,所以对他来说这绝对是一个语言问题。计算机语言在过去 50 年中相对较新,因此随着第一代程序员老去,有些人开始患上神经退行性疾病,我认为我们将在诊所中看到更多这样的例子,并更多地了解大脑如何处理人工语言。
使用这两种技能来更好地理解,通过重复,它会变得更容易。
我不是程序员,但我感谢你表达了许多 INTP 定期经历的事情——被打断的平衡盘子的现象。谢谢。
作者过于简化了研究结果。这是一项关于神经学这一困难领域的小型尚未独立验证的研究。我建议人们在改变任何世界观之前阅读该研究
https://elifesciences.org/articles/58906#s4
尤其是
“当然,代码理解中缺乏一致的语言系统参与并不意味着语言和代码处理机制完全不同。有可能语言和 MD 区域具有类似组织的神经回路,这些回路允许它们处理组合输入或映射符号与其所指代的概念之间的关系。”
科学报道人员对“活动区域”的重要性给予了过高的重视,因为这是我们了解大脑的唯一窗口之一。