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