如何快速地学习东西
人们常说,互联网已经使教育民主化:人类知识的总和只需在谷歌上搜索一下就可以得到!然而,获得信息只是故事的一半;
你还需要能够将原始信息转化为可用的技能。
对我们很多人来说,这两者之间的差距可能会导致像教程陷阱那样的事情--被卡在一个又一个的教程中,却从来没有感觉到你正在取得实质性进步。
学习如何有效地学习是超级重要的,特别是作为一个软件开发人员;学习新的东西实际上是整个工作的一部分!如果你能学会快速掌握新的语言/框架/工具,你就能比一般的开发人员更有效率。这算是一种超能力。
在这篇博文中,我将分享我在学习方面的经验,并向你展示我是如何快速掌握新技能的。
指导性和无指导性学习相结合
广义上讲,有两类学习:
指导学习: 指导学习是有系统指导的按规定程序进行学习的一种学习方式。比如阅读教程,参加课程,观看 YouTube 视频。任何你需要参考教程的地方。
无指导学习:从头开始创建你自己的项目,扩展一个教程,在文档中查找东西。任何你没有遵循指南的地方。
如果你只遵循指导性的资源,你会陷入教程陷阱。你不会养成作为一个成功开发者所需的解决问题的技能。当你试图建立自己的项目时,你将不知道从哪里开始。你会觉得自己花了那么多时间练习,却没有学会到任何切实可行的技能。
另一方面,如果你完全专注于无指导的学习,那将会花费很长时间。如果没有一个有经验的向导,你将需要重新发明每一个轮子,花几天或几周的时间解决已经解决的问题。这是一条漫长而令人沮丧的道路。在最坏的情况下,你可能会完全放弃,然后你开始怀疑和相信你只是不够聪明,不适合这个东西。
一些教程意识到了这种二元对立,并将包括非指导性学习的机会。比如扩展目标、思想实验和挑战性练习。我希望这些类型的资源能够更加普遍!
让我们来看看如何将一些非指导性学习融入指导性资源的一些想法。
故意制造小错误
如果你和我一样,你不喜欢犯错。你希望一切都能完美地进行,尤其是第一次就这样。
这种心态一般在生活中很有帮助,在其他领域也有帮助。如果你是一名汽车修理工,错误可能导致数百美元的零件损失。如果你是一名牙医,一个错误可能会毁掉别人的笑容。
然而,在软件开发中,错误是免费的!如果我们犯了一个错误,我们可以回到我们的编辑器,修改代码,然后再试一次。我们甚至还有有用的错误信息,可以(有时)为我们指出正确的方向。这是一种令人难得的奢侈行为,但我们却没有充分地利用这种优势。
当我跟随一个教程学习时,我喜欢与代码玩耍。与其逐字逐句地复制/粘贴所提供的代码,不如尝试一下:如果你省略其中的一行,会发生什么?或者如果你改变一些数值?
我试着像个科学家一样行事。如果我对这段代码应该如何工作有一个假设,我就通过改变代码来测试这个假设,看看它是否以我预期的方式中断。当我发现我的假设有缺陷时,我可能会绕过教程,在谷歌上做一些研究。或者,如果这个兔子洞似乎太深了,我可能会把它添加到 "以后要探索的东西 "列表中。
这个过程可以帮助我们避免在自动驾驶仪上跟随教程的致命节奏,复制/粘贴代码而不真正了解它的作用或为什么要这样做。
学习是一个积极的过程。对代码的探究和探测将帮助我们为关于正在发生的事情的建立一个心理模型。
教程淡化
几年前,当我刚开始工作时,我使用了一个我称之为 "教程淡化 "的过程。
它的工作原理如下:
1. 逐字逐句地按照教程,一步一步地进行。
2. 当你完成后,将代码重置为初始状态,并将教程最小化。看看你不看教程能走多远。当你被卡住时,把教程拉回来,但一旦你解决了问题,再把它最小化。
3. 重复这个过程,直到你可以不看说明就能从头到尾地完成教程。
就像上面描述的科学家心态一样,这个过程是有用的,因为它迫使你注意到。教程逐渐消失,而你最终学会了如何在没有指导的情况下建造这个东西。
这种方法超级有效,但不是每个人都喜欢重复做同样的东西。不过,如果你一直在努力摆脱教程地狱,这可能值得一试!
扩展教程
让我们假设我们通过建立一个井字游戏来学习 React ,按照官方的教程。
当你完成本教程时,你将创建一个功能齐全但相当简约的游戏。
有各种有趣的铃声和口哨,我们可以添加到它。
追踪每个玩家赢得的游戏数量
用更多的展示组件来增强用户界面
允许配置棋盘大小(4x4,5x5)。
增加一个玩家可以对战的 AI
奇思妙想! (动画、声音效果、胜利后的彩纸等)
要有创造性,并挑选你真正感兴趣的东西!这种策略很好,因为你避免了空白画布的压力。
这种策略很好,因为你避免了空白画布的压力。你已经有了一个功能完备、理解透彻的项目。你是在为一个坚实的基础添砖加瓦。
它还有一个很好的副作用:如果你为一个教程项目添加了重要的扩展,你可以在你的作品集中记下它的功劳。我在《建立一个有效的开发组合》一书中深入介绍了这一策略。
建立相关的项目
一旦你完成了井字游戏项目,你可能有点不确定下一步该做什么。
在跳到另一个教程之前,尝试从头开始建立一个类似的项目可能是一个好主意。
例如,也许你可以做一个宾果游戏 你将能够利用你的一些新技能(状态管理、事件监听),但在一个稍微不同的环境中。你可能会遇到不知道怎么做的情况,因为教程中没有涉及;你可以在谷歌上做一些调查,试图找到解决方案
如果你真的无法破解,你可以暂时把这个项目放在一边。多做几个教程,然后再回来看看你是否已经学到了足够的知识来解开自己的障碍。
我曾见过这种策略被描述为 "一上一下"。跟随一个有指导意义的资源,如教程,然后花同样多的时间创建一个类似的(但没有指导意义的)项目。如果教程告诉你如何建立一个克隆的 Instagram,那么你可以尝试自己建立一个克隆的 Twitter!
寻找正确的平衡
当我处于学习旅程的最初阶段时,我倾向于将主要精力放在指导性学习上。当我还在摸索语法和基础知识的时候,很难以非指导性的方式建立任何东西。
不过,随着我变得更加自如,平衡也会发生变化。我把越来越多的时间花在非指导性学习上,构建我认为有趣的东西。当我遇到新的和不熟悉的问题时,我会寻找教程,但随着我经验的增加,这种情况变得越来越少了。
我的图表看起来是这样的。
你的图表可能看起来有点不同;最终,这取决于你是否能找到正确的平衡点! 重要的是,我们并不完全专注于有指导或无指导的学习。
培养心态
许多年前,我和一些朋友去打保龄球。
我做得不好。我的大部分球都掉到了水沟里。到比赛结束时,我的分数是全组最低的。
有两种不同的方式来解释这种情况:
我只是不擅长打保龄球,而且永远也不会。保龄球并不是我的专长。
我不擅长打保龄球。不过,如果我想,我可以成为一个优秀的保龄球手。
这里面有一个自我实现的预言:无论你选择哪种解释都是正确的。如果你认为你的保龄球技术水平是固定的,那么它就是固定的。如果你相信你可以提高,你就会!*。
如果你想快速学习新技能,培养正确的心态是至关重要的。
谈到软件开发,事情从来不会一帆风顺。不可避免地,我们会遇到一个粗糙的补丁,代码做不到我们期望的那样。
这可能会导致一个下降的螺旋--一个充满挫折、自我怀疑和冒名顶替综合症的螺旋,或者它可以被看作是一个绝好的学习机会。如果你有正确的心态,没有什么比难以捉摸的错误信息更能帮助你学习。
老实说,我们从挣扎和失败中学到的东西比我们从毫不费力的成功中学到的东西多得多。有了成长心态,挣扎可能并不完全是有趣的,但它感觉很有成效,就像一个好的锻炼。
了解更多关于培养成长心态的信息。
参考链接:
版权声明: 本文为 InfoQ 作者【宇宙之一粟】的原创文章。
原文链接:【http://xie.infoq.cn/article/fbb9b5e9d0724083808cbfff3】。文章转载请联系作者。
评论