学习经历及经验
个人经历
回想我大一的时候,读的是机电工程,后来在大一下的时候转到了学校的计算机专业,从此开始了科班生的生涯。接触前端也大概是在大一下学期,在一个叫万门大学的地方偶然发现了一套 JS 的视频,看着感觉不错,想深入这个领域,但后来发现越往后面学越需要一些计算机科班的专业基础,于是我当时果断转到了计算机。因此这一步选择算得上偶然,也是一个必然。
大二上学校的课程压力比较大,不温不火地学了一个学期,中途有过做全栈的想法,报了个 Python Web 培训班,但是学的不好,后来直接放弃了,决定还是回过头来好好把前端搞扎实吧,重新学了一遍 JS,然后看了看 JQuery,研究了里面选择器实现的源码,然后去学 Vue,当然也跟着网上的教程做了一些项目,比如慕课网上黄轶老师的饿了么项目和炸鸡音乐Web App,还有 Dell Lee 的 Vue去哪儿网实战,一步步做完感觉对自己实战能力的提升还是很大的,起码能自己独立倒腾一个项目出来了。
大二下学期我开始接下了人生当中第一个外包项目,也参加了计算机设计大赛,赚来了三千多的第一桶金,也拿到了中南赛区二等奖的证书。这一切在外人看来其实是相当不错的经历了,但对我而言,我一直能够感受到一种强烈的危机,由于项目一直在赶时间,很多时候秉着能出来效果
就行的心态来做,很多细节并没有我想象中做的那么完美,而且框架里面偶尔会出一些问题,但是我并没有时间去理解其中的原理。我觉得这并不是我要追求的东西。这种心态,说的好听点叫追求极致,难听点,就是强迫症。
在这种心态的驱使下,完成了外包和比赛后,我马上了投入了更深一步的学习。《JavaScript高级程序设计》好好再翻一遍,ES6 重新好好学一遍,看了一遍珠峰
周啸天的 JavaScript 视频,在 CSDN 上做了相关的笔记(我觉得不算博客),以及在慕课网上学习了webpack的课程,React的入门视频,一路狂奔,学了很多。
也正是大二下学期期末的时候,我开始了在掘金发表第一篇文章,标志着写博客的经历正式开始。让我惊喜的是,发表出来的第一篇博客就被掘金社区的公众号转载了,我喜出望外,感觉特别惊喜,于是准备继续写下去,不断规划和输出新的内容。
很快,大二下结束后,暑假就到来了。在这个时间有些小伙伴已经出去找实习了,但我深知自己离 offer 还有一些差距,于是又感受到了一丝危机。我曾经问过自己: 如果我要去找实习,会遇到哪些问题?
- 首先,项目自己觉得深度不够,拿不出手。
- 其次,计算机基础并不扎实,数据结构和算法掌握的并不好,计算机网络也没基础。
- 最后,前端技术的一些原理知之甚少,更别说框架源码了。
因此,在大三前的暑假开始,我开始给我的未来实习布道。首当其冲的就是自己去做一个让自己满意的项目,这个项目必须足够的精致,同时不是为了应付任何人。这个项目采用 React 来做的,当时是统一用的 class 组件,后来想试用一下 hooks 特性,发现真香,直接用 hooks 重构了。这个项目也就是我那本掘金小册项目的前身。当我把代码放到 Github 上的时候,没几天的时间就收获了上百了个 star,让我感到特别意外,而不久之后就有同学在 issue 区留言,觉得是一个不错的练习项目,能不能弄个教程出来。接下来我尝试着这个项目更大的价值,事实上我也做到了,写成了小册放到社区,反响还不错。关于项目具体细节,详情请点这里查看。
关于计算机基础,我在大三上学期花了不少的精力学习数据结构和算法,首先学完了慕课网 bobo 老师的数据结构从入门到进阶、算法与数据结构综合提升以及玩转算法面试这三门课程,夯实了所有的基础之后,开始铺天盖地地刷 leetcode,一学期刷了 100 多道算法题。对于计算机网络,当时确实没有时间学了,就把这部分的计划放在了寒假。
最后是前端技术的深入学习,分为 3 个方向精进,JS 基础、浏览器和框架。
一方面是JS的学习,对我而言,JS 明明学了很多遍了,但是实际上忘的也很快的,我打算重读一遍红宝书,然后重新建立完整的 JS 知识体系。紧接着我开始了《JS灵魂之问》系列博客的创作,尝试着去系统地整理 JS 的知识点,又必须要达到一定的深度,当时对我来说其实是一个相当大的挑战。在这个整理的过程当中,我也逼着自己去参考了大量的资料和博客,说实话学到了不少,更让我意外的是,这个系列让我从此在掘金大火,帮助了许许多多在 JS 进阶路上的前端。
在浏览器这块,其实很多运行原理之前也是一知半解,直到一个偶然的机会,发现了极客时间上一个口碑不错的专栏,专门讲浏览器的,耐下心来读完之后,感觉收获还是挺大的,推荐大家去好好看看,解开了之前很多关于浏览器原理的疑惑。
然后是前端框架,我后面逼自己去读完了 Vue 源码,原因很简单,为了面试,但没想到的是,我目前遇到的面试对我源码方面问的并不深,只是非常常规的一些原理性的问题,但无疑的是,通读源码这个指标对面试的评估来讲是相当加分的,并且能够让自己站在一个更高的高度去应对面试,遇到相关的面试问题会非常从容。更重要的是,阅读完源码,对我个人对于 JS 的理解和 SDK 设计以及设计模式的理解更加深入了一步,这是我当时没有想到的,也是很长一段时间让我受益的财富。可能有人会问你是怎么就做到的,关于源码的阅读方法,话题有点大,后面再介绍吧。
大三上就准备了这么一些东西,顺带着整理了自己的博客,期末的时候已经上架小册、粉丝过万了。
紧接着到了寒假,我把数据结构和算法重新复习了一遍,TCP 和 HTTP 好好系统学了一遍,同时看了一些 chromium 的源码,复习了一波 Vue 源码,感觉火候差不多了就开始投递简历了,于是投了阿里和字节跳动,便有上面的面经了。
亲身经验分享
目前的经历分享就这些,可能会有些记流水账的感觉,但正是这样我觉得才足够真实,因为对前端而言,不可能照着一个系统的学习路径按部就班,然后达到一个很高的水平,这种美化过的经历说出来连我自己都不信,谁的人生不是这么误打误撞过来的呢?那你可能就会问了,你凭什么能够把基础学的那么扎实,通过这些大厂的面试呢?
我觉得有两点,一点是外在
的因素,一点是内在
的因素。
对外在的方面,我在输入一些信息的同时,会加入自己的思考和推敲,然后用自己的方式来输出,整理成博客,这使得我能够对知识体系本身有更加深刻的理解,同时也能在忘记这部分知识点之后,重新回顾的时候能够很快捡起来,节省了非常多复习的时间。
对内在的方面,我觉得自驱力是一个比较重要的因素,即自己驱动自己学习的能力。其实说起来容易,做起来是非常难的,因为外界的诱惑实在是太多,而且学习本身就是脱离舒适区的活动,是一种反人性的活动,本身就是让人不舒服的,因此很多人不愿意主动学习,这是完全可以理解的。那我为什么会有这种强烈的自驱力呢?
因为危机感,危机感随之带来了恐惧。
为什么这么说?
以前听《得到》APP上的梁宁老师讲过,人性其实只有两大痛点: 一个是愉悦
,一个是恐惧
。 愉悦感可以让人沉浸在一件事情当中干一万小时,成为高手,而恐惧带来的动力更加显著。对产品来说,要么就让用户爆爽
,要么就去帮助他抵御恐惧
,否则就不是一个优秀的产品。那么对于个人的成长而言,你做一件事情,没有找到任何愉悦
的感觉,也没有产生过任何恐惧
,那么他基本上在这个领域一事无成。
换句话说,如果一件事情让你非常疯狂地去做,要么这件事让你爆爽,要么它帮助你抵御恐惧。
对我来讲,真正驱动我的是后者。危机意识让我挖掘出真正的痛点,发现自己的恐惧所在,从而带来强大的自驱力。如果说仅仅是学一些东西来炫耀一番,或者只是去迎合外界的期望,这种动力可以有,但仅仅只是暂时的。当你走出舒适区,面对外界无数诱惑的时候,真正能 carry 你继续学习的是你内心的痛点。
我觉得明白这一点,比所谓的学习路径、学习方法重要得多。因为大多数时候我们不是缺少学习资料,或者没有掌握什么高效的学习方法,只是因为你动力不足
、容易懈怠
罢了。每个人情况都各不相同,但我觉得想要成长,挖掘
自己真正的痛点是最重要的一件事情。