做一个高效的学习者,与做一个高效的开发者一样重要。

作为一名开发者,你的工作要求你每一天都要学习,而不只是每天关注 Hacker News、Twitter、Reddit 和 Facebook 等等。

在每天的工作中,你会不断遇到新的代码库和新的挑战。在家里的情况也一样,你会不断接触开源项目和你自己的项目,这些都需要你不断克服各种挑战。

科技世界的变化非常快,学习最新的工具、语言和框架,会让你觉得自己多了一份全职工作。长话短说:学习是一件艰难的事情。但是,要想在工作中不被淘汰,我们就需要具有快速、高效学习的能力。

在去年一年内,我从一个连 Chrome debugger 都不会使用的人,成为了一名软件工程师,加入了一家知名的数字货币公司。在这个过程中,我快速地学会了一门新的技能——编程。

尽管如此,我依然觉得学习是一件困难的事情。

老实说,在这个过程中,我遇到的每一个新概念,都让我挣扎万分。我遇到了太多的未知,太多的不确定性。

我不断质疑自己:

“我怎么可能坚持下去呢?”

“如果在学习编程的过程中,我每一天都感觉这么累,我会被累垮的。这真的是我想做的事情吗?”

“如果编程是我想做的事情,我会感觉轻松一些吗?艺术家在创作的时候会如此挣扎吗?作家在写作的时候会如此挣扎吗?运动员在比赛的时候会如此挣扎吗?在追求梦想的过程中,我们一定要如此挣扎吗?”

“我难道不是应该在这个过程中找到快乐吗?”

学习编程到底会不会有一天变得轻松一些?

会。一年之后,我发现学会一个新的编程概念依然会很“困难”,它还是会要求你高度自律,努力学习。

但是你会变得更加享受这个过程,而不是觉得手足无措。

这一年究竟发生了什么,居然会有如此大的改变?答案很简单:我对学习的观点发生了改变。曾经的“困难”变成了如今的“吸引”。

在这篇文章中,我将会讲述这个转变的过程。

这仅仅是个开始

学习编程在最初的时候是全世界最难的事。

例如,你可以回想一下你所学的第一门编程语言。一些最基本的概念都会让你感觉难以理解,例如语法和样式。你还需要理解一些复杂的核心概念,例如值、类型、运算符、函数、高阶函数、作用域、参数、闭包以及递归等等。

你会觉得自己在学杂耍,而且是一上来就给你 8 个酒瓶子让你耍起来。

在我刚刚接触闭包的时候,我花了好几个星期才彻底搞明白了这个概念。当我刚接触到这个概念的时候,我以为自己马上就理解了。但是之后当我尝试在实际操作中使用它的时候,我发现自己立刻就卡住了。

这样的情况会经常出现。在当老师的时候,我也经常会遇到这样的情况:学生在第一次接触到某个新概念的时候,无法马上理解,有的时候接触了 10 次依然无法理解。

但是对某个概念纠结久了以后,你会迎来一个“顿悟”的时刻,突然间一切都豁然开朗了。依然用我自己来举例,我阅读了大量有关闭包的文章,然后突然在一瞬间明白了这个概念。

我阅读的每一篇文章,都给我提供了新的视角,在我对这个概念有了 360 度的了解之后,理解这个概念就成了顺利成章的事情。

这次顿悟对我来说非常重要,因为它就像是一次奖励,鼓励我却学习更多的知识——我甚至还写了一篇文章来解释这个概念。

学习是一个过程,而不是目标

如果我们将学习一门知识当成“不得不做的事情”,我们就会急着去完成,好用剩下的时间去做其他一些“有趣”的事情——我们“想要”做的事情。

但是,人的精力是有限的。因此,将学习视为一场竞赛,会让我们产生倦怠,甚至对自己失望。

而如果你将学习视为一个过程,那么每一次小的胜利都会让你欣喜无比。这样一来,你就会获得不断学习的动力。

就像健身一样,健身会给你带来疼痛,如果停止锻炼,疼痛也会随之停止。但是疼痛并没有远离,下次锻炼的时候它还会等着你。如果你能够预见到疼痛会来,你的痛苦就会减轻一点。学会适应疼痛,熟悉疼痛,让疼痛成为你生活中的一部分。你的回报,就是健康的身体和健美的身材,还有继续健身下去的动力。

锻炼会形成一个积极的连锁反应:

image-11

学习也是这样。

把学习变成一个有吸引力的过程

想象你自己正在做第一个 Web 应用。

最初的时候,面对空空如也的编辑器,你会感到恐惧,整个任务看上去根本无法完成。你什么都不懂,在完成项目之前,你要学习大量的新东西。

但是,你决心已定,无论如何也要硬着头皮上。

从那之后,你决定一点一点慢慢来。

首先,你需要一个创意,你要做什么样的应用?你的终端用户是什么人?

其次,你要做一个原型应用,或是做一些大概的设计,确定应用大致的样子。你从朋友那里、网络上获得反馈,然后进行迭代,不断完善应用。

第三,你开始研究语言、工具和框架,选择那些最适合你的东西。

之后,你开始集中精力完成这个目标。

有的时候你是在写代码。更多的时候,你是在调试 bug。

有的时候,你会累得无法继续,于是决定休息一会儿。

其他时候,你一点代码都不想写。没关系,你可以花时间来研究其他和你的项目类似的项目。

最终,经过几周的辛勤努力之后,你将作出应用的基本框架。突然间,这个应用的开发过程变得不再那么痛苦了。最初的努力终于迎来了回报,写代码或是进行重构对你来说已经不再是什么难事——因为你以前已经做过 100 次了。

曾经让你无比头疼的事情,如今变得有意思起来了。

image-12

这就是我们的成长过程,我们在这个过程中越来越强大。无论是编程、跳舞、跑步还是阅读,这些事情都不容易,而且这些事情都没有“结束”或是“完成”的时刻。

把你的精力投放在某件事情中,享受这个过程,享受这个过程给你带来的痛苦。因为最初的痛苦会在未来给你带来回报:成就感和自我满足感。

换句话说,挣扎和愉悦是相辅相成的。时刻牢记这个循环:

image-13

一种学习科技概念的方法

下面我来说说我自己的学习方法。这种方法并不能适合所有人,因此如果你也有自己的学习方法,欢迎分享给我们。

我用自己学习 React.js 的过程来举例。

这个技术能解决什么问题?

第一步:我会在谷歌上搜索 React.js 的文档来阅读,了解这个框架的背景等等。

对于学习来说,先弄懂“为什么”,这是一个非常实用的方法,它能让你了解以下几个问题:

它和其他解决方案有何不同?它对我有用吗?这个解决方案旨在解决哪些问题?它是一个只能使用几个月的工具,还是能够从根本上改变我思考和写代码方式的工具?

通过阅读了解核心概念

第二步,我会阅读大量入门文章,以及文档中提供的案例。

请注意,我现在还没有开始接触任何新的代码。阅读和了解应该放在实际操作之前,这一点非常重要,因为这样做是在为未来的学习奠定基础。

就算你可以在了解基本概念之前就学习 React.js 代码,但是未来你依然需要回头来了解这些核心概念,尤其是遇到 bug 的时候。

第一次写代码

在阅读了大量文章之后,我会觉得自己对新技术有了一定的了解,甚至觉得自己已经彻底理解了它,之后,我就会开始接触代码了。

一般情况下,我会尝试做一些规模非常小的项目,方法是跟着一段视频教程来做。

遇到问题

无可避免的,你将会遇到问题。

阅读说明文档对你来说非常简单,但是真正使用新技术的时候,你会意识到自己其实还什么都没有掌握。

在这个时候,我会产生放弃的念头,但是我不会真的放弃,而是提醒自己”痛苦=收获,现在放弃是懦弱的行为“。

我会做如下几件事情:

- 首先我会仔细分析自己所遇到的困难,然后试图找出问题的根本原因。就算不知道原因是什么,我也会猜测一下。

- 之后我会从电脑前站起来,做点放松的事情。在我头脑混乱的时候,很难找到解决办法。暂时远离问题本身,有的时候会有良好的效果。

- 之后,根据我的推测,我会试图寻找解决办法,但是先不再网上进行查询,而是尝试独立解决。即使我的方向是错误的,在这个过程中我也能收获良多。

- 如果我的推测方向是正确的,太好了,我自己解决了问题。如果我的推测是错误的,我会在谷歌上查询文档、博客或是 Stack Overflow 和 freeCodeCamp 的文章,在其中寻找解决方式。

- 在阅读的时候,我会做笔记,尤其是那些有可能帮我解决问题的内容。

- 还是没有解决方案?没关系,在这个过程中我已经学到了很多东西,即使它们并没有直接帮我解决问题,这些知识在未来一定会起到作用。

- 当我觉得自己真的无法解决的时候,我会在 Stack Overflow 或 freeCodeCamp 求助,或是请其他开发者同事来帮忙。

- 有的时候,这个过程只需要几秒钟,还有的时候需要几个小时,甚至几天的时间。无论时间长短,这个过程本身都会给我带来巨大的好处,帮助我成为一名更好的开发者。

- 遇到问题的时候,你会觉得自己身在一个伸手不见五指的隧道中,到处寻找光亮。你一定会找到光线,而且在这个过程中,你会对这个隧道有所了解——正是对这个隧道的了解才让你成为一名优秀的编程人员。

不断重复

在做了一个小项目之后,我需要通过不断的重复练习来掌握这种新工具。因此我会再一次自己用它做项目。但是我依然不会去做大项目,而是继续做一些与上一个项目有所区别的小项目。

掌握

业精于勤,因此我会通过不断地做小项目来掌握新技术,直到我确定自己掌握了其中的核心概念。

最终,在通过阅读、实践之后,我终于准备好用新学的技术做点真正的东西了。

在整个过程中,我都会刻意地让这个过程变得更有趣。我会不断地提升难度,让项目的难度稍稍高于我当前所掌握的技能,但是注意难度不能太高,免得将自己扔到深渊里爬不上来。当我觉得自己被项目搞得疲惫不堪的时候,我会马上休息一会儿。

学习很有趣

有了良好的计划,学习编程可以是一件很有趣的事情。初期,你会觉得编程非常复杂,正是由于这个原因,很多人选择了半途而废,这些人放弃不是因为编程“无聊”,而是由于编程“太难”。

在经过了一段时间的适应之后,处理新信息就会变成你的肌肉记忆,无需特别的思考,大脑就会反应过来。学习,就是在痛苦的浪潮中存活,之后你就会获得奖励。

突然间,你会发现编程学习变得简单了。

原文链接:https://www.freecodecamp.org/news/learning-how-to-learn-the-most-important-developer-skill-7bf62dfaf67d/