记忆和学习编码

2025-05-27

记忆和学习编码

记忆等于学习。

对我们很多人来说,这就是我们理解力的评估标准。我们因为记住了字母表、数字、DNA中的四种核苷酸,以及x等于-b加上或减去b平方根减4ac除以2a而受到表扬。我想象着,在某个地方,我以前的数学老师正在微笑。

我们很多人都抱有这种信念。我在学习编程基础的时候就是这样。我花了很多时间试图记住 for 循环的语法。很多个晚上,我努力背诵数组方法的名称、语法和返回值。很多个夜晚,我一遍又一遍地阅读 React 文档,希望我能把它刻在脑子里。

过去几年,我一直在 Odin 项目中帮助大家学习编程,我注意到那里的很多人都在做同样的事情。每周至少会有几次,大家来到我们的 Discord 服务器,询问最佳的笔记记录技巧,或者表达对切换到新主题的担忧,因为他们担心会忘记刚刚记住的内容。

有一个残酷的事实:你花了几个小时努力记住的概念,现在感觉终于记住了,你还是会忘记的。不过别担心。没关系,这很正常。

刚开始从事软件工程师工作时,我最担心的就是脑子里的知识是否足够。我害怕在工作中与经验丰富的工程师结对,因为我不想让他们发现我知识匮乏。当我们结对的时候,我会因为记不住某个方法的语法,或者记不住另一个方法的返回值而感到尴尬。后来,我和同事约翰进行了一次结对练习,一切都改变了。

在结对完成一项任务时, localStorage的概念浮现在我脑海中。我提到我以前用过几次,希望能给我的新同事留下个好印象。John 邀请我跟他讲讲。我当时真的崩溃了,完全想不出说什么。我道了歉,说我把 localStorage 忘得一干二净。我思考了几秒钟,最终告诉他,localStorage 确实有设置和检索信息的方法,但除此之外我什么都不会。我害怕他的反应。我以为他会说“我竟然没记住 localStorage 的所有内容,真是疯了”,然后去跟老板说雇佣我是个错误。结果,John 跟我讲了这样一段话。他原话比较模糊,但大意是:

“没关系。我自己也好几年没用过这个了。我们一起去谷歌搜索一下,看看能不能解决这个问题。”

谈话继续进行,我对技术方面的内容记忆不多。他竟然没有发火,这让我很震惊,也让我印象深刻。在结对练习结束时,我们讨论了重新查阅文档的必要性。John 说他经常用 Google 搜索和阅读文档,并表示没有记住所有内容是很正常的。我一直以为伟大的工程师无所不知。我想象他们时刻携带着所有知识,可以随时背诵他们脑子里的任何内容。毕竟,我之前一直以为死记硬背就等于学习,这让我相信,我的优秀、技能和实用性取决于我的记忆力。John 告诉我,这远非事实。

如今我已经在这个领域摸爬滚打了几年,发现自己非常认同 John 的观点。我经常会忘记怎么用东西。语法、返回值,甚至方法名都会忘记。如果一段时间没用 Flexbox,我就得提醒自己怎么让 div 居中。不过,我不用像以前那样抓狂,因为我知道,需要的时候可以去查阅文档来温习一下。

当我们积极地投入某个主题时,这个主题很容易被记在工作记忆中。我们希望,我们学习某个事物的努力能将其转化为长期记忆。对很多人来说,没能把所有接触过的东西都存入长期记忆,就是失败。把事物从工作记忆转移到长期记忆并非易事。更糟糕的是,工作记忆并非无限。这意味着,当我们熟悉一件事物时,另一件事就会从工作记忆中消失。这让很多人感到担忧。每次学习新知识,我们最终都会回到那些感觉已经忘记的东西上。除了重新回顾忘记的东西,我们现在面临着忘记刚刚学过的东西的风险。于是,我们就陷入了一个循环,不断地试图一次性记住所有东西。如果我们总是试图记住已知的知识,那我们还有什么空间去平静地学习新知识呢?

在现实世界中,没有人能始终记住所有事情。我们更有可能记住事物的大致概念,而不太可能记住细节。在学习编程的冒险中,完美记忆和模糊认知之间的效用几乎没有区别。

知道可以删除数组的最后一个元素与记住 JavaScript 的 pop 方法的语法一样好。

❗ 全面披露 ❗:当我敲下上面这句话的时候,我心想:“ pop 方法到底是不是用来删除数组最后一个元素的? ” 两年前的我肯定会吓得魂飞魄散,后悔莫及。但这次不同了。我打开浏览器标签页,查看了文档,确认确实如此。太棒了!

随着我们不断思考,我们更有可能将较大的概念转移到长期记忆中,而不是与这些概念相关的细节。就像上面的例子一样,我们更有可能记住 JavaScript 中移除数组最后一个元素的方法,而不是完美地记住 pop 方法的所有内容。

我们无法记住所有东西,但我们可以意识到很多东西。了解要研究什么就足以帮助我们完成学习。随着时间的推移,通过大量的练习、犯错和实验,我们就能掌握这些知识。

隐约知道就够了。

免责声明

在面试前记住一些内容是有用的。但当你真正面试时,你会惊讶地发现,你记住的东西真的很多。我在这里分享的想法,特别适合那些积极学习的人。

文章来源:https://dev.to/theodinproject/memorization-and-learning-to-code-1b6h
PREV
Node 课程更新:PostgreSQL、Prisma 等等!
NEXT
学习代码 专注于任务的重点 运行你遇到的每段代码 避免兔子洞 在宏观层面上规划你的项目,在微观层面上使用伪代码 在完成项目之前不要查看解决方案 阅读其他人的代码 重构你自己的代码 对 OK 感到满意 编写你的单元测试 使用 Git 战略性地构建你的作品集 Foundations 不是一个强大的作品集生成器 选择你喜欢的项目并将它们用作作品集素材 总是在顶点项目上花费额外的时间 正确使用 git