前端开发的敏捷学习法

现蚂蚁金服高级前端工程师, 前Coding.net 前端架构师, Coding/WebIde 核心研发,infernoJS 贡献者, 前端技术geek,elm中文社区创始,RXjs 实践指南作者

文章正文

大纲

  • 选题背景

  • 敏捷学习法

  • 知识迁移

  • 信息获取与筛选

  • 新形势下的阅读方式

  • 社区化学习

  • 工具&实验田

  • 时间管理

  • 总结

选题背景

在纠结选题时候,我一直在思考分享什么知识比较好,平时在工作中确实有许许多多经验和技术积累可以分享,但是我发现这些技术在互联网上或多或少都有相应资料,自己平时遇到各种问题也是去探寻的。于是我觉得不如聊聊面向未来的学习方法,有时候具体讲一个知识点不如告诉你如何自己在资料海洋中自我敏捷学习。

每个开发者都是从小白走过来的,这条路非常坎坷。有的人花了较少时间就达到了架构师级别并且带领小团队有序开发,有的开发者则花了5、6年时间还在基础岗折腾。抛开个人努力程度看,学习方法也是至关重要的。说到学习方法,从小到大我们学习过很多知识,可真正在工作中用到的却是很小的子集,留下的是学习知识的能力。目前行业趋势迫使大家不断跟进新技术,需要较高学习能力的人。我们研发WebIde时,团队并没有所谓的ide工程师,国内同类产品就是空白,一切只能靠我们上海5、6个人各种摸索学习在短时间内做出产品。产品很出色但是过程却是痛苦的,新问题新难点不断涌现,这时除了努力更需要的是解决问题的能力。如果你能拥有这样的能力,即使你不会某个具体技术点,那并不重要,因为你可以短时间学会,并同时夯实基础。这才是面向未来的人才。

在技术瞬息万变的今天,原来那些只靠学历、人脉、经验升职已经过时了,要想保持自己的职场竞争力,练好一件本事就够了,那就是学习敏捷力。 ---美国著名企业高管教练瓦尔库。

我以前端开发为例,社区技术派别已达到了百家争鸣阶段,众多公司推出了自己的最佳实践以及相应的开源库,学校、培训班、出版社尽力的跟随。在这种情况下,很多朋友很困惑,按照传统一般的学习方法,似乎很难应对。选资料或书籍就是一个大难题,读完别人又告诉此版本已升级或者书中有很多错误,甚至工作中已经不再使用了。再者,平实工作任务很紧,没时间让你慢慢啃。还有很多知识要你同时去学。这时候很多人开始烦躁、抵触,迷茫,怀疑技术,怀疑自己。而恰恰这时候需要的是耐心,走一点,停下来,仔细思考自己的学习方法是不是需要调整一下了。 以上的思考过程,让我明白第一次 GitChat 的分享内容,以前端开发为载体和大家聊聊面向未来的社区化敏捷学习方法。必须要说明的是,这块知识量很多,本次分享只能从面上给大家介绍无法太细致。

敏捷学习法

敏捷学习方法并没有专业的文献资料做背书,我只是结合自身理解和大家分享,受限于自身水平,并不一定是对的,只望给大家有参考意义。本节从基本的理论,知识树,以及两个案例带大家。

理论

敏捷学习的核心是敏捷的通过外部刺激更新自己的知识树。所谓的外部刺激主要包括被动解决各类问题以及主动研究各类课题。解决新问题时,利用自己已积累的所有相关知识判断可能的最优解决方法并拿它排序。其后对解决方案做拆解得出一些知识关键词,逐条快速通过知识获取途径得到相关资料,迅速实验田验证,过程中需要实时更新自己的知识树,后期不断完善整理知识树,成为新的积累,便于之后新的问题突破。主动研究课题时,则通过阅读各类资料迅速整理知识点,更新知识树,重建新知识与老知识的关系链,弄清楚每一个知识之间的联系。

知识树基本概念

我们把自己的知识想象成是一颗带有关系箭头的树(思维导图)。如图:

知识树demo图

此图只是demo,每个知识结点都有自己的关联和上下文。我们可以给每个子模块添加颜色,深浅代表我们的对他的记忆程度,越实则使用越频繁,记忆也越深,越虚则越淡。甚至可能只是一个软链接在这里占位,遇到这个问题知道怎么搜索怎么查,但是不一定深刻理解。我们每天做各类项目和平时阅读交流的过程中,只要遇到新的知识,就应该先他挂到我们的知识树上,成为一颗虚树,而后继续整理,填充知识关系与知识深度使树更完善。这里所描述的知识树是一个抽象的概念,具体表现形式大家可以有自己的发挥。我一般使用思维导图,复杂的知识需要多个sheet来表达,并做好关联工作。

下面结合前端开发工作中实际的解决问题与主动学习两个案例让大家热热身。

敏捷解决问题案例

本节介绍自己曾经解决过的一个问题,告诉大家我的思考方式和学习方式。

问题分析

issue:解决一个rn项目开机经常直接闪退的问题。

直接静态观察代码,并看不出什么问题来,简单的debug也反映不出问题。假定我是一个RN初学者,但是kpi要求我迅速完成工作。

我通过其他编程经验告诉我,对闪退和性能的问题,需要对开机过程每一步启动过程做一个分析,打合适断点观测,看看哪一步闪退了,确定问题。而后则方案无非就是1.catch掉相应的error,不能让他影响整个app,2.解决相应业务的问题。

知识拆解

我把问题第一步监测大点拆解为以下三个问题。

  • RN开启到首页渲染的关键帧(关键重要的可测结点)。

  • 监测与表达。

  • 监测内容。

第一个问题:先从自己的知识树去找,假设我对RN的启动顺序,只停留在“先加载需要用的资源,然后调用js逻辑”的层面。为了解决问题,必须获取这方面知识,在知识树上建立虚树。技术术语主要就是: react native start order,react-native-debug之类。从google搜索得到了一些网页信息,从stackoverflow也得到了一些相关问题。经过整理然后我得出了解决方案,断点应该打在native启动入口,js-bridge,js入口点,js初始化操作(redux store初始化)、js view mount的起点等…同时我把刚才的几篇文章link和内容做了一个速记,补充在这颗虚树中,提醒我之后可以完善它。关于获取信息的方法与筛选在之后的章节会详细讲解。

第二个问题:基本上思路就是把断点处的各种监测数据dump到同一的dashboard中。我联想到在其他编程体验中,我也许会用自带的断点工具,或者console.log把相关信息打在控制台。当然也可能会丢给data collector server统一观测,这取决于不同的业务场景。在这个案例中,js和两个native以及中间的一些库的service并不在一个scope,很难能跨服务的跟踪,追查哪一步出了什么问题导致启动慢而容易crash。于是就用了做微服务监测的知识点,用fluentd做一个log center,它能把logger汇聚到一起展现出来。

第三个问题:回到一开始的需求

作者正在撰写中...
隐藏内容 支付可见
内容互动
写评论
加载更多
评论文章
¥15 购买
× 订阅 Java 精选频道
¥ 元/月
订阅即可免费阅读所有精选内容