https://unsplash.com/collections/631209/home-improvement-store?photo=znw9Xs5I9ro

整理了一条圈子里头一位朋友的提问,这个问题比较普遍,我好好思考了下。问题如下:

我在前端方面有几年经验,切图仔->jQuery前端->Angular2+Webpack前端,可开发传统网页/SPA;略懂后端(API, CRUD)和服务器(简易脚本);可独立完成中小型WEB项目并有成果; 但也就这样了,以下是我的问题:
 1、由于一直凭兴趣自学,在理论储备上非常不足;但理论和实践在到达一定层次前有巨大鸿沟,如何能有效通过学习理论提高实践能力?像我这种需要重视哪方面的学习?
 2、我是典型 Google & StackOverflow Oriented Developer,不会就查,但总觉得这样不系统,请问一般是如何解决问题的?

1、已经是个熟练工,如何在能力上再次拔高?

在公司里,只要是踏踏实实做事情的,三两年的时间一定会有很明显的成长,不管是技术能力还是沟通能力。但也正是三两年后,会明确感觉到再一次遇到技术的瓶颈,这个问题不管是谁,都有,我也经常遇到上升的瓶颈,其实在这个圈子里,每个提问的同学都在促进我在思考,所以也比较感谢大家。

对碎片知识的学习是一个沉淀的过程,东一脚、西一脚,看似学的很杂很肤浅,但时间长了之后,每个领域都会涉及很多次,面广了,综合素质自然也就提升上去了。能力上再次拔高,我觉得需要做两件事情:

梳理知识,找到自己擅长的领域。前端技术越来越丰富,越深入的技术就越要花时间进去研究,我们不能 cover 到所有的面,但是可以抓住一个自己感兴趣或者擅长的方向,支出大把时间,深入研究。比如 Native、运维、Node、性能、WebVR 等等领域。
在系统的架构设计上,进一步学习。这一块我个人的经验也不是特别丰富,但是这一块的学习还是一直坚持着,最基本的算法模型、数据结构、数据库知识、设计模式、性能调优、多人协作等等,我相信坚持一段时间的学习,再配上工作中项目的实践,一定会有效果出来。
最主要的还是需要用抽象的眼光去看待新技术,从宏观上把握一门技术到底解决了哪些问题,是如何解决的问题,把思路掌握清楚。抽象思维不是与生俱来,也需要不断的训练,时间长了之后,看待问题的角度会不太一样。

2、如何整理零碎的知识?

知识的整理永远都不要停留在键盘上或者笔杆上,需要对知识做一些区分。有几乎一直不变化的知识,比如 JS Core API、ECMA-262、HTTP/2 等等,这些属于标准,标准化的知识,需要有了解,部分可以当作工具书,部分则需要全部记住。还有一些在变化的知识,比如 MVC 演变出来的 MVVM、MVP 等,技术框架如 React、Angular、Vue 等,这些都属于变化的知识,他们有自己适用的场景,场景一变,这些东西都不适用了。

在学习这些变化的知识时,也有不变的东西存在,比如学习源码的技巧、调试 bug 的技巧等,这些是什么呢?是能力。知识是学不尽的,但是能力可以不断地提升,随着经验的丰富,能力也会跟着一起上去。如果给你一堆技术关键词,你可以很快很好地将这些词放入大脑的对应的知识储存区间中,那说明你已经对整个技术体系有了比较全面的理解,这个时候你需要提升的是能力,编程能力、理解能力、组织能力还有架构能力。

以上,仅供参考。