这是用户在 2024-8-28 19:38 为 https://cacm.acm.org/research/10-things-software-developers-should-learn-about-learning/ 保存的双语快照页面,由 沉浸式翻译 提供双语支持。了解如何保存?
Research and Advances
Computing Profession

10 Things Software Developers Should Learn about Learning
软件开发人员应该学习的 10 件事

Understanding how human memory and learning works, the differences between beginners and experts, and practical steps developers can take to improve their learning, training, and recruitment.
了解人类记忆和学习的工作原理、初学者和专家之间的差异,以及开发人员可以采取的实际步骤来改进他们的学习、培训和招聘。

Posted
发布
pieces surround a 3D puzzle of a person's head in profile, illustration

Learning is necessary for software developers. Change is perpetual: New technologies are frequently invented, and old technologies are repeatedly updated.
学习对于软件开发人员来说是必不可少的。变化是永恒的:新技术经常被发明出来,旧技术不断更新。

Thus, developers do not learn to program just once—over the course of their careers they will learn many new programming languages and frameworks.
因此,开发人员不会只学习一次编程 — 在他们的职业生涯中,他们将学习许多新的编程语言和框架。

Just because we learn does not mean we understand how we learn. One survey in the USA found that the majority of beliefs about memory were contrary to those of scientific consensus: People do not intuitively understand how memory and learning work.37
仅仅因为我们学习并不意味着我们了解我们如何学习。美国的一项调查发现,大多数关于记忆的看法与科学共识相反:人们无法直观地理解记忆和学习是如何运作的。37

Just because we learn does not mean we understand how we learn.
仅仅因为我们学习并不意味着我们了解我们如何学习。

As an example, consider learning styles. Advocates of learning styles claim that effective instruction matches learners’ preferred styles—visual learners look, auditory learners listen, and kinesthetic learners do.
例如,考虑学习方式。学习风格的倡导者声称,有效的教学符合学习者的首选风格——视觉学习者看,听觉学习者听,动觉学习者。

A 2020 review found that 89% of people believe that learners’ preferred styles should dictate instruction, though researchers have known for several decades that this is inaccurate.28 While learners have preferred styles, effective instruction matches the content, not learning styles.
2020 年的一项审查发现,89% 的人认为学习者喜欢的风格应该决定教学,尽管研究人员几十年来一直知道这是不准确的。28 虽然学习者有自己喜欢的风格,但有效的教学与内容相匹配,而不是与学习风格相匹配。

A science class should use graphs to present data rather than verbal descriptions, regardless of visual or auditory learning styles, just like cooking classes should use hands-on practice rather than reading, whether learners prefer a kinesthetic style or not.
无论视觉或听觉学习方式如何,科学课都应该使用图表而不是口头描述来呈现数据,就像烹饪课应该使用动手练习而不是阅读一样,无论学习者是否喜欢动觉风格。

Decades of research into cognitive psychology, education, and programming education provide strong insights into how we learn.
数十年来对认知心理学、教育和编程教育的研究为我们的学习方式提供了深刻的见解。

The next 10 sections of this article provide research-backed findings about learning that apply to software developers and discuss their practical implications. This information can help with learning for yourself, teaching junior staff, and recruiting staff.
本文接下来的 10 个部分提供了适用于软件开发人员的有研究依据的学习结果,并讨论了它们的实际意义。这些信息可以帮助自己学习、教授初级员工和招聘员工。

Key Insights 关键见解

  • Learning is vital for programmers, but the human mind works quite differently than a computer.
    学习对程序员来说至关重要,但人类大脑的工作方式与计算机完全不同。

  • Understanding how humans learn can help you learn more effectively.
    了解人类的学习方式可以帮助您更有效地学习。

  • The Internet and LLMs have not made learning obsolete; learning is essential and takes time.
    互联网并没有LLMs使学习过时;学习是必不可少的,需要时间。

  • Expertise changes how you think, letting you solve problems more easily but also potentially hindering your ability to teach.
    专业知识会改变您的思维方式,让您更轻松地解决问题,但也可能会阻碍您的教学能力。

1. Human Memory Is Not Made of Bits
1. 人类的记忆不是由比特组成的

Human memory is central to learning. As Kirschner and Hendrick put it, “Learning means that there has been a change made in one’s long-term memory.”20 Software developers are familiar with the incredible power of computer memory, where we can store a series of bits and later retrieve that exact series of bits. While human memory is similar, it is neither as precise nor as reliable.
人类的记忆是学习的核心。正如 Kirschner 和 Hendrick 所说,“学习意味着一个人的长期记忆发生了变化。20 软件开发人员熟悉计算机内存的惊人力量,我们可以在其中存储一系列位,然后检索该确切的位系列。虽然人类的记忆很相似,但它既不精确也不可靠。

Due to the biological complexity of human memory, reliability is a complicated matter. With computer memory, we use two fundamental operations: read and write. Reading computer memory does not modify it, and it does not matter how much time passes between writes and reads.
由于人类记忆的生物学复杂性,可靠性是一个复杂的问题。对于计算机内存,我们使用两个基本操作:读取和写入。读取计算机内存不会修改它,并且写入和读取之间经过多少时间无关紧要。

Human long-term memory is not as sterile: Human memory seems to have a “read-and-update” operation, wherein fetching a memory can both strengthen and modify it—a process known as reconsolidation. This modification is more likely on recently formed memories. Because of this potential for modification, a fact does not exist in a binary state of either definitively known or unknown; it can exist in intermediate states.
人类的长期记忆并不那么无菌:人类的记忆似乎有一个“读取和更新”操作,其中获取记忆既可以加强又可以修改它——这个过程被称为重新巩固。这种修改更可能发生在最近形成的记忆中。由于这种修改的可能性,事实不存在于确定已知或未知的二进制状态中;它可以以中间状态存在。

We can forget things we previously knew, and knowledge can be unreliable, especially when recently learned.
我们可能会忘记以前知道的事情,而知识可能不可靠,尤其是最近学习的知识。

Human memory seems to have a “read-and-update” operation, wherein fetching a memory can both strengthen it and modify it.
人类的记忆似乎有一个 “read-and-update” 操作,其中获取记忆既可以增强它,也可以修改它。

Another curious feature of human memory is “spreading activation.”1 Our memories are stored in interconnected neural pathways. When we try to remember something, we activate a pathway of neurons to access the targeted information. However, activation is not contained within one pathway.
人类记忆的另一个奇怪特征是“传播激活”。1 我们的记忆存储在相互关联的神经通路中。当我们试图记住某事时,我们会激活神经元通路来访问目标信息。然而,激活并不包含在一个通路中。

Some of the activation energy spreads to other connected pathways, like heat radiating from a hot water pipe. This spreading activation leaves related pathways primed for activation for hours.1
一些活化能扩散到其他连接的途径,例如从热水管辐射的热量。这种扩散的激活使相关通路为激活做好准备数小时。1

Spreading activation has a negative implication for memory1 and a positive implication for problem-solving.32 Spreading activation means that related, but imprecise, information can become conflated with the target information, meaning our recall of information can be unreliable.
扩展激活对记忆1 有负面影响,对解决问题有积极影响。32 传播激活意味着相关但不精确的信息可能会与目标信息混为一谈,这意味着我们对信息的回忆可能不可靠。

However, spreading activation is also associated with insight-based problem solving, or “ah-ha moments.” Because pathways stay primed for hours, sometimes stepping away from a problem to work on a different problem with its own spreading activation causes two unrelated areas to connect in the middle.
然而,传播激活也与基于洞察力的问题解决或 “顿悟时刻” 有关。因为通路会保持几个小时的准备状态,所以有时会从一个问题中抽身出来,用它自己的扩散激活来解决另一个问题,这会导致两个不相关的区域在中间连接起来。

When two previously unrelated areas connect, creative and unique solutions to problems can arise. This is why walks, showers, or otherwise spending time away from the problem can help you get unstuck in problem solving.
当两个以前不相关的领域连接起来时,就会出现创造性和独特的问题解决方案。这就是为什么散步、淋浴或以其他方式远离问题可以帮助您摆脱解决问题的困境。

In summary, human memory does not work by simply storing and retrieving from a specific location like computer memory. Human memory is more fragile and more unreliable, but it can also have great benefits in problem solving and deep understanding by connecting knowledge together.
总之,人类内存不是简单地从计算机内存等特定位置存储和检索来工作的。人类的记忆更脆弱、更不可靠,但通过将知识连接在一起,它也可以在解决问题和深入理解方面有很大的好处。

We will elaborate further on this in later sections, especially on retrieving items from memory and strengthening memories.
我们将在后面的章节中进一步详细说明这一点,特别是关于从记忆中检索物品和加强记忆。

Human memory does not work by simply storing and retrieving from a specific location like computer memory.
人类记忆不能简单地从计算机内存等特定位置存储和检索来工作。

2. Human Memory Is Composed of One Limited and One Unlimited System
阿拉伯数字。 人类的记忆由一个有限和一个无限的系统组成

Human memory has two main components that are relevant to learning: long-term memory and working memory. Long-term memory is where information is permanently stored and is functionally limitless;1 in that sense, it functions somewhat like a computer’s disk storage. Working memory, in contrast, is used to consciously reason about information to solve problems;2 it functions like a CPU’s registers, storing a limited amount of information in real time to allow access and manipulation.
人类记忆有两个与学习相关的主要组成部分:长期记忆工作记忆。长期记忆是信息永久存储的地方,在功能上是无限的;1 从这个意义上说,它的功能有点像计算机的磁盘存储。相比之下,工作记忆用于有意识地推理信息以解决问题;2 它的功能类似于 CPU 的寄存器,实时存储有限量的信息以允许访问和操作。

Working memory is limited, and its capacity is roughly fixed at birth.2 While higher working-memory capacity is related to higher general intelligence, working-memory capacity is not the be-all and end-all for performance.22 Higher capacity enables faster learning, but our unlimited long-term memory removes limitations on how much we could ultimately learn in total.1 Expert programmers may have low or high working memory capacity but it is the contents of their long-term memory that make them experts.
工作记忆是有限的,其容量在出生时大致是固定的。2 虽然更高的工作内存容量与更高的通用智能有关,但工作内存容量并不是性能的全部和最终目的。22 更高的容量可以更快地学习,但我们无限的长期记忆消除了我们最终可以学习的总量的限制。1 专家级程序员的工作内存容量可能较低或较高,但正是他们的长期记忆内容使他们成为专家。

As people learn more about a topic, they relate information together into chunks.a Chunking allows the multiple pieces of information to act as one piece of information in working memory.
随着人们对某个主题了解得更多,他们会将信息关联成块a Chunking 允许多条信息在工作内存中充当一条信息。

For example, when learning an email address, a familiar domain, such as gmail.com, is treated as one piece of information instead of a random string of characters, like xvjki.wmt. Thus, the more information that is chunked, the larger working memory is functionally.38 Using our computer analogy, our working memory/CPU registers may only let us store five pointers to chunks in long-term memory/disk, but there is no limit on the size of the chunks, so the optimal strategy is to increase the size of the chunks by practicing using information and solving problems.
例如,在识别电子邮件地址时,熟悉的域(如 gmail.com)被视为一条信息,而不是随机字符串(如 xvjki.wmt)。因此,分块的信息越多,工作内存在功能上就越大。38 使用我们的计算机类比,我们的工作内存/CPU 寄存器可能只允许我们在长期内存/磁盘中存储五个指向块的指针,但块的大小没有限制,因此最佳策略是通过练习使用信息和解决问题来增加块的大小。

When learning new tools or skills, it is important to understand the cognitive load, or amount of working memory capacity, demanded by the task. Cognitive load has two parts: intrinsic load and extraneous load. Intrinsic load is how many pieces of information or chunks are inherently necessary to achieve the task, and it cannot be changed except by changing the task. In contrast, extraneous cognitive load is unnecessary information that, nevertheless, is part of performing the task.
在学习新工具或技能时,了解任务所需的认知负荷或工作记忆容量非常重要。认知负荷有两部分:内在负荷外来负荷。内在负载是完成任务固有需要的信息或块的数量,除非通过更改任务,否则无法更改。相比之下,外来的认知负荷是不必要的信息,但它是执行任务的一部分。

Presentation format is an example of how extraneous cognitive load can vary.
演示格式是外来认知负荷如何变化的一个例子。

If you are implementing a database schema, it is easier to use a diagram with tables and attributes than a plain English description—the latter has higher extraneous load because you must mentally transform the description into a schema, whereas the diagram can be mapped directly (see Figure 1). Extraneous load is generally higher for beginners because they cannot distinguish between intrinsic and extraneous information easily.
如果您正在实现数据库模式,那么使用带有表格和属性的图表比使用简单的英文描述更容易 — 后者具有更高的外部负载,因为您必须在脑海中将描述转换为模式,而图表可以直接映射(参见图 1)。对于初学者来说,外来负载通常更高,因为他们无法轻松区分内在信息和外在信息。

Two ways of presenting the same database schema description with differing extraneous cognitive load.
两种表示相同数据库架构描述的方式,具有不同的外部认知负载。
The dashed box on the left contains exactly the same information as the awkward textual description in the dashed box on the right. But if a developer only received one of the two to create an SQL database, they are likely to find the diagram easier than the text.
左侧的虚线框包含的信息与右侧虚线框中尴尬的文本描述完全相同。但是,如果开发人员只收到两者中的一个来创建 SQL 数据库,他们可能会比文本更容易找到图表。

We say that the text here has a higher extraneous cognitive load.
我们说这里的文本具有更高的外来认知负荷。

When faced with a task that seems beyond a person’s abilities, it is important to recognize that this can be changed by reorganizing the task.
当面临一项似乎超出一个人能力范围的任务时,重要的是要认识到这可以通过重新组织任务来改变。

Decomposing the problem into smaller pieces that can be processed and chunked will ultimately allow the person to solve complex problems. This principle should be applied to your own practice when facing problems at the edge of or beyond your current skills, but it is especially relevant when working with junior developers and recruits.
将问题分解成可以处理和分块的小块,最终将使人们能够解决复杂的问题。当面临当前技能的边缘或超出您当前技能的问题时,这一原则应该适用于您自己的实践,但在与初级开发人员和新员工合作时尤其重要。

3. Experts Recognize, Beginners Reason
3. 专家认可,初学者推理

One key difference between beginners and experts is that experts have seen it all before. Research into chess experts has shown that the primary advantage of experts is that they remember and recognize the state of the board. This allows them to decide how to respond more quickly and with less effort.15 Kahneman19,b describes cognition as being split into “system 1” and “system 2” (thus proving that it’s not only developers who struggle with naming things).
初学者和专家之间的一个关键区别是专家以前都见过。对国际象棋专家的研究表明,专家的主要优势是他们记住并识别棋盘的状态。这使他们能够决定如何更快、更轻松地做出响应。15 Kahneman19b 将认知描述为分为“系统 1”和“系统 2”(从而证明不仅仅是开发人员在为事物命名而苦苦挣扎)。

System 1 is fast and driven by recognition, relying upon pattern recognition in long-term memory, while system 2 is slower and focused on reasoning, requiring more processing in working memory. This is part of a general idea known as dual-process theories.34
系统 1 速度快,由识别驱动,依赖于长期记忆中的模式识别,而系统 2 速度较慢,专注于推理,需要在工作记忆中进行更多处理。这是称为双过程理论的一般思想的一部分。34

Expert developers can reason at a higher level by having memorized (usually implicitly, from experience) common patterns in program code, which frees up their cognition.4 One such instance of this is “design patterns” in programming, similar to previously discussed chunks.
专家开发人员可以通过记住(通常是从经验中隐式地记住)程序代码中的常见模式来在更高层次上进行推理,从而释放他们的认知能力。4 编程中的“设计模式”就是这样一个例子,类似于前面讨论的块。

An expert may immediately recognize that a particular piece of code is carrying out a sorting algorithm, while a beginner might read line by line to try to understand the workings of the code without recognizing the bigger picture.
专家可能会立即意识到特定代码段正在执行排序算法,而初学者可能会逐行阅读以尝试理解代码的工作原理,而不会认识到更大的图景。

Expert developers can reason at a higher level by having memorized common patterns in program code, which frees up their cognition.
专家开发人员可以通过记住程序代码中的常见模式来在更高层次上进行推理,从而释放他们的认知能力。

A corollary to this is that beginners can become experts by reading and understanding a lot of code. Experts build up a mental library of patterns that let them read and write code more easily in the future.
一个必然的结果是,初学者可以通过阅读和理解大量代码来成为专家。专家们建立了一个模式的心理库,让他们将来可以更轻松地读取和编写代码。

Seeing purely imperative C code may only partially apply to functional Haskell code, so seeing a variety of programming paradigms will help further.
看到纯粹的命令式 C 代码可能只部分适用于函数式 Haskell 代码,因此看到各种编程范式将进一步提供帮助。

Overall, this pattern matching is the reason that reading and working with more code, and more types of code, will increase proficiency at programming.
总的来说,这种模式匹配是阅读和使用更多代码和更多类型的代码将提高编程熟练程度的原因。

4. Understanding a Concept Goes from Abstract to Concrete and Back
4. 理解一个概念从抽象到具体,再回到抽象

Research shows that experts deal with concepts in different ways than beginners.
研究表明,专家处理概念的方式与初学者不同。

Experts use generic and abstract terms that look for underlying concepts and do not focus on details, whereas beginners focus on surface details and have trouble connecting these details to the bigger picture. These differences affect how experts reason but also how they learn.
专家使用通用和抽象的术语来寻找基本概念,不关注细节,而初学者则专注于表面细节,难以将这些细节与更大的图景联系起来。这些差异会影响专家的推理方式,也会影响他们的学习方式。

For example, when explaining a variadic function in Python to someone new to the concept, experts might say that it is a function that can take a varying number of arguments.
例如,当向不熟悉该概念的人解释 Python 中的可变参数函数时,专家可能会说它是一个可以接受不同数量参数的函数。

A beginner may focus on details such as the exact syntax for declaring and calling the function and may think that passing one argument is a special case. An expert may more easily understand or predict the details while having the concept explained to them.
初学者可能会关注细节,例如声明和调用函数的确切语法,并且可能会认为传递一个参数是一种特殊情况。专家在向他们解释概念时可能更容易理解或预测细节。

When you are learning a new concept, you will benefit from both forms of explanation: abstract features and concrete details with examples. More specifically, you will benefit from following the semantic wave, a concept defined by Australian scientist Karl Maton,25 as illustrated by Figure 2.
当您学习一个新概念时,您将从两种形式的解释中受益:抽象特征和带有示例的具体细节。更具体地说,您将受益于遵循语义波,这是澳大利亚科学家 Karl Maton 定义的概念,25 如图 2 所示。

The semantic wave for variadic functions.
可变参数函数的语义波。

Following the semantic wave, you continuously switch between the abstract definition and several diverse examples of the concept. The more diverse the examples are, the better. Even wrong examples are beneficial when compared to correct examples to understand why they are wrong,23 such as seeing a mutable variable labeled as non-constant when trying to learn what a constant is. This process is called unpacking.
跟随语义波,您可以在抽象定义和概念的几个不同示例之间不断切换。例子越多样化越好。与正确的示例相比,即使是错误的示例也是有益的,可以理解它们为什么是错误的,23 例如在尝试了解什么是常量时看到标记为非常量的可变变量。此过程称为解包。

With these diverse examples, you can then (re)visit the abstract definition and construct a deeper understanding of the concept.
通过这些不同的示例,您可以(重新)访问抽象定义并构建对概念的更深入理解。

Deeper understanding stems from recognizing how multiple details from the examples connect to the one abstract concept in the definition, a process called repacking.
更深入的理解源于认识到示例中的多个细节如何与定义中的一个抽象概念相关联,这个过程称为重新打包

Programming frequently involves learning about abstract concepts. Faced with an abstract concept to learn, such as functions, people often reach for concrete instantiations of the concept to examine, for example, the abs function that returns the absolute value of a number.17 One challenge is that as concepts get more abstract (from values to variables/objects to functions/classes to higher-order functions/metaclasses and eventually category theory), the distance to a concrete example increases.
编程经常涉及学习抽象概念。面对一个需要学习的抽象概念(例如函数),人们通常会寻求概念的具体实例来检查,例如,返回数字绝对值的 abs 函数。17 一个挑战是,随着概念变得更加抽象(从值到变量/对象到函数/类到高阶函数/元类,最后到范畴论),与具体示例的距离会增加。

The saving grace is that as we learn abstract concepts, they become more concrete to us. Initially, a function is an abstract concept, but after much practice, a function becomes a concrete item (or chunk) to us and we can learn the next level of abstraction.
值得庆幸的是,随着我们学习抽象概念,它们对我们来说变得更加具体。最初,函数是一个抽象的概念,但经过大量实践,函数对我们来说变成了一个具体的项目(或块),我们可以学习下一级别的抽象。

5. Spacing and Repetition Matter
5. 间距和重复很重要

How often have you heard that you should not cram for an exam? Unless, of course, you want to forget everything by the next day. This advice is based on one of the most predictable and persistent effects in cognitive psychology: the spacing effect.10 According to the spacing effect, humans learn problem-solving concepts best by spacing out their practice across multiple sessions, multiple days, and ideally, multiple weeks.
你有多少次听说你不应该为考试补习?当然,除非你想在第二天忘记一切。这个建议基于认知心理学中最可预测和最持久的效应之一:间距效应。10 根据间隔效应,人类通过将他们的练习间隔多次、多天,最好是多周来学习解决问题的概念。

The reason spacing works is due to the relationship between long-term and working memory previously described in this article. When learners practice solving problems, they practice two skills.
间距起作用的原因是由于本文前面描述的长期记忆和工作记忆之间的关系。当学习者练习解决问题时,他们会练习两项技能。

First, matching the information in the problem to a concept that can solve it (such as a filtering loop), and second, applying the concept to solve the problem (such as writing the loop).
首先,将问题中的信息与可以解决问题的概念(例如过滤循环)进行匹配,其次,应用概念来解决问题(例如编写循环)。

The first skill requires activating the correct neural pathway to the concept in long-term memory.5 If learners repeatedly solve the same kind of problem, such as for-each loop problems, then that pathway to long-term memory stays active, and they miss practicing the first skill.
第一项技能需要在长期记忆中激活通往概念的正确神经通路。5 如果学习者重复解决同一类型的问题,例如 for-each 循环问题,那么通往长期记忆的途径就会保持活跃,他们就会错过练习第一项技能的机会。

A common result of un-spaced practice is that people can solve problems, but only when they are told which concept to use.5 While interleaving different types of problems, such as loop and conditional problems, can help, pathways take time to return to baseline, making spacing necessary to get the most out of practice time.10 In addition, the brain needs rest to consolidate the new information that has been processed so that it can be applied to new problems.
无间隔实践的一个常见结果是人们可以解决问题,但前提是他们被告知要使用哪个概念。5 虽然交错不同类型的问题(例如循环和条件问题)会有所帮助,但路径需要时间才能回到基线,因此需要间隔才能充分利用练习时间。10 此外,大脑需要休息来巩固已经处理的新信息,以便将其应用于新问题。

Going against this time-tested principle, intensive coding bootcamps require learners to cram their problem-solving practice into un-spaced sessions.
与这一久经考验的原则相反,强化编码训练营要求学习者将他们解决问题的练习塞进不间隔的课程中。

While this is not ideal, researchers of the spacing effect have known from the beginning that most learners still prefer to cram their practice into as little time as possible.10 For people whose only viable option to learn programming is intensive bootcamps, we can apply the spacing research to maximize their outcomes.
虽然这并不理想,但间隔效应的研究人员从一开始就知道,大多数学习者仍然喜欢将练习塞进尽可能少的时间。10 对于那些学习编程的唯一可行选择是强化训练营的人,我们可以应用间距研究来最大限度地提高他们的成果。

To structure a day of learning, learners should limit learning bouts to 90 minutes or less.21 The neurochemical balance in the brain makes concentration difficult after this point.21 After each learning bout, take at least 20 minutes to rest.21 Really rest by going for a walk or sitting quietly—without working on other tasks, idly browsing the Internet, or chatting with others. Rest speeds up the consolidation process, which also happens during sleep.
为了安排一天的学习,学习者应将学习时间限制在 90 分钟或更短。21 大脑中的神经化学平衡使这之后难以集中注意力。21 每次学习后,至少要花 20 分钟休息。21 真正休息,散步或安静地坐着——不要做其他事情,不要闲着浏览互联网或与他人聊天。休息会加速巩固过程,这也发生在睡眠期间。

Within a learning bout, there are a couple of strategies to maximize efficiency. First, randomize the order of the type of problem being solved so that different concepts are being activated in long-term memory.5 Be forewarned, though, that randomizing the order improves learning outcomes but requires more effort.6 The second strategy is to take short breaks at random intervals to enhance memory consolidation. A 10-second break every 2-5 minutes is recommended.18
在学习回合中,有几种策略可以最大限度地提高效率。首先,随机化要解决的问题类型的顺序,以便在长期记忆中激活不同的概念。5 但请注意,随机化顺序可以提高学习成果,但需要付出更多努力。6 第二种策略是随机休息片刻,以增强记忆巩固。建议每 2-5 分钟休息 10 秒。18

6. The Internet Has Not Made Learning Obsolete
6. 互联网并没有让学习过时

The availability of programming knowledge changed with the advent of the Internet. Knowledge about syntax or APIs went from being buried in reference books to being a few keystrokes away.
随着 Internet 的出现,编程知识的可用性发生了变化。有关语法或 API 的知识从埋没在参考书中变成了只需敲击几下键盘即可。

Most recently, AI-powered tools such as ChatGPT, Codex, and GitHub Copilot will even fill in these details (mostly accurately) for you.
最近,ChatGPT、Codex 和 GitHub Copilot 等人工智能驱动的工具甚至会为您(大部分准确)填写这些详细信息。

This raises an obvious question: Why is it worth learning details—or anything at all—if the knowledge is available from the Internet within seconds?
这就提出了一个明显的问题:如果知识可以在几秒钟内从 Internet 上获得,为什么值得学习细节 — 或者根本不值得学习?

We learn by storing pieces of knowledge in our long-term memory and forming connections between them.1 If the knowledge is not present in the brain, because you have not yet learned it well, the brain cannot form any connections between it, so higher levels of understanding and abstraction are not possible.1 If every time you need a piece of code to do a database join you search online for it, insert it, and move on, you will be unlikely to learn much about joins.
我们通过将知识片段存储在长期记忆中并在它们之间建立联系来学习。1 如果知识不在大脑中,因为你还没有学好它,大脑就无法在它之间形成任何连接,所以更高层次的理解和抽象是不可能的。1 如果每次你需要一段代码来做数据库连接时,你都在网上搜索它,插入它,然后继续,你不太可能学到很多关于连接的知识。

The wisdom of relying on the Internet or AI differs between beginners and experts: There is a key distinction between a beginner who has never learned the details and thus lacks the memory connections, and an expert who has learned the deeper structure but searches for the forgotten fine details.1
依赖互联网或 AI 的智慧在初学者和专家之间有所不同:从未学习过细节因此缺乏记忆连接的初学者与学习了更深层次的结构但寻找被遗忘的精细细节的专家之间存在关键区别。1

There is even some evidence to suggest that searching the Internet is less efficient for remembering information. One study found that information was remembered less well if it was found via the Internet (compared to a physical book).11 Another found that immediately searching the Internet led to worse recall of the same information later, compared to first trying to think of the answer before resorting to searching.14 It seems that searching may rob the brain of the benefits of the memory-strengthening effect of recalling information.
甚至有一些证据表明,在 Internet 上搜索记住信息的效率较低。一项研究发现,如果通过互联网找到信息(与实体书相比),则信息的记忆力会降低。11 另一项研究发现,与先尝试思考答案再求助于搜索相比,立即搜索互联网会导致以后对相同信息的回忆更差。14 看来,搜索可能会剥夺大脑从回忆信息增强记忆力的好处。

There is also the issue of cognitive load discussed earlier.
还有前面讨论的认知负荷问题。

An Internet search requires a form of context switching for the brain; its limited attention and working memory must be switched from the task at hand (programming) to a new cognitive task (searching the Internet and selecting a result or evaluating an AI-generated result).
互联网搜索需要大脑的一种上下文切换形式;它有限的注意力和工作记忆必须从手头的任务(编程)切换到新的认知任务(互联网搜索并选择结果或评估 AI 生成的结果)。

If the required knowledge is instead memorized, then not only is access much faster (like using a cache versus fetching from a hard disk), but it also avoids the cognitive drain of context switching and filtering out extraneous information from the search.
如果记住了所需的知识,那么不仅访问速度要快得多(就像使用缓存而不是从硬盘获取一样),而且还避免了上下文切换和从搜索中过滤掉无关信息的认知消耗。

So there are multiple reasons to memorize information, despite it being available on the Internet.
因此,记住信息有多种原因,尽管它在 Internet 上可用。

7. Problem-Solving Is Not a Generic Skill
7. 解决问题不是一项通用技能

Problem-solving is a large part of programming. One common (but incorrect) idea in software development is to directly teach problem-solving as a specific skill, which can then be applied to different aspects of development (design, debugging, and so on).
解决问题是编程的重要组成部分。软件开发中一个常见(但不正确的)想法是将解决问题作为一项特定技能直接教授,然后可以将其应用于开发的不同方面(设计、调试等)。

Thus, problem-solving is (incorrectly) conceived as a generic skill. However, this is not how problem-solving works in the brain.
因此,解决问题被(错误地)视为一种通用技能。然而,这不是大脑中解决问题的方式。

Problem-solving is (incorrectly) conceived as a generic skill. However, this is not how problem-solving works in the brain.
解决问题(错误地)被认为是一种通用技能。然而,这不是大脑中解决问题的方式。

While humans do have some generic problem-solving skills, they are much less efficient than domain-specific problem-solving skills, such as being able to debug programs. While we can learn to reason, we do not learn how to solve problems in general.
虽然人类确实具有一些通用的问题解决技能,但它们的效率远低于特定领域的问题解决技能,例如能够调试程序。虽然我们可以学会推理,但我们并没有学会如何解决一般的问题。

Instead, we learn how to solve programming problems, or how to plan the best chess move, or how to create a knitting pattern. Each of these skills is separate and does not influence the others.
相反,我们学习如何解决编程问题,或如何规划最佳国际象棋移动,或如何创建编织图案。这些技能中的每一项都是独立的,不会影响其他技能。

Research into chess found little or no effect of learning it on other academic and cognitive skills, and the same is true for music instruction and cognitive training.36 This inability to transfer problem-solving skills is why “brain training” is ineffective for developing general intelligence.29
对国际象棋的研究发现,学习国际象棋对其他学术和认知技能的影响很小或没有影响,音乐教学和认知训练也是如此。36 这种无法转移解决问题的技能就是“大脑训练”对发展一般智力无效的原因。29

The one exception to this rule appears to be spatial skills. Spatial skills allow us to visualize objects in our mind, like a Tetris shape, and mentally manipulate those objects, like rotating a Tetris shape.
这条规则的一个例外似乎是空间技能。空间技能使我们能够在脑海中想象物体,例如俄罗斯方块形状,并在脑海中操纵这些物体,例如旋转俄罗斯方块形状。

Training these generic skills can improve learning in other disciplines. This phenomenon is so unusual that it has caused much consternation in cognitive and learning sciences.24 Yet, spatial training improves performance on a range of non-verbal skills regardless of initial ability, age, or type of training task.40 Recent work has even demonstrated that spatial training can improve efficiency for professional software developers, likely because they are still learning new concepts.30 Even with this strange exception, the best way to learn how to solve programming problems is still to practice solving programming problems rather than looking for performance benefits from learning chess or other cognitive training.
训练这些通用技能可以改善其他学科的学习。这种现象非常不寻常,以至于在认知和学习科学中引起了很大的惊愕。24 然而,空间训练可以提高一系列非语言技能的表现,无论初始能力、年龄或训练任务类型如何。40 最近的工作甚至表明,空间训练可以提高专业软件开发人员的效率,这可能是因为他们仍在学习新概念。30 即使有这个奇怪的例外,学习如何解决编程问题的最佳方法仍然是练习解决编程问题,而不是从学习国际象棋或其他认知训练中寻求性能优势。

There is a secondary implication here for recruitment. One popular idea for screening programming candidates was to give brain-teaser puzzles, such as how to weigh a jumbo jet. As Google worked out by 2013, this is a waste of time7—there is no reliable correspondence between problem-solving in the world of brain teasers and problem-solving in the world of programming. If you want to judge programming ability, assess programming ability.
这里对 recruitment 有次要影响。筛选编程候选人的一个流行想法是给出脑筋急转弯的谜题,例如如何称量大型喷气式飞机。正如 Google 在 2013 年发现的那样,这是浪费时间7 — 脑筋急转弯世界中的问题解决与编程世界中的问题解决之间没有可靠的对应关系。如果要判断编程能力,请评估编程能力。

8. Expertise Can Be Problematic in Some Situations
8. 在某些情况下,专业知识可能会有问题

We have discussed many ways in which expertise benefits learning and performance. However, being an expert can also lead to problems, as we will detail in this section.
我们已经讨论了专业知识有益于学习和绩效的许多方式。但是,成为专家也会导致问题,我们将在本节中详细介绍。

Programmers use tools and aids to be more effective, such as version control systems or IDEs. Such tools can have different effects on beginners and experts.
程序员使用工具和辅助工具(例如版本控制系统或 IDE)来提高效率。此类工具对初学者和专家可能产生不同的影响。

Beginners may get overwhelmed by the amount of options available in professional tools (due to increased cognitive load) and may benefit from beginner-friendly hints on how to use the tool.
初学者可能会被专业工具中可用的选项数量所淹没(由于认知负荷增加),并且可能会从有关如何使用该工具的初学者友好提示中受益。

However, experts find the same hints more distracting than useful because they already know what to do. This is known as the expertise-reversal effect: Hints and guides that help beginners can get in the way of experts and make them less productive.
然而,专家们发现相同的提示更能分散注意力而不是有用,因为他们已经知道该怎么做。这被称为专业知识反转效应:帮助初学者的提示和指南可能会妨碍专家并降低他们的工作效率。

Programmers usually learn multiple programming languages throughout their careers. Knowing multiple languages can be beneficial once they have been mastered, but sometimes transferring knowledge from one programming language to another can lead to faulty knowledge.
程序员通常会在其整个职业生涯中学习多种编程语言。一旦掌握了多种语言,了解它们可能是有益的,但有时将知识从一种编程语言转移到另一种编程语言可能会导致知识错误。

For example, a programmer may learn about inheritance in Java, where one method overrides a parent method as long as the signatures match, and transfer this knowledge to C++, where overriding a parent method additionally requires that the parent method is declared virtual.
例如,程序员可能会学习 Java 中的继承,其中只要签名匹配,一种方法就会覆盖父方法,并将此知识转移到 C++,其中覆盖父方法还需要将父方法声明为 virtual。

These kinds of differences—where features are similar in syntax but different in semantics between languages—specifically hinder the transfer of knowledge.39
这些类型的差异(其中语言之间的特征在语法上相似,但在语义上不同)特别阻碍了知识的传递。39

Experts often help to train beginners, but experts without experience in training others often do not realize that beginners think differently. Thus, they fail to tailor their explanations for someone with a different mental model.
专家经常帮助培训初学者,但没有培训他人经验的专家往往没有意识到初学者的想法不同。因此,他们无法为具有不同心智模式的人量身定制他们的解释。

This is known as the expert blind-spot problem: difficulty in seeing things through the eyes of a beginner once you have become an expert. It can be overcome by listening carefully to beginners explain their current understanding and tailoring explanations accordingly.
这就是所谓的专家盲点问题:成为专家后,就难以通过初学者的眼睛看问题。可以通过仔细聆听初学者解释他们目前的理解并相应地调整解释来克服它。

Sometimes, however, knowledge becomes so automated that it is difficult for experts to verbalize it.1 This automated knowledge is why experts have intuitions about how to solve problems or explain their process as, “I just know.” In these cases of tacit knowledge, beginners might better learn from instructional materials designed to support beginners, often called scaffolded instruction, or from a peer rather than an expert.
然而,有时知识会变得如此自动化,以至于专家很难用语言来表达。1 这种自动化知识就是为什么专家对如何解决问题有直觉,或者将他们的过程解释为“我就是知道”。在这些隐性知识的情况下,初学者可能最好从旨在支持初学者的教学材料中学习,通常称为脚手架式教学,或者从同伴而不是专家那里学习。

A more knowledgeable (but still relatively novice) peer is a highly valuable resource to bridge the gap between beginners and experts. They can help the beginner develop new knowledge and the expert to rediscover automated knowledge.
知识更渊博(但仍然相对新手)的同行是弥合初学者和专家之间差距的非常有价值的资源。他们可以帮助初学者开发新知识,并帮助专家重新发现自动化知识。

9. The Predictors of Programming Ability Are Unclear
9. 编程能力的预测因子尚不清楚

The success of learning programming, like most activities, is built on a mix of inherent aptitude and practice.
与大多数活动一样,学习编程的成功是建立在内在才能和实践相结合的基础上的。

Some people believe it is purely about aptitude—the “you’re born with it” view—and some believe it is almost entirely about practice—the “10,000 hours” idea that only sufficient practice is required for expertise.
有些人认为这纯粹是关于能力的——“你天生就有”的观点——有些人认为这几乎完全是关于实践的——“10,000 小时”的想法,即只需要足够的实践来获得专业知识。

Both extreme views are wrong, and in this section, we will explore the evidence for the differing effects of aptitude and practice.
这两种极端观点都是错误的,在本节中,我们将探讨能力和实践的不同影响的证据。

There has been much research to try to predict programming aptitude but few reliable results. Attempts to produce a predictive test for programming ability have generally come to naught.
有很多研究试图预测编程能力,但很少有可靠的结果。对编程能力进行预测测试的尝试通常以失败告终。

Research has found that all of the following fail to predict programming ability: gender, age, academic major, race, prior performance in math, prior experience with another programming language, perceptions of CS, and preference for humanities or sciences.35 There was an industry of aptitude tests for programming that began in the 1960s, but as Robins33 summarizes, the predictive accuracy was poor and the tests fell out of use.
研究发现,以下所有因素都无法预测编程能力:性别、年龄、学术专业、种族、以前的数学表现、以前使用另一种编程语言的经验、对 CS 的看法以及对人文或科学的偏好。35 从 1960 年代开始,编程能力测试行业开始出现,但正如 Robins33 所总结的那样,预测准确性很差,测试不再使用。

Attempts to produce a predictive test for programming ability have generally come to naught.
对编程能力进行预测测试的尝试通常以失败告终。

There is mixed evidence for the importance of years of experience, which relates to practice. There is a correlation between the reputation of programmers on Stack Overflow and their age: older people have a higher reputation.27 However, a recent study found only a weak link between years of experience and success on a programming task among programmers who were relatively early in their careers,31 suggesting that aptitude may have a stronger effect than experience, at least early in programmers’ careers.
关于多年经验的重要性,有好坏参半的证据,这与实践有关。程序员在 Stack Overflow 上的声誉与其年龄之间存在相关性:老年人的声誉更高。27 然而,最近的一项研究发现,在职业生涯相对较早期的程序员中,多年的经验与编程任务的成功之间的联系很弱,31 这表明能力可能比经验具有更强的影响,至少在程序员职业生涯的早期是这样。

As in most domains, two factors that weakly predict success in early programming are general intelligence (see section 4) and working memory capacity.4 These factors roughly represent reasoning skills and how much information a learner can process at once. As such, they predict the rate of learning rather than absolute ability. A sub-measure of these two factors, spatial reasoning, is a stronger predictor of success in programming, though still quite moderate.30 Spatial reasoning also predicts success in other science and math fields,24 so this is not programming-specific. Further, these weak-to-moderate correlations largely disappear with increased experience for various reasons. Thus, intelligent people will not always make good programmers, and good programmers need not be high in general intelligence.
与大多数领域一样,弱预测早期编程成功的两个因素是一般智力(见第 4 节)和工作记忆容量。4 这些因素大致代表了推理技能和学习者一次可以处理多少信息。因此,他们预测的是学习速度而不是绝对能力。这两个因素的一个子度量,即空间推理,是编程成功的更强预测指标,尽管仍然相当适中。30 空间推理还可以预测其他科学和数学领域的成功,24 所以这不是特定于编程的。此外,由于各种原因,这些弱到中度的相关性在很大程度上随着经验的增加而消失。因此,聪明的人并不总是会成为优秀的程序员,而优秀的程序员也不需要具有很高的总体智力。

Intelligent people will not always make good programmers, and good programmers need not be high in general intelligence.
聪明的人并不总是能成为优秀的程序员,而优秀的程序员也不需要具备较高的一般智力。

In short, it is very hard to predict who will be able to program, especially in the long term. Programmers could come from any background or demographic, and links to any other factors (such as intelligence) are generally fleeting in the face of experience.
简而言之,很难预测谁将能够编程,尤其是从长远来看。程序员可能来自任何背景或人口统计,与任何其他因素(例如智力)的联系在经验面前通常是转瞬即逝的。

Therefore, in recruiting new programmers, there are no shortcuts to identifying programming ability, nor are there any reliable “candidate profiles” to screen candidates for programming ability.
因此,在招聘新的程序员时,没有识别编程能力的捷径,也没有任何可靠的“候选人档案”来筛选候选人的编程能力。

10. Your Mindset Matters
10. 你的心态很重要

There is a long-standing idea of a binary split in programming ability: You either can program or you cannot. There have been many competing theories behind this. One of the more compelling theories is the idea of learning edge momentum,33 that each topic is dependent on previous topics, so once you fall behind you will struggle to catch up. A less compelling theory is the idea of a “geek gene” (you are born with it or not), which has little empirical evidence.26 As discussed in the previous section, we have recently come to understand differences in programming ability as differences in prior experience.16 Learners who might seem similar (for example, in the same class, with the same degree, completing the same bootcamp) can have vastly different knowledge and skills, putting them ahead or behind in terms of learning edge momentum or, within a snapshot of time, making them seem “born with it” or not.
长期以来,有一个关于编程能力二元分裂的想法:要么会编程,要么不能编程。这背后有许多相互竞争的理论。其中一个更令人信服的理论是学习边缘动量的想法,33 每个主题都依赖于以前的主题,因此一旦落后,您将很难赶上。一个不太令人信服的理论是“极客基因”(无论你是否天生就有它),它几乎没有实证证据。26 正如上一节所讨论的,我们最近开始将编程能力的差异理解为先前经验的差异。16 可能看起来很相似的学习者(例如,在同一个班级,拥有相同的学位,完成同一个训练营)可能拥有截然不同的知识和技能,在学习优势势头方面领先或落后,或者在一段时间内,使他们看起来“天生就有”。

A similar effect is found in any highly technical field that is optionally taught before university (for example, CS, physics, and engineering).9
在大学之前选择性教授的任何高技术领域(例如,CS、物理和工程)中都可以找到类似的效果。9

The binary split view, and its effects on teaching and learning, have been studied across academic disciplines in research about fixed versus growth mindsets.12 A fixed mindset aligns with an aptitude view that people’s abilities are innate and unchanging. Applied to learning, this mindset says that if someone struggles with a new task, then they are not cut out for it.
二元分裂观点及其对教学的影响,已经在跨学科关于固定心态与成长心态的研究中进行了研究。12 固定的思维方式与人的能力是天生的、不变的才能观点是一致的。应用于学习,这种心态表明,如果有人在一项新任务中挣扎,那么他们就不适合完成这项任务。

Alternatively, a growth mindset aligns with a practice view—that people’s abilities are malleable. Applied to learning, this mindset says that if someone struggles with a new task, they can master it with enough practice.
或者,成长型思维模式与实践观点一致,即人们的能力是可塑的。应用于学习,这种心态表明,如果有人在一项新任务中挣扎,他们可以通过足够的练习来掌握它。

As described in Cheryan et al.,9 neither extreme view is true. For example, practically everyone can learn some physics, even if they are not initially good at it. However, practically no one can earn the Nobel Prize in Physics, no matter how much they practice.
正如 Cheryan 等人所描述的,9 这两种极端观点都不正确。例如,几乎每个人都可以学习一些物理学,即使他们最初并不擅长。然而,几乎没有人能获得诺贝尔物理学奖,无论他们练习多少。

In between these extremes, we are often trying to figure out the boundaries of our abilities. When teachers and learners approach new tasks with a growth mindset, they tend to persist through difficulties and overcome failure more consistently.12
在这些极端之间,我们经常试图弄清楚我们能力的界限。当教师和学习者以成长型思维方式处理新任务时,他们往往会坚持克服困难并更一致地克服失败。12

While the evidence for this effect is strong and intuitive, research suggests it can be difficult to change someone’s mindset to be more growth-oriented.8 In particular, there are two common misconceptions about how to promote growth mindset that prove ineffective. The first misconception is to reward effort rather than performance because growth mindset favors practice over aptitude.
虽然这种效果的证据有力且直观,但研究表明,改变一个人的心态以更加以成长为导向可能很困难。8 特别是,关于如何促进成长型心态,有两个常见的误解被证明是无效的。第一个误解是奖励努力而不是绩效,因为成长型心态更偏爱实践而不是能力。

But learners are not stupid; they can tell when they are not progressing, and teachers praising unproductive effort is not helpful. Instead, effort should be rewarded only when the learner is using effective strategies and on the path to success.13 The second misconception is that when someone approaches a task with a growth mindset, they will maintain that mindset throughout the task.
但学习者并不愚蠢;他们可以看出自己什么时候没有进步,而老师表扬无益的努力是无济于事的。相反,只有当学习者使用有效的策略并走上成功之路时,努力才应该得到回报。13 第二个误解是,当某人以成长型思维方式处理一项任务时,他们会在整个任务中保持这种思维方式。

In reality, as we face setbacks and experience failure, people skew toward a fixed mindset because we are not sure where the boundaries of our abilities lie. Thus, we must practice overcoming setbacks and failures to maintain a growth mindset approach.13
实际上,当我们面临挫折和经历失败时,人们会倾向于固定的心态,因为我们不确定自己能力的界限在哪里。因此,我们必须练习克服挫折和失败,以保持成长型思维方式。13

A related concept to fixed and growth mindsets is goal orientation. This is split into two categories: approach and avoidance.
与固定心态和成长型心态相关的概念是目标导向。这分为两类:接近和回避。

The “approach” goal orientation involves wanting to do well, and this engenders positive and effective learning behaviors: working hard, seeking help, and trying new challenging topics. In contrast, the “avoidance” goal orientation involves avoiding failure.
“方法”目标导向包括希望做得好,这会产生积极有效的学习行为:努力工作、寻求帮助和尝试新的具有挑战性的主题。相比之下,“避免”目标导向涉及避免失败。

This leads to negative and ineffective behaviors: disorganized study, not seeking help, anxiety over performance, and avoiding challenge.
这会导致消极和无效的行为:杂乱无章的学习、不寻求帮助、对表现的焦虑以及逃避挑战。

It is important that learners can make mistakes without severe penalties if they are to be directed towards “approach” rather than “avoidance.”
重要的是,如果学习者要被引导到 “接近 ”而不是 “避免 ”,他们可以犯错而不会受到严厉的惩罚。

When learning a new skill or training someone in a new skill, remember that approaching tasks with a growth mindset is effective but also a skill to be developed. Unfortunately, we cannot simply tell people to have a growth mindset and reap the benefits.
在学习新技能或培训某人掌握新技能时,请记住,以成长型思维方式处理任务是有效的,但也是一项需要培养的技能。不幸的是,我们不能简单地告诉人们要有成长型思维模式并从中受益。

Instead, nurture this skill by seeking or providing honest feedback about the process of learning and the efficacy of strategies. For mentors, praise areas where a mentee is making progress and accept that they will make mistakes without chastising them.
相反,通过寻求或提供有关学习过程和策略有效性的诚实反馈来培养这种技能。对于导师,表扬被指导者取得进步的领域,并接受他们会犯错误而不责备他们。

For learners, reflect on how skills have improved in the past weeks or months when you are doubtful about your progress.
对于学习者,当您对自己的进步持怀疑态度时,请反思过去几周或几个月的技能提高情况。

Further, expect that a growth mindset will shift toward a fixed mindset in the face of failure, but it can also be re-developed and made stronger with practice. Feeling discouraged is normal, but it does not mean that you will always feel discouraged.
此外,预计成长型思维模式在面对失败时会转变为固定型思维模式,但它也可以通过实践重新发展和变得更强大。感到气馁是正常的,但这并不意味着你会一直感到气馁。

If you feel like quitting, take a break, take a walk, consider your strategies, and then try again.
如果您想放弃,请休息一下,散散步,考虑您的策略,然后再试一次。

Summary 总结

Software developers must continually learn in order to keep up with the fast-paced changes in the field. Learning anything, programming included, involves committing items to memory. Human memory is fascinatingly complex.
软件开发人员必须不断学习,才能跟上该领域的快节奏变化。学习任何东西,包括编程,都涉及将项目提交到记忆中。人类的记忆是极其复杂的。

While it shares some similarities to computer architecture, there are key differences that make it work quite differently.
虽然它与计算机体系结构有一些相似之处,但也存在一些关键差异,使其工作方式完全不同。

In this article we have explained the current scientific understanding of how human memory works, how learning works, the differences between beginners and experts, and related it all to practical steps that software developers can take to improve their learning, training, and recruitment.
在本文中,我们解释了当前对人类记忆如何运作、学习如何运作、初学者和专家之间的差异的科学理解,并将其与软件开发人员可以采取的改进学习、培训和招聘的实际步骤联系起来。

Recommendations. 建议。

We have split up our recommendations into those for recruiting and those for training and learning.
我们将建议分为招聘和培训和学习。

For recruiting, we make the following recommendations:
对于招聘,我们提出以下建议:

  • There are no good proxies for programming ability. Stereotypes based on gender, race, or other factors are not supported by evidence. If you want to know how well candidates program, look at their previous work or test them on authentic programming tasks.
    没有好的编程能力代理。基于性别、种族或其他因素的刻板印象没有证据支持。如果您想了解应聘者的编程能力,请查看他们以前的工作或通过真实的编程任务测试他们。

     To emphasize a specific point: do not test candidates with brain-teaser puzzles.
    强调一点:不要用脑筋急转弯谜题来测试候选人。

  • At least among young developers, years of experience may not be a very reliable measure of ability.
    至少在年轻的开发人员中,多年的经验可能不是一个非常可靠的能力衡量标准。

  • A related recommendation from Behroozi et al.3 is to get candidates to solve interview problems in a room on their own before presenting the solution, as the added pressure from an interviewer observing or requiring talking while solving it adds to cognitive load and stress in a way that impairs performance.
    Behroozi 等人3 的一个相关建议是让考生在提出解决方案之前自己在房间里解决面试问题,因为面试官在解决问题时观察或要求交谈会增加认知负荷和压力,从而损害表现。

For learning and training, we make the following recommendations:
对于学习和培训,我们提出以下建议:

  • Reading a lot of code will help someone become a more efficient programmer.
    阅读大量代码将帮助某人成为更高效的程序员。

  • Experts are not always the best at training beginners.
    专家并不总是最适合培训初学者的。

  • Learning takes time, including time between learning sessions. Intense cramming is not effective, but spaced repetition is.
    学习需要时间,包括学习会话之间的时间。密集的填鸭式填鸭式是无效的,但间隔重复是有效的。

  • Similarly, spending time away from a problem can help to solve it.
    同样,花时间远离问题可以帮助解决问题。

  • Just because you can find it through an Internet search or generative AI tool does not mean learning has become obsolete.
    仅仅因为您可以通过 Internet 搜索或生成式 AI 工具找到它,并不意味着学习已经过时。

  • Use examples to go between abstract concepts and concrete learnable facts.
    使用示例在抽象概念和具体的可学习事实之间进行转换。

  • Seeking to succeed (rather than avoid failure) and believing that ability is changeable are important factors in resilience and learning.
    寻求成功(而不是避免失败)并相信能力是可变的,是韧性和学习的重要因素。

Further reading. 进一步阅读。

Many books on learning center around formal education: They are aimed at school teachers and university lecturers. However, the principles are applicable everywhere, including professional development. We recommend three books:
许多关于学习的书籍都围绕正规教育展开:它们针对学校教师和大学讲师。但是,这些原则适用于任何地方,包括专业发展。我们推荐三本书:

  • Why Don’t Students Like School? by Daniel T. Willingham provides a short and readable explanation of many of the principles of memory and how the brain works.
    为什么学生不喜欢学校?作者 Daniel T. Willingham 对记忆的许多原理以及大脑的工作原理进行了简短易读的解释。

  • The Programmer’s Brain by Felienne Hermans et al.c relates these concepts to programming and describes how techniques for learning and revision that are used at school can still apply to professional development.
    Felienne Hermans 等人撰写的《程序员的大脑》将这些概念与编程联系起来,并描述了学校使用的学习和复习技术如何仍然适用于专业发展。

  • How Learning Happens: Seminal Works in Educational Psychology and What They Mean in Practice by Paul A. Kirschner and Carl Hendrick20 provides a tour through influential papers, explaining them in plain language and the implications and linkages between them.
    Paul A. Kirschner 和 Carl Hendrick20 合著的《学习是如何发生的:教育心理学中的开创性著作及其在实践中的意义》20 浏览了有影响力的论文,用通俗易懂的语言解释了它们以及它们之间的含义和联系。

The papers cited can also serve as further reading. If you are a software developer you may not have access to all of them, ACM members with the digital library option will have access to the ACM papers, although many of our references are from other disciplines.
引用的论文也可以作为进一步的阅读。如果您是软件开发人员,您可能无法访问所有这些论文,但拥有数字图书馆选项的 ACM 成员将可以访问 ACM 论文,尽管我们的许多参考资料来自其他学科。

For more recent papers, many authors supply free PDFs on their website; you may wish to try searching the Web for the exact title to find such PDFs. Many authors are also happy to supply you with a copy if you contact them directly.
对于最近的论文,许多作者在他们的网站上提供免费的 PDF;您可能希望尝试在 Web 上搜索确切的标题以查找此类 PDF。如果您直接与许多作者联系,他们也很乐意为您提供副本。

Acknowledgments 确认

We are grateful to Greg Wilson, who was instrumental in initiating and proofreading this paper, and to our other proofreaders: Philip Brown, Kristina Dietz, Jack Parkinson, Anthony Robins, and Justin Thurman.
我们感谢 Greg Wilson,他在发起和校对本文方面发挥了重要作用,并感谢我们的其他校对人员:Philip Brown、Kristina Dietz、Jack Parkinson、Anthony Robins 和 Justin Thurman。

This work is funded in part by the National Science Foundation under grant #1941642. Any opinions, findings, and conclusions or recommendations expressed in this material are those of the authors and do not necessarily reflect the views of the National Science Foundation.
这项工作部分由美国国家科学基金会资助 #1941642。本材料中表达的任何意见、发现、结论或建议均为作者的观点,并不一定反映美国国家科学基金会的观点。

    • 1. Anderson, J.R.Cognitive Psychology and its Implications. Macmillan (2005).
      1. 安德森,JR 认知心理学及其影响。麦克米伦 (2005)。
    • 2. Baddeley, A.Working memory. Science255, 5044 (1992), 556–559.
      2. Baddeley, A.工作记忆。科学255, 5044 (1992), 556–559。
    • 3. Behroozi, M., Shirolkar, S., Barik, T., and Parnin, C.Does stress impact technical interview performance? In Proceedings of the 28th ACM Joint Meeting on European Software Engineering Conf. and Symp.
      3. Behroozi, M., Shirolkar, S., Barik, T., 和 Parnin, C.压力会影响技术面试表现吗?在第 28 届 ACM 欧洲软件工程联席会议论文集和研讨会中。

      on the Foundations of Software Engineering (2020), 481–492; https://bit.ly/3Sj3AHn
      软件工程基础 (2020),481-492;https://bit.ly/3Sj3AHn
    • 4. Bergersen, G.R. and Gustafsson, J.-E.Programming skill, knowledge, and working memory among professional software developers from an investment theory perspective. J. of Individual Differences32, 4 (2011), 201.
      4. Bergersen, GR 和 Gustafsson, J.-E.从投资理论角度看专业软件开发人员的编程技能、知识和工作记忆。个体差异杂志32, 4 (2011), 201.
    • 5. Bjork, R.A. and Allen, T.W.The spacing effect: Consolidation or differential encoding?J. of Verbal Learning and Verbal Behavior9, 5 (1970), 567–572.
      5. Bjork, R.A. 和 Allen, T.W.间距效应:语言学习和语言行为的巩固还是差分编码?J.9, 5 (1970), 567–572.
    • 6. Bjork, R.A. and Bjork, E.L.Desirable difficulties in theory and practice. J. of Applied Research in Memory and Cognition9, 4 (2020), 475.
      6. Bjork, R.A. 和 Bjork, E.L.理论和实践中理想的困难。记忆与认知应用研究杂志9, 4 (2020), 475.
    • 7. Bryant, A.In head-hunting, big data may not be such a big deal. The New York Times (June 2013); https://nyti.ms/3Msdraa.
      7. 科比,A.In 猎头,大数据可能没那么大不了。纽约时报(2013 年 6 月);https://nyti.ms/3Msdraa。
    • 8. Burgoyne, A.P., Hambrick, D.Z., and Macnamara, B.N.How firm are the foundations of mind-set theory? The claims appear stronger than the evidence. Psychological Science31, 3 (2020), 258–267; https://bit.ly/3MsdPp4
      8. Burgoyne, A.P., Hambrick, D.Z., and Macnamara, B.N.心态理论的基础有多坚实?这些说法似乎比证据更有力。心理科学31, 3 (2020), 258–267;https://bit.ly/3MsdPp4
    • 9. Cheryan, S., Ziegler, S.A., Montoya, A.K., and Jiang, L.Why are some STEM fields more gender balanced than others?Psychological Bulletin143, 1 (2017), 1.
      9. Cheryan, S., Ziegler, S.A., Montoya, A.K.和江, L.为什么有些 STEM 领域比其他领域更性别平衡?心理学通报143, 1 (2017), 1.
    • 10. Dempster, F.N.The spacing effect: A case study in the failure to apply the results of psychological research. American Psychologist43, 8 (1988), 627.
      10. Dempster, F.N.间隔效应:未能应用心理学研究结果的案例研究。美国心理学家43, 8 (1988), 627.
    • 11. Dong, G. and Potenza, M.N.Behavioural and brain responses related to Internet search and memory. European J. of Neuroscience42, 8 (2015), 2546–2554; https://bit.ly/49loGL6
      11. Dong, G. 和 Potenza, M.N.与互联网搜索和记忆相关的行为和大脑反应。欧洲神经科学杂志42, 8 (2015), 2546–2554;https://bit.ly/49loGL6
    • 12. Dweck, C.S.Mindset: The New Psychology of Success. Random House (2006).
      12. Dweck, CS Mindset:成功的新心理学。兰登书屋 (2006)。
    • 13. Dweck, C.S. and Yeager, D.S.Mindsets: A view from two eras. Perspectives on Psychological Science14, 3 (2019), 481–496.
      13. Dweck, C.S. 和 Yeager, D.S.Mindsets:两个时代的观点。心理科学观点14, 3 (2019), 481–496。
    • 14. Giebl, S. et al. Thinking first versus googling first: Preferences and consequences. J. of Applied Research in Memory and Cognition (2022); https://bit.ly/3QlXun5
      14. Giebl, S. 等人。先思考与先谷歌搜索:偏好和后果。记忆与认知应用研究杂志 (2022);https://bit.ly/3QlXun5
    • 15. Gobet, F. and Simon, H.A.The roles of recognition processes and look-ahead search in time-constrained expert problem solving: Evidence from grand-master-level chess. Psychological Science7, 1 (1996), 52–55; https://bit.ly/40oT4jY
      15. Gobet, F. 和 Simon, H.A.识别过程和前瞻搜索在时间受限的专家问题解决中的作用:来自特级大师级国际象棋的证据。心理科学7, 1 (1996), 52-55;https://bit.ly/40oT4jY
    • 16. Grabarczyk, P., Nicolajsen, S.M., and Brabrand, C.On the effect of onboarding computing students without programming-confidence or experience. In Proceedings of the 22nd Koli Calling Intern. Conf. on Computing Education Research (2022), 1–8.
      16. Grabarczyk, P.、Nicolajsen, SM 和 Brabrand, C.关于在没有编程信心或经验的情况下入职计算机学生的影响。在第 22 届 Koli 呼叫实习生的会议记录中。计算教育研究会议 (2022),1-8。
    • 17. Hazzan, O.Reducing abstraction level when learning abstract algebra concepts. Educational Studies in Mathematics40, 1 (Sept. 1999), 71–90; https://bit.ly/49lZd4f
      17. Hazzan, O.学习抽象代数概念时降低抽象级别。数学教育研究40, 1 (1999 年 9 月), 71-90;https://bit.ly/49lZd4f
    • 18. Huberman, A.Teach & learn better with a “neuroplasticity super protocol”. Neural Network (Oct. 2021).
      18. Huberman, A.通过“神经可塑性超级协议”更好地教授和学习。神经网络(2021 年 10 月)。
    • 19. Kahneman, D.Thinking, Fast and Slow. Macmillan, 2011.
      19. Kahneman, D.思考,快与慢。麦克米伦,2011 年。
    • 20. Kirschner, P.A. and Hendrick, C.How Learning Happens: Seminal Works in Educational Psychology and What They Mean in Practice. Routledge (2020).
      20. Kirschner, P.A. 和 Hendrick, C.《学习是如何发生的:教育心理学中的开创性作品及其在实践中的意义》。劳特利奇 (2020)。
    • 21. Kleitman, N.Basic rest-activity cycle—22 years later. Sleep5, 4 (1982), 311–317.
      21. Kleitman, N.基本静息活动周期——22 年后。睡眠5, 4 (1982), 311–317。
    • 22. Kyllonen, P.C. and Christal, R.E.Reasoning ability is (little more than) working-memory capacity?!Intelligence14, 4 (1990), 389–433.
      22. Kyllonen, P.C. 和 Christal, R.E.推理能力是(仅多于)工作记忆容量?!情报14, 4 (1990), 389–433。
    • 23. Margulieux, L. et al. When wrong is right: The instructional power of multiple conceptions. In Proceedings of the 17th ACM Conf. on Intern. Computing Education Research (2021), 184–197.
      23. Margulieux, L. 等人。当错误就是正确时:多重概念的指导力量。在第 17 届 ACM 实习生会议论文集中。计算教育研究 (2021),184-197。
    • 24. Margulieux, L.E.Spatial encoding strategy theory: The relationship between spatial skill and STEM achievement. In Proceedings of the 2019 ACM Conf. on Intern. Computing Education Research, 81–90; 10.1145/3291279.3339414.
      24. Margulieux, L.E.空间编码策略理论:空间技能与 STEM 成就之间的关系。在 2019 年 ACM 实习生会议论文集。计算教育研究,81-90;10.1145/3291279.3339414.
    • 25. Maton, K.Making semantic waves: A key to cumulative knowledge-building. Linguistics and Education24, 1 (2013), 8–22; https://bit.ly/3tXhvZt.
      25. Maton, K.制造语义波:积累知识构建的关键。语言学与教育24, 1 (2013), 8–22;https://bit.ly/3tXhvZt。
    • 26. McCartney, R. et al. Folk pedagogy and the geek gene: geekiness quotient. In Proceedings of the 2017 ACM SIGCSE Technical Symp. on Computer Science Education (2017), 405–410.
      26. McCartney, R. 等人。民间教育学和极客基因:极客商数。在 2017 年 ACM SIGCSE 计算机科学教育技术研讨会 (2017) 的会议记录中,405–410。
    • 27. Morrison, P. and Murphy-Hill, E.Is programming knowledge related to age? An exploration of stack overflow. In 2013 10th Working Conf. on Mining Software Repositories (MSR), 69–72; https://bit.ly/3Sp5Mgv.
      27. Morrison, P. 和 Murphy-Hill,E.Is 与年龄相关的编程知识?堆栈溢出的探索。2013 年第 10 届采矿软件存储库 (MSR) 工作会议,69-72;https://bit.ly/3Sp5Mgv。
    • 28. Newton, P.M. and Salvi, A.How common is belief in the learning styles neuromyth, and does it matter? A pragmatic systematic review. Frontiers in Education (2020), 5; https://bit.ly/47h0Jmo.
      28. Newton, P.M. 和 Salvi, A.相信学习风格的神经神话有多普遍,这重要吗?务实的系统评价。教育前沿 (2020),5;https://bit.ly/47h0Jmo。
    • 29. Owen, A.M. et al. Putting brain training to the test. Nature465, 7299 (2010), 775–778.
      29. Owen, AM 等人。对大脑训练进行测试。自然465, 7299 (2010), 775–778。
    • 30. Parkinson, J. and Cutts, Q.Relationships between an early-stage spatial skills test and final CS degree outcomes. In Proceedings of the 53rd ACM Technical Symp. on Computer Science Education1, (2022), 293–299; 10.1145/3478431.3499332.
      30. Parkinson, J. 和 Cutts, Q.早期空间技能测试与最终 CS 学位结果之间的关系。第 53 届 ACM 计算机科学教育技术研讨会论文集1, (2022), 293–299;10.1145/3478431.3499332.
    • 31. Peitek, N. et al. Correlates of programmer efficacy and their link to experience: A combined EEG and eye-tracking study. In Proceedings of the 30th ACM Joint European Software Engineering Conf. and Symp. on the Foundations of Software Engineering (Nov. 2022), 120–131.
      31. Peitek, N. 等人。程序员效能的相关性及其与经验的联系:一项脑电图和眼动追踪相结合的研究。第 30 届 ACM 联合欧洲软件工程会议和研讨会论文集(2022 年 11 月),第 120-131 页。
    • 32. Raufaste, E., Eyrolle, H., and Mariné, C.Pertinence generation in radiological diagnosis: Spreading activation and the nature of expertise. Cognitive Science22, 4 (1998), 517–546; https://bit.ly/3sidUoq
      32. Raufaste, E.、Eyrolle, H. 和 Mariné, C.放射诊断中的相关性产生:传播激活和专业知识的性质。认知科学22, 4 (1998), 517–546;https://bit.ly/3sidUoq
    • 33. Robins, A.Learning edge momentum: A new account of outcomes in CS1. Computer Science Education20, 1 (2010), 37–71.
      33. Robins, A.学习边缘动量:CS1 中结果的新解释。计算机科学教育20, 1 (2010), 37–71。
    • 34. Robins, A.V.Dual process theories: Computing cognition in context. ACM Trans. Comput. Education22, 4 (Sept. 2022); 10.1145/3487055.
      34. Robins, A.V.双过程理论:上下文中的计算认知。ACM Trans. 计算。Education22, 4(2022 年 9 月);10.1145/3487055.
    • 35. Rountree, N., Rountree, J., Robins, A., and Hannah, R.Interacting factors that predict success and failure in a CS1 course. ACM SIGCSE Bulletin36, 4 (2004), 101–104.
      35. Rountree, N.、Rountree, J.、Robins, A. 和 Hannah, R.预测 CS1 课程成功和失败的交互因素。ACM SIGCSE 公报36, 4 (2004), 101–104。
    • 36. Sala, G. and Gobet, F.Does far transfer exist? Negative evidence from chess, music, and working memory training. Current Directions in Psychological Science26, 6 (2017), 515–520; 10.1177/0963721417712760.
      36. Sala, G. 和 Gobet, F.远距离转移存在吗?来自国际象棋、音乐和工作记忆训练的负面证据。心理科学的当前方向26, 6 (2017), 515–520;10.1177/0963721417712760.
    • 37. Simons, D.J. and Chabris, C.F.What people believe about how memory works: A representative survey of the U.S. population. PLOS ONE6, 8 (Aug. 2011), 1–7; 10.1371/journal.pone.0022757.
      37. Simons, D.J. 和 Chabris, C.F.人们如何看待记忆的工作原理:美国人口的代表性调查。PLOS ONE6, 8 (2011 年 8 月), 1-7;10.1371/journal.pone.0022757.
    • 38. Thalmann, M., Souza, A.S., and Oberauer, K.How does chunking help working memory?J. of Experimental Psychology: Learning, Memory, and Cognition45, 1 (2019), 37.
      38. Thalmann, M., Souza, A.S., and Oberauer, K.分块如何帮助工作记忆?实验心理学杂志:学习、记忆和认知45, 1 (2019), 37.
    • 39. Tshukudu, E. and Cutts, Q.Understanding conceptual transfer for students learning new programming languages. In Proceedings of the 2020 ACM Conf. on Intern. Computing Education Research, 227–237; 10.1145/3372782.3406270.
      39. Tshukudu, E. 和 Cutts, Q.了解学生学习新编程语言的概念迁移。在 2020 年 ACM 会议记录中,实习生。计算教育研究,227-237;10.1145/3372782.3406270.
    • 40. Uttal, D.H. et al. The malleability of spatial skills: A meta-analysis of training studies. Psychological Bulletin139, 2 (2013), 352.
      40. Uttal, D.H. 等人。空间技能的可塑性:训练研究的荟萃分析。心理学公报139, 2 (2013), 352。
    This is not an informal description: the technical term is actually “chunks”.
    这不是一个非正式的描述:技术术语实际上是“块”。
    Parts of Kahneman’s book were undermined by psychology’s “replication crisis,” which affected some of its findings, but not the idea of system 1 and 2.
    卡尼曼书中的部分内容受到心理学的“复制危机”的破坏,这场危机影响了它的一些发现,但影响了系统1和系统2的概念。
    Full disclosure: This is written by one of the authors although the other authors recommend it as well.
    完全披露:这是由其中一位作者撰写的,尽管其他作者也推荐它。

Join the Discussion (0)

Become a Member or Sign In to Post a Comment

The Latest from CACM

Shape the Future of Computing

ACM encourages its members to take a direct hand in shaping the future of the association. There are more ways than ever to get involved.

Get Involved

Communications of the ACM (CACM) is now a fully Open Access publication.

By opening CACM to the world, we hope to increase engagement among the broader computer science community and encourage non-members to discover the rich resources ACM has to offer.

Learn More