{
"title": "如何快速学习一门技术",
"tags": [
"post",
"learn",
"translation"
],
"summary": "关于如何快速学习一门技术,受益良多,故翻译出来分享给大家。",
"sources": [
"xlog"
],
"external_urls": [
"https://blog.mancuoj.me/how-to-learn-stuff-quickly"
],
"date_published": "2023-04-23T05:44:38.505Z",
"content": "> 原文是 [how-to-learn-stuff-quickly](https://www.joshwcomeau.com/blog/how-to-learn-stuff-quickly/),受益良多,故翻译出来分享给大家。\n\n人们常说互联网使教育变得民主化:只需要谷歌搜索就可以获得人类知识的总和!然而,获得信息只是故事的开始,你还需要将原始信息转化为可用的技能。\n\n对于我们中的很多人来说,两者之间的差距可能会导致“教程地狱”之类的事情 —— 陷入一个又一个的教程中,却从未感觉自己在取得实质性的进展。\n\n了解“如何有效地学习”是非常重要的,尤其是作为软件开发人员;学习新事物几乎就是你的全部工作!如果你能学会快速掌握新的语言/框架/工具,你将能够比一般的开发人员更有效率。这是一种超能力。\n\n在这篇博客中,我将分享我在学习方面的经验,并向您展示我是如何快速掌握新技能的!\n\n\n## 混合\n\n广义上讲,有两类学习:\n\n1. 指导性学习: 阅读教程,参加课程,观看视频。任何有指导的学习方式。\n2. 非指导性学习: 从头开始创建你自己的项目,扩展一个教程,在文档中查找东西。任何你不遵循指南的行为。\n\n如果你只遵循指导性的资源,你就会陷入教程的地狱,你不会学到一个成功的开发者所需的解决问题的技能。当你试图建立自己的项目时,你将不知道如何开始,你就会觉得自己花了那么多时间练习,却没有学到任何切实可行的技能。\n\n另一方面,如果你完全专注于无指导的学习,那将会花费很长时间。如果没有一个有经验的指导,你将需要重新发明每一个轮子,花几天或几周时间来解决已经解决的问题。这是一条漫长而令人沮丧的道路。在最坏的情况下,你可能会完全放弃,因为你会觉得你可能不够聪明,不适合这个东西。\n\n所以我们需要混合它们,在指导性资源中加入一些非指导性学习的想法。\n\n## 故意犯错\n\n你可能和我一样,不喜欢犯错误,总是希望一切都在第一次就完美进行。\n\n这种心态一般对生活会有帮助,对其他领域也有帮助。如果您是一名汽车修理工,错误的零件可能会造成数百美元的损失。如果您是一名牙医,一个错误可能会毁了某人的笑容。\n\n但是,对于软件开发,错误是免费的!如果我们犯了错误,我们可以返回到我们的编辑器,更改代码,然后重试。我们甚至有一些有用的错误信息,可以为我们指明正确的方向。这其实是一种奢侈,而且我们还没有充分利用它。\n\n当我在学习一个教程时,我喜欢玩代码。与其逐字逐句地复制/粘贴所提供的代码,不如尝试一下:如果省略其中的一行,会发生什么?或者改变一些数值?\n\n我试着像个科学家一样行事。如果我对这段代码应该如何工作有一个假设,我就会改变代码来测试这个假设,看看它是否以我预期的方式中断。当我发现我的假设有缺陷时,我可能会绕过教程,在谷歌上做一些研究。当然如果“兔子洞”太深,我可能会把它添加到 \"以后要探索的东西 \"。\n\n这个过程可以帮助我们避免一直跟随“自动驾驶”的教程,陷入“复制/粘贴代码但没有真正理解它的作用”或“不知道为什么这样做”的节奏。\n\n学习应该是一个主动的过程。对代码的探究会帮助我们建立一个心理模型,了解正在发生的事情。\n\n\n## 淡化教程\n\n几年前,当我刚开始工作时,我使用了一个过程,我称之为 \"淡化教程\"。\n\n它的原理是这样的:\n\n1. 逐字逐句地学习教程,一步步地学习。\n2. 当你完成后,将代码重置为初始状态,并最小化教程的网页。看一下你在不看教程的情况下能走多远。当你被卡住时,把教程拉回来,一旦你跨过了障碍,再把它最小化。\n3. 重复这个过程,直到你能在不看教程的情况下从头到尾完成它。\n\n就像上面描述的科学家心态一样,这个过程是有用的,因为它迫使你集中注意力。教程会逐渐消失,而你最终学会了如何在没有指导的情况下建造这个东西。\n\n这种方法超级有效,但不是每个人都喜欢重复建造同样的东西。不过,如果你正在努力逃离教程地狱,这可能值得一试!\n\n\n## 扩展教程\n\n假设我们正在学习 [React 的官方教程](https://react.dev/learn/tutorial-tic-tac-toe) ,通过构建一个井字棋游戏来学习 React。\n\n完成这个教程后,您将创建一个功能齐全但非常精简的游戏。\n\n我们可以给它添加各种有趣的花里胡哨的东西:\n\n- 跟踪每个玩家赢得了多少场比赛\n- 使用更多展示组件来增强 UI\n- 允许配置棋盘大小(4x4、5x5)\n- 添加玩家可以对抗的 AI\n- 一些奇思妙想(动画、音效、胜利时的五彩纸屑等)\n\n发挥创意,选择您真正感兴趣的东西!\n\n这个策略很好,因为它使你避免了从头开始的压力。因为你已经有了一个功能齐全、易于理解的项目。\n\n## 创建相关项目\n\n完成井字游戏项目后,您可能有点不确定下一步该做什么。\n\n在跳转到另一个教程之前,尝试从头开始构建一个类似的项目可能是个好主意。\n\n例如,也许您可以制作 Bingo 游戏(译者注:或者换成中国人熟悉的五子棋游戏)!您可以在略有不同的上下文中利用你的一些新技能(状态管理、事件监听)。您可能会遇到教程中没有涉及所以无法解决的事情,这时你可以在谷歌上做一些搜索来尝试找到解决方案(译者注:现在还有 ChatGPT)!\n\n如果实在解决不了,可以暂时搁置这个项目。多做几个教程,然后再回来看看,是否学到了足够多的内容来解决它。\n\n我见过这种被描述为“one on, one off”的策略。按照指导资源(如教程)进行操作,然后花费相同的时间创建一个类似(但没有指导)的项目。如果教程向您展示了如何创建一个 Instagram 的克隆,就尝试自己创建一个 Twitter 的克隆!\n\n## 寻找平衡\n\n当我刚开始学习时,我倾向于主要专注于引导学习。当我还在努力学习语法和基本知识时,很难以无指导的方式创建任何东西!\n\n然而,随着我越来越熟悉语法,平衡就发生了变化。我把越来越多的时间花在无指导的学习上,以及创建对我来说有趣的东西。当我遇到新的和不熟悉的问题时,我会寻求教程,但随着我获得更多的经验,这种情况变得越来越不常见。\n\n我的图表如下所示:\n\n\n![image](ipfs://bafkreibui4miwe676qjt63yjodzrwsikeihgxu3ehieo5omesbrsav7spe)\n\n你的图表可能看起来有点不同,这取决于你是否能找到正确的平衡点。重要的是,我们不要只关注有指导或无指导的学习。\n\n\n## 培养心态\n\n\n\n许多年前,我和一些朋友去打保龄球。\n\n我做得很差,大部分球都掉进了排水沟。到比赛结束时,我的得分是目前小组中最低的。\n\n有两种不同的方式来解释这种情况:\n\n1. 我不擅长打保龄球,而且我永远不擅长,保龄球不是我的菜。\n2. 我不擅长打保龄球,但是如果我愿意的话,我可以成为一名出色的投球手。\n\n这有一个自我实现的预言:无论你选择哪种解释都是正确的。如果您认为自己的保龄球技术水平是固定的,那就是固定的。如果您相信自己可以进步,那么您一定会进步!\n\n如果您想快速学习新技能,培养正确的心态至关重要。\n\n在软件开发方面,事情永远不会一帆风顺。不可避免地,我们会遇到各种情况,代码不会按照我们的预期进行。\n\n这要么导致恶性循环 —— 充满挫折感、自我怀疑和冒名顶替综合症——要么被视为绝佳的学习机会。如果有正确的心态,没有什么比难以理解的错误信息更能帮助您快速学习。\n\n老实说,与毫不费力的成功相比,我们从奋斗和失败中学到的东西要多得多。有了成长心态,奋斗可能并不完全有趣,但感觉很有成效,就像一次很好的锻炼。\n\n## 目标和动机\n\n我们生活在一个社交媒体炒作的世界里,很容易感到压力,比如要跟上潮流,学习 Twitter 上出现的每一个流行的 JS 库。\n\n就个人而言,每次我尝试这样做时,都没有成功 😅\n\n我没有特别的动力去为了学习而学习。为了让我保持动力,我需要心中有一个令人兴奋和具体的目标。\n\n例如:几年前,我发现了一款 VR 视频游戏 Beat Saber。在这个游戏中,你用光剑攻击方块,并伴有音乐。每首歌都有独特的编舞。\n\n虽然社区中存在让用户创建自己的编舞(在社区中称为“地图”)的软件,但我不喜欢,我想为 Beat Saber 创建自己的地图编辑器。\n\n经过几个月的艰苦和偶尔令人沮丧的工作,我实现了我的目标。如果你对这个项目感兴趣,你可以 [查看 Github 上的代码](https://github.com/joshwcomeau/beatmapper)。\n\n在这个项目之前,我没有 3D 经验,我不得不学习大量关于 WebGL、Three.js 和 react-three-fiber 的知识。学习是艰苦的,无论你的心态有多好,总会有事情进展不顺利的时候。\n\n但是因为我有一个具体的目标,我真正想要的东西,所以我能够克服挫折并继续取得进步。如果我只是为了好玩而学习这些东西,或者因为我认为它在我的简历上看起来不错,我可能很快就会放弃它。\n\n不同的人有不同的动机,所以我并不是说你需要创建一个小众项目。但我确实认为,心中有一个目标很重要,一个你真正为之兴奋的目标。否则,在最初的新鲜感消失后,你很难维持所需的动力。\n\n## 记性\n\n我的记性很差。这可能有点问题;如果你不记得东西,就很难学习东西!幸运的是,我有一个记忆系统:间隔重复。\n\n间隔重复的核心思想就是:为了加强记忆,您需要在它即将消失时立即查看它。每次你加强记忆,它只会持续更长的时间。\n\n这听起来很复杂,但有一些工具可以为您跟踪这一点。就个人而言,我使用一个 leitner 盒子,一个可以容纳几百张索引卡的实体盒子。每天,我都会复习一小撮卡片。\n\n具体可以查看 [如何永远记住任何事情](https://ncase.me/remember/zh.html) 的解释。\n\n## 养成日常习惯\n\n\n假设我们承诺每周花 7 个小时学习新事物。您认为每天花一个小时进行该活动更有效,还是每个星期日花 7 小时?\n\n有趣的是,我更频繁地花费少量时间取得了更大的成功。\n\n我知道不是每个人都有这样的奢侈的时间,但如果你能做到,我强烈建议你每天花一些时间在你想学的东西上。\n\n我有一些关于为什么它对我更有效的假设:\n\n1. 每天晚上,大脑都会处理并提交您当天所学的知识。我想每天都利用它,而不是每周一次!\n2. 因为我每天都练习,所以我可以从中断的地方继续学习。我不必花费大量时间来刷新我的记忆并重新开始。\n3. 正如我们所讨论的,在新鲜感消失后很难保持动力。如果你能把它融入到你的日常生活中,你就不必太担心动力了。无论您感觉如何,它都会成为您要做的事情。\n\n## 公开学习\n\n我是 Swyx 的 [Learn in Public](https://www.swyx.io/learn-in-public) 哲学的忠实粉丝。\n\n它的主要思想是,通过发布我们所学的知识,我们可以帮助未来的自己。当我们发现新事物时,我们应该创建一个文件来记录它,例如博客文章、推文或 YouTube 视频。\n\n这可能有点违反直觉;为什么要花我的“学习时间”写博客文章?这不是浪费时间吗?\n\n公开学习有很多好处,但以下是我发现的:\n\n- 您是否曾经尝试向某人解释某事,却发现您并没有像您认为的那样完全理解它?写一篇博文也有同样的效果。这是发现心智模型中的缺陷/漏洞的最佳方式,因此您可以修复它们。\n- 世界上最糟糕的感觉是遇到一个你知道你以前解决过的错误,但你不记得你是如何解决它的。如果你写过一篇关于它的博客文章,你可以参考它!\n- 通过分享您学到的知识,您将成为开发社区的积极参与者。你可以结交朋友和建立联系。这可以是有趣和充实的,更不用说在找新工作或创办新企业时的好处了!\n\n一个警告:不要陷入花费数周时间从头开始建立一个完美博客的陷阱!首先可以在像 Dev 这样的平台上发布,甚至只是在 Twitter 上发布!在建立博客之前,我在 Medium 上发表了数十篇博文。如果您发现自己真的很喜欢公开学习,随时可以迁移到一个精美的自定义博客。 😄\n\n\n## 技能网\n\n最近,我开始自学如何使用 Blender 创建 3D 插图。\n\n我还是个初学者,在这项技能上投入了大约 150 个小时,但我已经能够创造出一些看起来不错的艺术品。\n\n![image](ipfs://bafybeihlnjyiwd7mif4ur22tehg4ocv4vaz77ao3yoh5r6fgt4kn5ezi3u)\n\n我能够如此快速地学习,是通过遵循这篇博文中列出的所有技术。但我还有另外一张王牌:技能互补。\n\n3D 插图不是一项单一的技能;它是数十种个人技能的集合。其中一些,比如创建 3D 模型,对我来说是全新的,我必须从头开始学习。但其中一些是我经历过的。\n\n例如:我是一个摄影爱好者。多年前,我学习了构图,如何在视口内安排元素以获得引人注目的镜头。在渲染中定位对象时,我可以利用这些技能。\n\n这是一个特别具体的例子,但其他的例子就比较模糊了。作为一名前端开发员,我花了很多年的时间来培养对细节的观察力。所有这些像素化的工作都帮助我想出了合适的斜面和厚度的数值。而我的UI设计工作也帮助我理解了色彩理论和美学。\n\n你不一定会认为我拥有的技能可以与 3D 插图协作,但它确实给了我很大的优势。\n\n在我看来,技能就像财富。我掌握的技能越多,它们积累的速度就越快。在一个领域收集的想法和技术可以在另一个领域提供帮助。\n\n我并不是说你应该成为一个全才 —— 拥有一些深厚的专业知识仍然是值得的!但是你的技能网发展得越大,你在学习新事物时的优势就越大。",
"attributes": [
{
"value": "how-to-learn-stuff-quickly",
"trait_type": "xlog_slug"
}
]
}