如何循序渐进得进步

刻意练习

大家看一下《刻意练习》这本书,这里我结合一下我学习前端的经验来谈谈如何把刻意练习用在学习前端上面。 刻意练习具体流程是这样的:

  1. 明确目标
  2. 注意集中力
  3. 反馈
  4. 跳出舒适区
  5. 循环反复 从本质上来说,所谓的刻意练习就是迭代。他让你每次都有一点点进步,当时间累积久了就会从量变变成质变,就像滚雪球,一开始滚得很慢,但是时间久了之后雪球越滚越快,越滚越大,最后无人阻挡。

明确目标

这是第一步,也是最重要最难的一步。为何如此难,因为工作不像读书时代,有个明确的分数。读书的时候每次考试都有明确的分数,每题都有得分和扣分,比如这次满分考了80分,那么下次目标就是90分,而现实工作没人给你打分,甚至可能连反馈都没有。所以要想有可量化的目标就要引入心理表征这概念。

心理表征听上去很高大上,但是其实他人人都在用。以一个最简单的例子,比如说打游戏。当大家看职业选手打比赛的时候,都会不由自主开始评判,如我觉得他很叼,他补刀和意识很强,我觉得他很菜,一点打野抓人的意识都没有。这些就是心理表征,也就是我们对这事物的评判标准和个人见解。只有心理表征明确了,才能知道自己打游戏水平在哪个段位,和自己哪里不足需要练习。才能有下面的刻意练习。

对于学习前端如何有自己心理表征来评判自己,由于本人身边没有导师也没人指点,身边也没有参考物,所有经历差不多大半年才形成自己对于前端的模糊评判标准。正因为有明确的评判标准,这后半年进步速度连过去的我都没法想象。

首先一定要有对js基本知识自己到哪种水平的清楚定位。如何做到,可以试试看书和写博客。我之前看高程3的时候看了好几遍,感觉自己懂了,但是其实当我去看你不懂js和忍者秘籍的时候才发现自己对于闭包和原型链还停留在表面认识,通过看不同书籍,然后自己的观点和作者的观点做对比,就有个大概的定位。然后在自己写一下知识库的时候,发现还是有很多细节没有充分认识到,如AO等。这些只有自己写出来的时候才知道,看书是根本没意识到。当你意识自己不足的时候,就说明你的心理表征又进行迭代了,你就会查阅更多资料,了解更多更深入。当你对这事物有更深的了解,就可以意识到自己那里不足了,当你意识到自己不足的时候才能进步。

关于博客

一开始我是不想写博客的,因为一个是太费时间,另外一个是我觉得别人都写过的东西,比我写得好为何我还要写。虽然即使我不写博客,但是有建立自己的知识库的习惯,就把书上的和网上的好文章复制粘贴到自己有道云笔记,然后加点自己的观点,再把思路理顺一下。后来慢慢发现这种方法一个不利于我建立心理表征,很多东西看是一回事,自己写又是另外一回事,也缺乏反馈不知道自己写的是否正确,还有就是既然自己都花费这么多时间弄,不如分享出去,让大家看到后能一起交流。所以趁元旦放假的时候自己用vuepress搭建了简单的知识库。 lien的知识库并希望19年坚持写下去。

对于代码的如何建立心理表征,也就是说如何可以评判代码好坏是否优雅。这个真的很需要时间积累,不过可以从以下入手。

  1. 看别人开源项目代码,网上GitHub有很多。
  2. 学习像undersercore小而美的源码或者他人对这源码的解读undersercore-源码分析-吴晓军
  3. 有一定经验可以看看《重构JavaScript》,这书我现在还在看,看得还是有点吃力。不过最重要可以学到如何评判代码好坏的行业主流观点。
  4. 学会造轮子,造轮子的时候就能知道自己实现方式和思考方式与他人差距。
  5. 接受领导的反馈~~(我没有。。。)~~

只有当你有个清晰的心理表征,才能知道自己我在哪里,我要去哪里和如何到达。大多数人把工作任务交付完成就完事,虽然他们很想进步,但是由于缺乏明确的心理表征不知自己去哪里,就像没有眼睛的苍蝇四处飞,最终原地踏步。而现实表现就是瞎学,什么新东西就学什么,对于基础知识没有沉淀,所有一直没啥进步,最终学不动。

注意集中力

人的注意力是有限的,所有不可能一天都能集中注意力,但是可以进行调整而达到最优。

  1. 学会主动休息

很多人工作都是从早上工作到中午,然后睡个中午觉,再从中午工作到晚上,这当然很累。就像手机电池一样,一用就用到20%,然后充电充电到60%又继续用,这样长期下来身体都不是处于精力充沛,效率就会低,经常写BUG,写了BUG又要DEBUG,浪费很多时间,晚上又要加班,加班就睡不够,恶性循环。所有可以试试像番茄工作法,每50分钟休息10分钟。当然休息刷朋友圈刷抖音不是很好,这不算休息。正确休息方法是发呆,走走,假装去厕所,然后走去楼上再走去楼下,这对精神和身体都很好。

  1. 在最集中精神的时候做最重要的事情

这里最重要事情不是最紧急的事情,对于我而已最重要的事情是学习。所有一般我会早上6点半起来,避开高峰和堵车。8点到公司,然后一直学习到10点。这段时间注意力最集中,而且没人打扰你,因为他们都没到公司(手动狗头)。周末都会去华工图书馆和朋友学习整个周末。一直坚持1年,缺点是真的好鬼累啊。当然可以因人而异。其实这种有点像投资的理念,把大量资源投资在最能获得收益的事情上面。而我就是把自己最好精力和时间投资在学习上面。

  1. 良好的生活习惯

最重要的是早睡和锻炼身体。早睡是很重要,但是很多人做不到包括我自己。大学时候基本都9点下课,然后晚上10点打开AE和C4D开始做视频,一做就到3点,在网易就更过分,有时候由于项目等原因,1点下班或者直接睡公司是很普通的事情。周末基本从早搞活动到晚上,一年基本无休。身体状态不是很好,而且以前有个做后期的好朋友猝死了,有几次感觉肝部好痛,快死了,吓得我现在天天10点半就滚床了,即使活没干完早上早点起来继续干。

然后锻炼身体,这个也很难,没啥太多时间去健身房。只能每天下班从坐公交去地铁站,变成骑40分钟自行车到地铁站。周末去珠江边跑步,大概6-8km,在家做做keep。身体好了,人也精神了,效率更高了活就更快搞完,就有更多时间学习和研究轮子。然后因为研究轮子多了,有自己使用的库,又导致效率又更高了。这是正反馈过程。

  1. 打造自己的工作流

人的精力是有限,把精力放在最重要的部分。但是如何做,可是试试用GTD工作法,这里就不详细展开有兴趣可以搜索一下。他的核心就是任务清单。把今天或者将来要做的事情全部写到清单上面,然后进行分类。从时间上分今天要做,明天要做,将来要做,可能不做。从工作四象限分为,紧急重要,不紧急重要,紧急不重要,不紧急不重要。然后按照优先度排序,去掉不做的。然后按照优先度逐个完成,完成后就打钩。一天过去没完成不要有愧疚,可以变成明天再做,最重要是早睡。这里只是泛泛而谈,以后有机会再写一篇GTD和瀑布流思想结合,打造自己的工作流。

  1. 强烈的欲望 这个没法教,看个人经历。本人经历过从在网易指导新人(实习和正职都有),能独挡一面,自己承担整个小型项目(直播比赛活动),一条龙服务,自己作品如16年直播丁磊阴阳师抽卡项目中,栏目包装中不仅还原游戏场景,把整套素材加入自己理解和细节重做一遍,得到专业美术人员的认可。到考研失败到处被别人嫌弃嘲讽,连3k的工作都不要我,身边的人嫌弃的我的巨大反差。而这种难受的感觉一直折磨着我,无论是我清醒时候还是在梦里。其实这些可以看得开,但是我故意不解开心结。因为对于我而已这些都是能承受得住,而且这种强烈的欲望让我保持着极其可怕的上进心。抵制一切诱惑,王者荣耀,周末咸鱼等等。其实挺害怕解开心结后就失去抵制诱惑的力量。本人及其容易沉迷于各种东西。玩文明5经常从早上玩到第二天早上并毫无知觉。包括现在写代码,写着写着就到下班时间都不知道。。。。

总之这欲望是你决绝诱惑和坚持下去的动力。这玩意没法教的,只有自己经历过。

反馈

每次完成后最好有一个反馈来评判自己做的是否好。如果身边有很好的导师教练,那么恭喜你,你是非常幸运的人,可以不用像我我这么苦逼。但是大多数人没有,如何办。

  1. 坚持写日报,周报和月报。

日报:

日报这个每天都要写,由于有目标清单,写起比较轻松。主要是记录今天做的时候,不用很多很详细,大概记录一下,主要是为了写周报。

周报:

这个就要不是一周结束时候才写,而是上一周就要开始写。主要是定下这周的目标,并将目标分解成一系类可量化的目标,将目标分配到每一天。然后周末时候统计每天完成的进度,写写这周新的,为何没有完成(如加班,突发事情,自己任务工作量估计错误)。并写下周要完成的任务。

月报: 月报和周报思路一样,不过他不太需要很详细,需要大概的目标。比如把深入浅出node看完,学习webpack等比较大的方向。而且大多数时候月报定下的目标会根据每周来调整。如我在9月就定下一个目标看vue的源码,但是那时候我基础不行,没有自己造轮子的经验,也没有阅读源码的习惯,更加不知道vue响应式的核心原理。所有坚持一周后,觉得这路不可行需要战略调整,就把目标改了。到现在1月份,有比较多的组件开发经验,看了挺多别人对vue源码的解读,也自己看了undersercore和zepto的源码,并尝试自己直接看源码,能看到点思路,才重新定下1月目标,把vue实例过程源码好好分析的目标。

上边例子告诉大家什么

  1. 目标需要结合自己情况进行调整。

  2. 要有明确的心理表征,知道自己功力到哪种程度可以进行哪种挑战。

  3. 正因为有清晰的心理表征,能对自己进行评判,及时给予自己反馈并进行调整。

  4. 分享与交流 分享也很多办法,如写博客,写文章。把自己的见解分享出去,然后评论就可以收到大量的反馈。还有就是偶尔水群,当然水群也是有技巧。根据以前做后期水群水到认识一堆后期大佬,后来能进网易工作也是因为水群时候认识到网易的大佬。总结出一套简单的技巧。

  5. 最简单看群的人员。如果300-400人的话,那就算,浪费时间。最好选100-200+左右的群

  6. 加入一些质量比较好技术氛围好点的群。如有些博主功力挺好,写出很棒的文章,你也很欣赏他。这时候看到有他交流群,不要犹豫感觉加入。因为这些群不仅群主厉害,而且群主会维护群的风气,有比较好的技术分享环境,而不只是吹水。

  7. 进群时候最好有一定的基础,这个基础没有明确的标准。但是可以参考以下。1.已经脱离小白阶段,能解用百度解决简单问题。群友都很忙,没时间也没义务回答简单问题,所有在打基础时候少水群,或者看看大牛们在谈论什么,自己了解一下。2.乐于分享和解答群友的问题,分享一些心得。3.保持端正的态度,不做键盘侠。

  8. 当你坚持做第3点时候,会慢慢开始树立你的小小个人形象,这时候有些人觉得你这个不错,就会拉你进更加核心的交流群。没错,我就是这样被拉进B站动画区小编粉丝群(其实就是一堆工作人员和大牛愉快吹水群)。这时候群里都是行业水平都挺高的群。里面技术氛围更加浓重,能学到的知识更多。这时候能交一下朋友,一起分享一起进步。

跳出舒适区

所谓舒适区就是自己做起来不费劲,没啥挑战性的。如一开始你写业务逻辑觉得很难,但是写多发现套路了,后来就基本就是复制粘贴。这就是舒适区。一直呆在舒适区虽然平时挺爽,但是也会停止进步,每天各种api的复制粘贴,把工作做完就完事,这样哪怕做得更多也只会原地踏步。如何跳出舒适区,就是做更有挑战,但是自己能做到的事情。

如写业务逻辑,你可以尝试把代码写得更“优雅”,简洁易读,性能更好。然后开始总结,把经常用到的方法如去重,数组扁平,深度拷贝等这些函数自己模仿实现一遍,并形成自己的工具函数库。

然后开始尝试模仿别人的轮子,对于造轮子。要先知道自己造轮子的目标。而这目标是分阶段的。一开始是为学习和更好使用别人轮子而造轮子。这时候你工作虽然还是使用别人的轮子,来确保准时交付工作,但是开始研究轮子的核心原理。当你了解原理之后,虽然实现细节还是不清楚,但是用别人轮子时候更加顺手,出bug的时候能更快定位问题所在。当一段时间后,可以开始关注实现细节。可以对把好几个同样功能的轮子做对比,然后自己研究出自己实现的方法。这时候你可以自己的轮子慢慢应用在工程(非生产环境),自己开一个分支版本,把里面的工作的简单的轮子换成自己的,然后在单独内部的开发环境测试。最后是反复琢磨,不断修改,开始用在真正的生产环境。就一个简单的button组件,我都重写了4次。最后是否放在生产环境由部门大佬决定,表面上可能弄了很多时间和精力,最后没有用是很浪费时间。毕竟周末都用在造轮子。但是你收获的更多东西,不仅知识和经验,还有一些抽象的套路和属于自己东西。

这段时间自己尝试参考之前说的组件库,写了一些组件,开始了解以前很多没有想过的东西。如写popup的时候,遮罩和弹窗之间如何管理,这就需要一个遮罩管理器。而这遮罩管理器需要管理弹窗的实例和挂载。涉及到extend和$mount等api。为了能更好了解,就需要对vue实例发生什么,vue是如何实例挂载到el上面等等细节有更深入了解,需要看一下源码的实现思路。我也不管想象一个简单popup,居然涉及这么多的东西。看mint和vant时候,虽然他们都是用了遮罩管理器,核心思想不变,但是实现细节差别挺大的。而且代码量也挺多的,涉及到东西挺多,在跳出弹框时候如果用户按下返回按钮导致路由变化时候,遮罩和弹框是如何处理等等。而不是像我想象中简单写过遮罩,然后弄个队列将弹窗的实例通过$mount挂载在到dom上面就完事。

GTD

习惯的力量