[译]软件开发人员应该学习的 10 件事

其它 · 04-17

原文链接:
https://cacm.acm.org/research/10-things-software-developers-should-learn-about-learning/

By Neil C.C. Brown, Felienne F. J. Hermans, and Lauren E. Margulieux
Posted Jan 8 2024

软件开发者必须不断学习以跟上该领域的快速发展。变化是永恒的:新技术经常被发明,旧技术不断更新。因此,开发者不仅仅是学习一次编程——在他们的职业生涯中,他们将学习许多新的编程语言和框架。

仅仅因为我们学习,并不意味着我们理解我们如何学习。在美国的一项调查发现,大多数人对记忆的信念与科学共识相反:人们并不直观地理解记忆和学习是如何工作的。

正如学习风格的例子所示,学习风格的倡导者声称,有效的教学应该与学习者偏好的风格相匹配——视觉学习者看,听觉学习者听,动觉学习者动手。2020年的一项回顾发现,89%的人认为学习者偏好的风格应该决定教学,尽管研究人员几十年前就已经知道这是不准确的。虽然学习者有偏好的风格,但有效的教学应该匹配内容,而不是学习风格。科学课应该使用图表来呈现数据,而不是口头描述,不管视觉或听觉学习风格如何,就像烹饪课应该使用动手实践而不是阅读,不管学习者是否喜欢动觉风格。

数十年来对认知心理学、教育和编程教育的研究为我们提供了关于我们如何学习的深刻见解。本文的接下来的10个部分提供了适用于软件开发者的学习研究支持的发现,并讨论了它们的实际意义。这些信息可以帮助你自己学习、教导初级员工和招聘员工。

关键见解:
学习对程序员至关重要,但人类的大脑工作方式与计算机截然不同。

了解人类如何学习可以帮助你更有效地学习。

互联网和大型语言模型并没有使学习变得过时;学习是必不可少的,并且需要时间。

专业知识改变了你的思维方式,让你更容易解决问题,但也可能会阻碍你的教学能力。

  1. 人类记忆不是由比特组成的
    人类记忆是学习的中心。正如基施纳和亨德里克所说,“学习意味着在一个人的长期记忆中发生了变化。”软件开发者熟悉计算机内存的惊人能力,我们可以存储一系列比特,然后稍后检索出完全相同的一系列比特。虽然人类记忆与之类似,但既不那么精确也不那么可靠。

由于人类记忆的生物学复杂性,可靠性是一个复杂的问题。在计算机内存中,我们使用两个基本操作:读取和写入。读取计算机内存不会修改它,而且写入和读取之间经过的时间多少并不重要。人类长期记忆不是那么无菌的:人类记忆似乎有一种“读取和更新”操作,即检索记忆可以同时加强和修改它——一个被称为再巩固的过程。这种修改更可能发生在最近形成的记忆上。由于这种潜在的修改性,事实并不是以二进制状态存在,要么是明确知道的,要么不知道;它可以存在于中间状态。我们可以忘记我们以前知道的事情,知识可能是不可靠的,特别是当最近学习时。

人类记忆似乎有一种“读取和更新”操作,即检索记忆可以同时加强和修改它。

人类记忆另一个奇怪的特点是“传播激活”。我们的记忆存储在相互连接的神经通路中。当我们试图记住某件事时,我们激活一条神经通路来获取目标信息。然而,激活并不仅仅包含在一个通路中。一些激活能量会传播到其他连接的通路中,就像从热水管辐射出的热量一样。这种传播激活使相关通路在数小时内处于激活状态。

传播激活对记忆有负面影响,对解决问题有正面影响。传播激活意味着相关但不精确的信息可能与目标信息混为一谈,这意味着我们对信息的回忆可能是不可靠的。然而,传播激活也与基于洞察力的问题解决有关,或者称为“啊哈时刻”。因为通路数小时内保持激活,有时离开一个问题去解决另一个有自己传播激活的问题会导致两个不相关的区域在中间连接起来。当两个之前不相关的区域连接起来时,可以产生创造性和独特的问题解决方案。这就是为什么散步、淋浴或以其他方式花时间远离问题可以帮助你在解决问题时摆脱困境。

总结,人类记忆不是像计算机内存那样通过简单地在特定位置存储和检索来工作的。人类记忆更加脆弱和不可靠,但它也可以在学习、通过连接知识在一起解决问题和深入理解方面带来巨大的好处。我们将在后续章节中进一步阐述这一点,特别是在从记忆中检索项目和加强记忆方面。

人类记忆不是像计算机内存那样通过简单地在特定位置存储和检索来工作的。

  1. 人类记忆由一个有限的系统和一个无限的系统组成
    人类记忆有两个与学习相关主要组成部分:长期记忆和工作记忆。长期记忆是信息被永久存储的地方,并且在功能上是无限的;在这个意义上,它的运作有点像计算机的磁盘存储。相比之下,工作记忆被用来有意识地推理信息以解决问题;它的功能类似于CPU的寄存器,实时存储有限的信息量,以便访问和操作。

工作记忆是有限的,其容量大致在出生时就固定了。虽然较高的工作记忆容量与较高的一般智力相关,但工作记忆容量并不是表现的一切。较高的容量可以加快学习速度,但我们无限的长期记忆消除了我们最终可以学到的总量的限制。专家程序员可能有高或低的工作记忆容量,但使他们成为专家的是他们长期记忆中的内容。

当人们更多地了解一个主题时,他们会将信息联系在一起形成块。分块允许多条信息在工作记忆中作为一条信息。例如,在学习电子邮件地址时,一个熟悉的域名,如gmail.com,被视为一条信息,而不是像xvjki.wmt这样的随机字符字符串。因此,分块的信息越多,工作记忆的功能就越大。使用我们的计算机类比,我们的工作记忆/CPU寄存器可能只允许我们在长期记忆/磁盘中存储五个块的指针,但没有块的大小限制,所以最佳策略是通过实践使用信息和解决问题来增加块的大小。

当学习新工具或技能时,了解任务所要求的认知负荷或工作记忆容量的数量是很重要的。认知负荷有两个部分:内在负荷和外在负荷。内在负荷是完成任务所固有的多少信息或块,它不能改变,除非改变任务。相比之下,外在认知负荷是不必要的信息,然而,它是执行任务的一部分。呈现格式是如何变化的外在认知负荷的一个例子。如果你正在实现数据库架构,使用带有表格和属性的图表比使用纯英文描述更容易——后者有更高的外在负荷,因为你必须在心理上将描述转换为架构,而图表可以直接映射(见图1)。对于初学者来说,外在负荷通常更高,因为他们不能轻易区分内在和外在信息。

面对一个似乎超出个人能力范围的任务时,重要的是要认识到,通过重新组织任务,这种情况是可以改变的。将问题分解成可以处理和分块的较小部分,最终将使个人能够解决复杂问题。当你面对当前技能边缘或超出当前技能的问题时,应该应用这一原则,但当你与初级开发人员和新员工一起工作时,这一点尤其相关。

  1. 专家识别,初学者推理
    初学者和专家之间的一个关键区别是,专家以前都见过。对国际象棋专家的研究表明,专家的主要优势是他们记住并识别棋盘的状态。这使他们能够更快、更省力地决定如何应对。卡尼曼描述了认知被分裂为“系统1”和“系统2”(这证明了不仅是开发人员在命名方面有困难)。系统1是快速的,由识别驱动,依赖于长期记忆中的模式识别,而系统2则较慢,专注于推理,需要在工作记忆中进行更多的处理。这是被称为双过程理论的一般观点的一部分。

专家开发人员可以通过记忆(通常是隐式的,来自经验)程序代码中的常见模式来在更高级别上进行推理,这释放了他们的认知能力。设计模式就是这样的一个例子,类似于前面讨论的块。专家可能立即认识到特定代码正在进行排序算法,而初学者可能会逐行阅读,试图理解代码的工作原理,而没有认识到更大的图景。

专家开发人员可以通过记忆程序代码中的常见模式,在更高级别上进行推理。

一个推论是,初学者可以通过阅读和理解大量代码来成为专家。专家建立了一个心理模式库,让他们在未来更容易地阅读和编写代码。看到纯粹的命令式C代码可能只部分适用于函数式Haskell代码,所以看到更多种类的编程范式会进一步有所帮助。总的来说,这种模式匹配是阅读和使用更多代码,以及更多类型的代码,将增加编程熟练度的原因。

  1. 理解概念从抽象到具体再回到抽象
    研究表明,专家与初学者以不同的方式处理概念。专家使用通用和抽象的术语,寻找基本概念,不关注细节,而初学者则关注表面细节,并且难以将这些细节与更大的图景联系起来。这些差异影响了专家的推理方式,也影响了他们的学习方式。

例如,当向一个对Python中的可变参数函数概念不熟悉的人解释时,专家可能会说它是一个可以接受不同数量参数的函数。初学者可能会关注诸如声明和调用函数的确切语法之类的细节,并可能认为传递一个参数是特例。专家可能在解释概念时更容易理解或预测细节。

当您学习一个新概念时,您将从两种形式的解释中受益:抽象特征和具体细节举例。更具体地说,您将从遵循语义波(semantic wave)中受益,这是由澳大利亚科学家卡尔·马顿(Karl Maton)定义的一个概念,如图2所示。

可变参数函数的语义波。
可变参数函数的语义波。

按照语义波,您不断地在概念的抽象定义和几个不同的示例之间切换。示例越多样化越好。甚至错误的示例在与正确示例相比时也是有益的,以理解为什么它们是错误的,比如在学习什么是常量时,看到一个可变变量被标记为非常量。这个过程称为解包。

有了这些多样化的示例,您随后可以(重新)回顾抽象定义,并构建对概念的更深层次理解。更深层次的理解来自于认识到示例中的多个细节如何与定义中的一个抽象概念相联系,这个过程称为打包。

编程经常涉及学习抽象概念。面对要学习抽象概念,如函数,人们通常会寻找具体实例来检查,例如返回数字绝对值的abs函数。一个挑战是,随着概念变得更加抽象(从值到变量/对象到函数/类到高阶函数/元类,最终到范畴论),到具体示例的距离增加了。救星是,随着我们学习抽象概念,它们对我们来说变得更具体。起初,一个函数是一个抽象概念,但经过大量练习后,一个函数变成了一个具体项目(或块),我们可以学习下一层的抽象。

  1. 间隔和重复很重要
    你多少次听说你不应该为考试临时抱佛脚?除非,当然,你想让第二天就忘记一切。这个建议基于认知心理学中最可预测和持久的效应之一:间隔效应。根据间隔效应,人类通过在多个会话、多天,理想情况下,多周内分散实践,最有效地学习解决问题的概念。

间隔之所以有效,是由于本文先前描述的长期记忆和工作记忆之间的关系。当学习者练习解决问题时,他们练习两项技能。首先,将问题中的信息与可以解决它的Concept匹配(例如,过滤循环),其次,应用概念解决问题(例如,编写循环)。第一项技能需要激活大脑中通往概念的正确神经通路。如果学习者反复解决同一类问题,例如for-each循环问题,那么通往长期记忆的通路就会持续活跃,他们错过了练习第一项技能的机会。未间隔实践的一个常见结果是人们可以解决问题,但只有在告诉他们使用哪个概念时。虽然交替不同类型的问题,例如循环和条件问题,可以帮助,通路需要时间回到基线,使间隔变得必要以充分利用实践时间。此外,大脑需要休息以巩固已处理的新信息,以便它可以应用于新问题。

与这个经过时间考验的原则相悖,密集的编码训练营要求学习者将他们的问题解决实践挤进未间隔的会话中。虽然这不是理想的,但间隔效应的研究人员从一开始就知道,大多数学习者仍然更喜欢尽可能少的时间挤满他们的实践。对于那些唯一可行的编程学习选项是密集训练营的人来说,我们可以应用间隔研究来最大化他们的结果。

为了构建一天的学习,学习者应该将学习时段限制在90分钟或更少。在这一点之后,大脑中的神经化学平衡使得集中注意力变得困难。在每个学习时段之后,至少休息20分钟。真正地休息一下,去散步或静静地坐着,不要进行其他任务,无聊地浏览互联网,或者与他人聊天。休息加速了巩固过程,这也在睡眠中发生。

在一个学习时段内,有一些策略可以最大化效率。首先,随机化正在解决的问题类型的顺序,以便在长期记忆中激活不同的概念。然而,要注意的是,随机化顺序可以提高学习成果,但需要更多的努力。第二个策略是在随机间隔内进行短暂休息,以增强记忆巩固。建议每2-5分钟进行10秒的休息。

  1. 互联网并没有使学习过时
    随着互联网的出现,编程知识可用性发生了变化。关于语法或API的知识从被埋在参考书中变成了只需几个击键即可获得。最近,像ChatGPT、Codex和GitHub Copilot这样的AI工具甚至可以(大部分准确地)为您填写这些细节。这引发了一个明显的问题:如果知识在几秒钟内就可以从互联网上获得,那么学习细节或任何东西还有什么价值?

我们通过将知识片段存储在我们的长期记忆中并形成它们之间的连接来学习。如果知识不在大脑中,因为您还没有很好地学习它,大脑就不能形成任何连接,因此不可能有更高级别的理解和抽象。如果每次您需要一段代码来进行数据库连接,您就在线搜索它,插入它,然后继续前进,您将不太可能了解有关连接的太多信息。依赖互联网或AI的智慧在初学者和专家之间有所不同:从未学习过细节并因此缺乏记忆连接的初学者,与已经学习了更深层结构但搜索被遗忘的细节的专家之间有一个关键的区别。

甚至有证据表明,通过互联网搜索在记忆信息方面效率较低。一项研究发现,通过互联网找到的信息(与实体书相比)记忆得较差。另一项研究发现,与先尝试思考答案然后再搜索相比,立即搜索互联网会导致稍后回忆同一信息的能力变差。看来搜索可能会剥夺大脑回忆信息的记忆加强效果的好处。

还有前面讨论过的认知负荷问题。互联网搜索需要大脑进行上下文切换;其有限的注意力和工作记忆必须从手头的任务(编程)切换到新的认知任务(搜索互联网和选择结果或评估AI生成的结果)。如果所需的知识被记忆,那么不仅访问速度更快(就像使用缓存与从硬盘获取相比),而且还可以避免上下文切换和过滤搜索中的无关信息的认知负担。因此,尽管互联网上有信息,但有多个理由要记忆信息。

  1. 问题解决不是一个通用技能
    问题解决是编程的一个重要部分。软件开发中一个常见的(但错误的)观点是直接教授问题解决作为一个特定技能,然后可以将其应用于开发的不同方面(设计、调试等)。因此,问题解决被(错误地)视为通用技能。然而,问题解决在大脑中的工作方式并非如此。

问题解决被(错误地)视为通用技能。然而,问题解决在大脑中的工作方式并非如此。

尽管人类确实拥有一些通用的问题解决技能,但它们比领域特定问题解决技能,例如能够调试程序,效率要低得多。虽然我们可以学习推理,但我们不是学会一般性地解决问题。相反,我们学习如何解决编程问题,或者如何计划最佳的国际象棋走法,或者如何创建一个针织图案。这些技能是独立的,不互相影响。对国际象棋的研究发现,学习它对其他学术和认知技能几乎没有或没有影响,音乐教学和认知训练也是如此。这种解决问题技能的无法转移是“大脑训练”对发展一般智力无效的原因。

规则的一个例外似乎是空间技能。空间技能允许我们在脑海中想象物体,如俄罗斯方块形状,并在心理上操纵这些物体,如旋转俄罗斯方块形状。训练这些通用技能可以改善其他学科的学习。这种现象在认知和学习科学中引起了如此多的困惑。然而,空间训练可以改善一系列非语言技能的表现,无论初始能力、年龄或训练任务类型如何。最近的研究表明,空间训练甚至可以提高专业软件开发人员的效率,因为他们仍在学习新概念。即使有这个奇怪的例外,学习如何解决编程问题的最好方法仍然是练习解决编程问题,而不是寻找学习国际象棋或其他认知训练的性能好处。

这里有一个对招聘的次要含义。筛选编程候选人的一个流行想法是给出大脑谜题,例如如何称量一架巨型喷气式飞机。正如谷歌在2013年所发现的,这是浪费时间——大脑谜题中的问题解决与编程中的问题解决之间没有可靠的联系。如果你想判断编程能力,评估编程能力。

  1. 专业知识在某些情况下可能会成为问题
    我们已经讨论了许多专业知识对学习和表现的好处。然而,成为专家也可能导致问题,正如本节所详述的。

程序员使用工具和辅助工具以提高效率,如版本控制系统或IDE。这些工具对初学者和专家有不同的影响。初学者可能会被专业工具中可用的选项数量所淹没(由于增加的认知负荷),并且可能会从有关如何使用工具的初学者友好提示中受益。然而,专家发现相同的提示比有用更分散注意力,因为他们已经知道该做什么。这被称为专业知识逆转效应:帮助初学者的提示和指南可能会妨碍专家,使他们生产力降低。

程序员通常在他们的职业生涯中学习多种编程语言。一旦掌握了多种语言,知道多种语言可能会有益,但有时将知识从一种编程语言转移到另一种可能会导致错误的知识。例如,程序员可能在Java中了解到,只要签名匹配,一个方法就可以覆盖父方法,并将这种知识转移到C++中,而在C++中,覆盖父方法还需要父方法被声明为虚拟的。这些差异——在语言之间的语法相似但在语义上不同——特别阻碍了知识的转移。

专家经常帮助培训初学者,但没有培训他人经验的专家通常没有意识到初学者的思维方式不同。因此,他们没有为具有不同心理模型的人量身定制他们的解释。这被称为专家盲点问题:一旦成为专家,就很难通过初学者的眼睛看事物。通过仔细聆听初学者解释他们当前的理解并相应调整解释,可以克服这个问题。

然而,有时知识变得如此自动化,以至于专家很难用语言表达它。这种自动化的知识就是为什么专家对如何解决有问题或解释他们的过程有直觉的原因,例如,“我就是知道”。在这些默示知识的情况下,初学者可能更好地从旨在支持初学者的教学材料中学习通常称为“脚手架式教学”,或者从同伴而不是专家那里学习。一个知识更丰富(但仍然相对新手)的同伴是连接初学者和专家之间的一个非常宝贵的资源。他们可以帮助初学者发展新知识,帮助专家重新发现自动化的知识。

  1. 编程能力的预测因素尚不明确
    学习编程的成功,像大多数活动一样,是建立在固有天赋和实践的混合上的。有些人认为这纯粹是关于天赋——“你天生就拥有它”的观点——有些人认为这几乎完全关于实践——“一万小时”理论,认为只要足够的实践就是达到专业水平所必需的。这两种极端观点都是错误的,在本节中,我们将探讨关于天赋和实践不同影响的证据。

有大量研究试图预测编程天赋,但很少有可靠的结果。试图为编程能力开发预测性测试的尝试基本上没有成功。研究发现,以下所有因素都不能预测编程能力:性别、年龄、学术专业、种族、数学先前表现、另一种编程语言的先前经验、对计算机科学的看法,以及对人文或科学的偏好。从20世纪60年代开始,有一个针对编程的天赋测试行业,但正如罗宾斯总结的那样,预测准确性很差,这些测试不再使用。

试图为编程能力开发预测性测试的尝试基本上没有成功。

关于实践相关的经验年数的重要性,证据是混合的。Stack Overflow上程序员的声誉与他们的年龄有相关性:年长的人有更高的声誉。然而,最近的一项研究发现,在职业生涯相对较早的程序员中,经验年数与编程任务的成功之间只有微弱的联系,这表明天赋可能比经验有更强的影响,至少在程序员职业生涯的早期是这样。

像大多数领域一样,两个在早期编程中预测成功的弱因素是一般智力(见第4节)和工作记忆容量。这些因素大致代表推理技能和学习者一次可以处理的信息量。因此,它们预测的是学习速度而不是绝对能力。这些两个因素的一个子测量,空间推理,是编程成功的更强预测因素,尽管仍然相当适度。空间推理还预测其他科学和数学领域的成功,所以这不是特定于编程的。此外,这些弱到适度的相关性随着经验的增加而基本消失,原因多种多样。因此,聪明的人不总是成为优秀的程序员,优秀的程序员也不必具有很高的一般智力。

聪明的人不总是成为优秀的程序员,优秀的程序员也不必具有很高的一般智力。

简而言之,很难预测谁能编程,特别是在长期内。程序员可能来自任何背景或人口统计,与任何其他因素(如智力)的联系在面对经验时通常是短暂的。因此,在招聘新程序员时,没有捷径来识别编程能力,也没有可靠的“候选人档案”来筛选程序员的编程能力。

  1. 你的心态很重要
    有一个长期的关于编程能力二元分割的观点:你要么能编程,要么不能。在这背后有许多竞争理论。其中一个更有说服力的理论是学习边缘动量的观点,即每个主题都依赖于前面的主题,所以一旦你落后了,你将很难赶上。一个较不令人信服的理论是“极客基因”(你天生就有或没有),这几乎没有经验证据。正如前一节所讨论的,我们最近开始理解编程能力的差异作为先前经验的差异。看起来可能相似的学习者(例如,在同一班级中,拥有相同的学位,完成相同的训练营)可以拥有截然不同的知识和技能,使他们在学习边缘动量方面领先或落后,或者在某一特定时间点,使他们看起来像是“天生就有”或没有。在任何高度技术性的领域,这种类似的效果都可以找到,这些领域在大学之前是可选教授的(例如,计算机科学、物理和工程学)。

关于固定与成长心态的二元分割观点,以及它对教学和学习的影响,已经在学术学科中进行了研究。一个固定心态与天赋观点一致,即人们的天赋是天生的且不可改变的。应用于学习,这种心态表明,如果有人在新任务上遇到困难,那么他们就不适合它。或者,成长心态与实践观点一致——人们的能力是可塑的。应用于学习,这种心态表明,如果有人在新任务上遇到困难,他们可以通过足够的实践来掌握它。

正如切里安等人所描述的,这两种极端观点都不是真的。例如,几乎每个人都可以学习一些物理,即使他们最初并不擅长。然而,几乎没有人会获得诺贝尔物理学奖,无论他们练习多少。在这两个极端之间,我们经常试图找出我们能力的界限。当教师和学习者以成长心态面对新任务时,他们倾向于更一致地坚持困难并克服失败。

虽然这种效应的证据是有力的,直观的,研究表明,改变某人的心态使其更趋向成长型是有困难的。特别是,有两个关于如何促进成长心态的常见误解被证明是无效的。第一个误解是,因为成长心态偏爱实践而不是天赋,所以应该奖励努力而不是表现。但学习者并不愚蠢;他们可以分辨自己是否没有进步,老师赞扬无效的努力并没有帮助。相反,只有当学习者使用有效的策略并走向成功时,才应该奖励努力。第二个误解是,当某人以成长心态面对任务时,他们将在整个任务中保持这种心态。实际上,当我们面临挫折和失败时,人们会倾向于固定心态,因为我们不确定我们能力的界限在哪里。因此,我们必须练习克服挫折和失败,以保持成长心态的方法。

与固定和成长心态相关的一个概念是目标定位。这分为两类:接近和回避。“接近”目标定位涉及想要做得好,这会激发积极和有效的学习行为:努力工作,寻求帮助,并尝试新的挑战主题。相比之下,“回避”目标定位涉及避免失败。这会导致负面和无效的行为:学习无组织,不寻求帮助,对表现的焦虑,避免挑战。重要的是,学习者可以在没有严重惩罚的情况下犯错,如果他们要被引导向“接近”而不是“回避”。

当学习新技能或培训某人新技能时,请记住,以成长心态面对任务是有效的,但也需要培养的技能。不幸的是,我们不能简单地告诉人们要有成长心态并收获好处。相反,通过寻求或提供关于学习过程和策略有效性的诚实反馈来培养这项技能。对于导师来说,要表扬门徒取得进步的领域,并接受他们会犯错而不加指责。对于学习者来说,当你对进步感到怀疑时,反思过去几周或几个月技能的提高。此外,预期成长心态在面对失败时会转向固定心态,但它也可以通过实践重新发展并变得更强大。感到气馁是正常的,但这并不意味着你总会感到气馁。如果你想退出,休息一下,散散步,考虑一下你的策略,然后再次尝试。

总结
软件开发者必须不断学习以跟上该领域的快速发展。学习任何事物,包括编程,都涉及到将条目提交给记忆。人类记忆极其复杂。虽然它与计算机架构有一些相似之处,但关键的差异使它的工作方式截然不同。在本文中,我们解释了当前对人类记忆如何工作、学习如何进行、初学者和专家之间差异的科学理解,并将其与软件开发者可以采取的实际步骤联系起来,以提高他们的学习、培训和招聘。

建议
我们将建议分为招聘和培训学习两部分。

对于招聘,我们提出以下建议:

没有好的编程能力的替代品。基于性别、种族或其他因素的刻板印象没有证据支持。如果你想了解候选人的编程能力如何,查看他们以前的工作或在真实的编程任务上测试他们。为了强调一个特定的观点:不要使用大脑谜题来测试候选人。

至少在年轻开发人员中,经验年数可能不是能力的非常可靠衡量标准。

Behroozi等人的一个相关建议是让候选人在房间里自己解决面试问题,然后再呈现解决方案,因为面试官观察或要求边解决边讲话增加了认知负荷和压力,从而损害了表现。

对于学习和培训,我们提出以下建议:

阅读大量代码将帮助某人成为更有效率的程序员。

专家并不总是培训初学者的最佳人选。

学习需要时间,包括学习会话之间的时间。紧张的填鸭式学习不是有效的,但间隔重复是有效的。

同样,花时间远离问题可以帮助解决问题。

仅仅因为你可以通过互联网搜索或生成式AI工具找到它,并不意味着学习已经过时。

使用示例在抽象概念和具体可学习事实之间进行切换。

寻求成功(而不是避免失败)以及相信能力是可以改变的,是韧性和学习的重要因素。

延伸阅读
许多关于学习的书籍都围绕正规教育展开:它们针对学校教师和大学讲师。然而,这些原则适用于任何地方,包括专业发展。我们推荐三本书:

丹尼尔·T·威林厄姆的《为什么学生不喜欢学校?》提供了关于记忆原则和大脑如何工作的许多原则的简短且易读的解释。

费利恩·赫尔曼斯等人的《程序员的大脑》将这些概念与编程联系起来,并描述了在学校使用的学习和复习技巧如何仍适用于专业发展。

保罗·A·柯尔施纳和卡尔·亨德里克的《学习是如何发生的:教育心理学的开创性著作及其实践意义》提供了对有影响力的论文的游览,用简单的语言解释它们以及它们之间的含义和联系。

  1. 不错不错,我喜欢看 www.jiwenlaw.com

  2. xyupwellta 5 天前

    想想你的文章写的特别好https://www.237fa.com/

  3. yxrvdseatx 9 天前

    怎么收藏这篇文章?

  4. eabawokhri 14 天前

    博主真是太厉害了!!!

Theme Jasmine by Kent Liao