原文链接:Learning How to Learn: The Most Important Developer Skill
作者: Preethi Kasireddy Software Engineer
具备高效的学习能力和编程能力同样重要。
作为一名开发者,即使你的精力被微信、微博、知乎(译者注:原文是Hacker News,Twitter,Reddit,Facebook)分散,你每天在工作中都需要学习。
在上班的时候你经常会遇到新的代码库和技术挑战。回家看看开源项目和别人的作品,也需要你跟进他们的进度。
技术发展变化非常快,你会发现你无时无刻不在追赶着新的工具、语言、框架的潮流。
常言道: 学如逆水行舟,不进则退。
在过去的一年里,我从一个连Chrome调试台都打不开的小白,变成了一个在一流电子货币加密公司的开发工程师,我非常快地掌握了编程的能力。
但是,学习对我来说并没有那么轻松。
坦白来讲,在学习的过程中充满了煎熬。有太多的未知和不确定。
“这样我怎么坚持的下去呢?”我想。
“要是每天学习写代码这么痛苦,我会疯掉的,看来我对编程并不感兴趣吧?”
“要是我感兴趣的话不应该觉得轻松点么?艺术家搞创作的时候需要绞尽脑汁么?作家也会江郎才尽么?运动员也会遭遇瓶颈么?我们去做自己感兴趣的事情时都会觉得难受么?”
“学习不该使我快乐么?”
学海无涯有捷径么?
有是当然有。学习新的编程知识是很难受的,因为它需要你自律和努力。
但你可以痛并快乐着。
怎么才能获得学习的快乐呢?
很简单:我改变了我对学习的看法。学习并不是困难的而是有趣的。
请容我在接下来的篇幅里娓娓道来。
万事开头难
学习写代码最难的就是开始。
试想一下你要学习的第一门编程语言。你首先要了解它的语法和格式。你还得理解值、类型、操作符、控制流、函数、高阶函数、作用域、闭包、递归等等……
这就好像是学杂耍——一上来就让你耍18颗球一样。
最早我用了好几个礼拜才理解了闭包到底是什么玩意儿。我读文档的时候感觉我理解了,当我准备应用一个闭包时,就又不知所措了。
这是很普遍的,作为一名老师我了解到:想要理解一个新的概念,往往需要你尝试一次、两次甚至更多。
但只要一个人坚持的足够久,总会有豁然开朗的时候。就像当我读完了无数有关闭包的博文、Stack Overflow和文档之后的体验。
每一段我阅读过的材料都让我有了一些新的理解,直到最后我完全理解了闭包。
理解闭包对我来说意义深远,因为成就感鼓励了我继续前行,后来我甚至自己写了一篇解读闭包的博文。
学习是过程,不是结果
如果我们把“学习”视作我们必须完成的一件事,我们就会急功近利。这样我们才能赶快完成好在课余时间去玩玩别的。
只可惜学海无涯,学无止境。要是你把学习当作一场赛跑,你永远也到不了终点,反而会带来失落和失望。
相反,如果你把学习理解为一种过程,你就能体会和感受到一点一滴的进步,这也将鼓励你继续前行。
学习就好像锻炼一样。太剧烈了会受伤,你的伤痛会一直持续,甚至恢复之后你也忘却不了那种痛苦。以后每次运动的时候你都会记起。除非你每次的痛苦都能得到缓解,你慢慢的习惯和适应了它。最后你获得了强健的体魄和有型的身材,这也将鼓励你继续锻炼下去。
运动是一个积极效应的循环:
这在学习上也同样适用。
学习也可以引人入胜
试想你在构建你的第一款Web应用。
最一开始你只能面对一屏幕空旷的代码编辑器。开发工作对你来说像是不可能完成的任务。你什么都不懂,在你真的能开发出来个什么玩意儿之前还有太多东西要学。
令人欣慰的是,你还是勇敢的去尝试了。
从现在开始,你每次只关注和完成一个小点。
首先是构思你的应用。你要做个什么出来?目标用户是谁?有什么困难?
之后,你开始画一些你脑海里构思的草图。并拿给你的朋友或者发到网上给别人看,再慢慢改良它。
再然后,你去搜索那些最适用你开发这个应用的工具、框架、语言。
脚踏实地的,你绞尽脑汁去完成你的目标。
有时候你可能写写代码。
更多的时候是在处理Bug和暂时解决不了的难题。
有时候你实在烦的不行,那就休息一下。
或者别的时候你不想写代码,但是可以去看看相关的文章资料。
最后,经过几周的努力,你终于为你的构想打好了基础。这时,开发你的应用感觉上就不那么痛苦了。你从之前的努力中获得了成就感,接下来你只需要完善功能就好了,就像你之前已经做过无数次那样,这根本就不是事儿。
你把一项令人痛苦和胆怯的工作转换成了循序渐进,享受其中的工作。
这就是成长,这就是进步。不管是编程、跳舞、跑步、阅读:他们都不轻松,而且学习是没有止境。
你要享受你付出其中的过程,享受随之并来的痛苦。你慢慢会理解到那不能称得上是痛苦——而是一种个人努力的成就感和自我满足。
换句话讲,煎熬和享受都是相对的。记住这个循环:
一种学习技术的方法
下面我介绍一种我所掌握的学习方法。可这并不是什么终极秘籍,如果你有不同的意见,可以在评论区提出。
我们拿如何学习 React 来举例。
明确你学习的目的
首先:我要先搜一下有关React的文档,了解一下这个框架的背景和它想解决的问题。
明确“为什么”对于你的学习是非常有帮助和意义的,他回答了下面这些问题:
-
它的独特之处在哪里?
-
学这个对我有用么?
-
它主要是为了解决什么问题?
-
它只是昙花一现哗众取宠的小玩具,还是能够从此改变我对编程的理解?
了解核心概念
其次:我会认真读完稳定里的介绍和示例。
到目前为止我还没有上手尝试。阅读一项技术的核心概念一定要在动手实践之前。这对你之后的学习至关重要。
这也使我避免了在不知道React是个什么玩意儿的情况下就稀里糊涂地用它,搞堆Bug出来。
尝试编码
之后,当我有一种我已经了然于胸的感觉时,就是我上手实践的时候了。
我开始跟着视频教程试着用这种新框架编写一些非常简单的小东西,或者跟着文档里的教程指引写写代码。
遇到坑
我不可避免地会掉到坑里。
读文档当然小菜一碟,可是自己实践的时候就完全不知所措。
这时我开始有半途而废的念头。但遇到困难正是应该迎头而上的时刻。没有付出哪儿有回报。只有懦夫才会放弃!
接下来我开始做这些事:
-
首先我需要确定一下我到底遇到了什么Bug,之后假设几种导致它的可能性,即使我还不太了解,猜猜也罢。
-
接下来离开电脑跟前,稍微放松一下换换心情换换气。可其实心头上总是难以放下那个我没有解决了的问题。
-
接下来我根据我的假设开始调试——而不是直接去网上搜答案。要知道,全凭自己的思考获得答案是一种非常难能可贵的体验。即使你犯了很多错误,它也能加深你的印象好下次不再犯。
-
如果我的假设被验证了,那么万事大吉!反之,我就会去搜文档,博客,或者Stack Overflow或者任何其他可以辅助我的资料。
-
当我阅读这些资料的时候,我会把那些可能帮到忙的信息记录下来。
-
还是没有办法?没关系,即使我搜的这一大堆资料对解决目前的问题没有帮助,我也通过阅读学到了很多,而且它们也有可能解决我之后会遇到的问题。
-
直到这时,我才会在知乎上提个问题(译者注:原文为Stack Overflow)或者问问同学同事。
-
与此同时,我会不断地重复研究这个问题,它总有被解决的时候。
有时候这个过程可能只需要几秒,而有时候需要几个小时甚至更久。无论怎样,在这个过程中你都能学到很多东西。
在编程中解决Bug就好像在隧道里寻找射灯一样。你总会找到它,可是沿途你会发现和了解更多有关隧道的信息。在学习上,这些了解正是你的收获。
调试错误其实是一个了解和发现的过程,享受它吧。
温故而知新
在学习的过程中,我开发了一些简单的小东西,跨过了一些坎。就像你所了解的,这过程肯定纠结,我需要用这个新工具进行更多实践。
所以接下来我会在开发一些练手小项目。不是好高骛远地去搞一个大项目,而是做一些可以构建我应用的基础模块。
例如我在网上看到一个用React写的有增删改查功能的待办事项应用。那么我可以做一个另外一种形式的增删改查的,确保我能根据参考项目的逻辑写出来的,而不是可能会出错让我受挫的应用。
掌握
熟能生巧,所以我不停地构建小项目,知道我感觉我已经掌握了它的核心概念。
最后,我开始试着不看文档和示例把所有的知识梳理起来。直到这时,我才会开始完全独立地做自己的项目。
在整个学习过程中,我不断地挑战稍微难一些的任务,但也不至于难道打击的我不想干的程度。
最后,我会在这项学习让我厌恶之前,赶快转移注意。
学习使你快乐
通过一些努力和方法,学习编程可以变得非常有趣。最初它看起来很复杂,我想这也是为什么很多人不敢开始的原因——并不是因为它无聊,而是因为它困难。
通过不断地联系这种学习方法,它将会形成一种肌肉记忆。你不用太努力去想它。你只需要驾驭挫折和享受成就。
就好像变魔术一样,学习变得轻松多了。
你是如何学习掌握新知识的?欢迎留言分享!
转载请注明:学时网 » 掌握学习方法——作为开发者最重要的能力