一个前端菜鸟的成长记
现在才总结似乎有点晚,但聊胜于无,记录一下我的2016,毕业的第一年,对于人生意义重大的一年。
我的求职之路
打从进入了大四之后,便深深的意识到了就业的压力,并一直在做着迈向社会的准备。从2015年9月开始,便开始投简历(技术类的招聘一般都比较早),每天8点出8点归,总算没有辜负辛苦了两个月的自己,斩下一些不好不坏的offer。
11月开初,技术类的招聘已经基本结束了。不甘于闲赋在学校的我又开始了自己的实习之路。
说起来也是惭愧,在这实习期间,我竟辗转了三家公司进行实习。
4399实习
在4399实习期间,锻炼了我非常多的东西。感谢勇哥、新哥,给予我机会去做更多的尝试。
在4399中,我有幸进入到UED部门,在设计组中担任前端工程师。
在这期间,我头一回面向多项目编程,在这期间积累了非常多的实战经验,也开始有了自己书写HTML、CSS、JS的规范。同时,在此期间自己不自量力地尝试起了前端代码构建工具——gulp,以自己的理解写了一篇粗鄙的gulp介绍——Gulp Introduction。
研究完gulp之后,自己摸索着将gulp运用到实际的开发工作当中,在勇哥的指点下,开始跳出项目外去思考,尝试利用工具解放双手,向模块化迈进,写出文章——在项目中使用gulp。
在4399的这段宝贵的实习经历中,让我对大前端、“技术选型”、“构建工具”、“脚手架”有了一个更加深刻的认识,让从前仅会随便写一下简单页面的菜鸟跳出一切都已经准备好的舒适区,从无到有的学习、创作、进步。
UC实习
过完春节,在滨豪的推荐、南风姐的帮忙下,有幸进入到UC进行实习,再次开始一个全新的旅程。
在UC中,我就职于海外业务组,基于NodeJS进行爬虫的开发。
在此之前,虽对NodeJS已经有一个初步的认识,也曾从书籍上学习过。但我始终认为,在前端、乃至技术的学习中,如果没有项目驱动(无论是工作业务还是自己创造的需求),都是很难真正的学会的。
从一入职,我所做的第一件事就是学习项目组里面的编码规范,包括命名规范、代码缩进、编写风格、注释规范等,我才深深的感受到一个精良的规范对于一个团队的良好运行,是多么重要的事情。
在之后的爬虫开发当中,我越发的感受到编码规范、代码可读性、code review等对于团队的重要性。以前一直以为这些东西都是很虚的,但当团队日益庞大,业务日益繁重时,如果不能保证代码的可读性,是会严重的拖慢团队进度的。同时,严格的code review,可以防范于未然,规避很多日后意想不到的问题发生。从来没想过,自己写的代码原来挺烂的…
在爬虫开发中,越来越感觉NodeJS对于“前端”的革命是那么的巨大。它让“前端”不再局限于所谓的“切图”当中,仅仅几十行代码,一个爬虫就能写出来了,而且运行良好,足以支撑巨大的业务。同时,NodeJS的出现,也让前后端没有了编程语言上的沟通障碍,能够更好的协作。
而我,也在这次实习中接触学习并熟悉了很多必备的技能:正则表达式、Promise、命令行操作等。
现东家
在一系列的机缘巧合之下,我来到了现东家,从入职到现在工作了8个月的时间,在其中饱尝酸甜苦辣,技术得到了飞跃的进步。
感谢老大,没有他当时的拍板就没有现在的我,无尽感激~(虽然到现在我也不知道为什么当时他会看中我…)
如何入职暂且不表,但这段经历对于我来说,是一个绝对重大的人生转折点,它让我开启了一个全新的职业生涯,也让我对创业有了更深、更全的认知。
对的,我就是进入到了一家前景非常可期的创业公司!
在这里,我是最初期的团队中的一员,在老大的指引下,一步步从无到有的在前端这条路上越走越远。
咱们团队是“JavaScript 全栈开发团队”,在此打个小广告,欢迎志同道合的你。入职以来,我的title是“客户端开发工程师”,主要开发咱们的APP。对的,你猜到了,用的就是REACT NATIVE
。
在老大给我搭好了开发所需的初始框架之后,我便开始投入到工作当中。然而,我要怎么开始呢?!当时的我几度懵逼,咬咬牙便开始摸索起来。
那时候我可是一个连github.com都不怎么会用的人呀,所以只能从文档、老大给的starter-kit
入手,一步步地啃并动手学习。
从搭建开发环境开始,我便陷入了深深的蛋疼当中…怎么让windows中跑起starter-kit
,我足足研究了两天,折腾了一大堆,后来总结起来,呕出了Windows下安装React Native的安卓环境这篇文章。
说实话,搭建RN环境,挺累的…
开发环境搭好之后,就抓紧学习RN的写法了。RN用的是一套全新的XML标签,与一套全新的CSS语法,虽然看样子格式还是那种格式,但背后却有不同的学习成本。在摸索完之后,我便开始以我之前积累下来的移动端网页开发经验,开始摸索着开发移动端的页面了。对着设计稿,摸索这RN中使用了REM、百分比、flex,以打造一个可以多屏幕适配的页面。
还记得当时开发第一个页面的时候,打一行代码需要重写三遍,一个页面基本做完,又推倒重做,用2天时间,终于弄出了一个与设计稿大体相似的页面。看到成果时,感觉没白熬。
之后当然就是接二连三的爬坑啦。总之,在这段日子里,我摸出了:
github插件选择(star,issue),找RN的插件的话,js.coach/react-native/是个不错的选择
npm版本控制很重要
技术选型
代码组织的艺术
项目架构的前瞻性、拓展能力
深挖业务需求,凡事多想想,避免对代码打上“日后必定重写”的tag
APP开发到了一定程度,就碰到了JS所不能解决的瓶颈——原生SDK的接入。因为当时的业务需求,已经到了第三方插件无法满足需求的时候了。为了实现功能,必须进入到android和ios中去写RN可以用的插件。当时看到客户端原生代码(java, Objective-C)的时候真的是一脸懵逼,尤其是Objective-C,全新的写法让我迫不得已思考了一天的人生。
没办法,只得抄着现有的第三方插件库,半抄半写。途中已然忘记在多少个QQ群中问人,也记不起找过多少个朋友,多少个群友去问问题了,只记得同事们都对我说:“骏马面前无沟壑”…
终于,我对RN的熟悉度越来越高,开发起来也没那么吃力了。当然爬坑是少不了的,但已然没有那么痛苦。趁着在业务不是那么多的时候,我赶紧买了几本android、ios的入门书籍啃起来。感觉回到了刚开始学前端的时候,啃“JavaScript高级程序设计”那段日子…
在项目开发到一定体量的时候,之前写得很烂的代码、不太合适项目的架构,已经严重的拖了后腿了,让项目开发变得难以高效迅速。在深思熟虑过后,我决定来一次项目代码重构。
这次重构,的确预备了很久了。我把平时写业务代码时碰到的一些不爽的点都收集起来,然后每天下班回家就在想要如何做才能够更好的在满足业务需求的前提下,高效迅速的开发。这一次代码重构主要针对下面几点:
将非常通用的组件(入Toaster, Confirm, Picker等),从以xml的格式应用,转变为函数调用。例如我之前需要在页面中引入错误提示Toaster这个组件,是要在render中加上
<Toaster />
这个标签的。而现在,只需要在需要的时候,协商Toaster.error(new Error('错误提示'));
,即可完成调用。这个一定程度上避免了react + redux
下if-else
嵌套过多的问题;重整项目中
store
冗余,不够精细的问题。目前以页面为维度,来进行store
的组织,同时补充一些全局通用的store
。重整页面代码的组织结构,将其调整为一个较为通用、规范的组织结构。
革自己的老命,可不是开玩笑的…
其他达成
阅读:
已读但不限于:
<疯狂Android讲义>
<Javascript语言精粹>
<Javascript函数式编程>
<Javascript设计模式>
<你不知道的javascript(上卷)>
<深入浅出NodeJS>
<CSS权威指南>
三场技术分享:
<第二届FEDay前端年会>
<腾讯IMWeb>
<第三届CSS大会>
在此特别感谢裕波
大大与前端圈
可爱的工作人员们,为我们广州人民带来了这两场盛大的高质量前端技术分享会议。
多参加技术会议,能极大的开拓自己的技术视野哦!
2017年展望
在技术上,不懂的还是太多了。2017年,希望自己能够再接再厉,向当一名优秀的前端工程师
这个梦想继续努力。
多读(15本书),多写,多总结(15篇分享)。
同时,希望自己能够多多接触除技术以外的事物,努力拓展、拓宽自己的视野,交际!