我的三年前端之路
弹指一挥间,毕业已经三年了,昔日的小鲜肉变成上了年纪的小伙子,真是有些猝不及防。站在时间的分岔口,思绪万千。从事了三年的前端工程师,这一路是如何走来的呢,在此做个总结,也给初入前端的新手一点参考。
在国企晃了一年
在大学期间,我的技术并不算突出,资质平平。以至于参加百度、360的校招都被刷了。所以毕业后就进入了北大方正这样的大型国企。希望能从大企业中习得一套软件开发之法。
这期间我完成了从学生到软件工程师的转变,知道了标准的软件开发流程是怎么回事。简单说就是“步入社会”了。
我的岗位是前端工程师。在2013年,seajs已经小有名气了,但是我们并没有用,整体开发模式还是原始的刀耕火种。一个jQuery作为基础库,整站的js都用<script>标签来引入。当时的后端是PHP,也没有前后端分离啥的,代码的目录结构就按照PHP框架的来组织,模板当然是后端模板。
至于代码的压缩合并,那时候也还没有grunt/gulp,我记得是用了一个客户端小工具来压缩过代码。
页面也都是我切的,这个值得说一说,因为当时我们的项目要同时支持PC访问和平板电脑访问。所以就用了当时比较流行的响应式设计,即不同设备使用同一套页面。那个时候就和Android/iOS的webview开始打交道了。踩的坑真是不少。
为了学习流式布局,我每晚都抱着张鑫旭的博客看,他css方面的文章很多,我基本都看了不止一遍。根据学到的东西,用百分比单位+inline-block流式布局+媒体查询,我们的项目在我一个新手的尝试下,成功的兼容了各种设备。那个时间是成长最快的,也是很充实的。
但是过了新鲜期,我很快就感受到了与国企的“水土不服”,国企的工作节奏是拖沓的,而我是血气方刚的,真是水火不容。有段时间我一直为项目的事情着急上火,但是其他人却不为所动,任凭项目一再延期。要知道在互联网公司,延期是很严重的事情,而在国企,简直是家常便饭。
另外一方面让我不爽的就是,我没有可交流的对象。部门只有我一个人做前端,作为前端新人的我此时是很渴望汲取知识的,经常跑去参加w3ctech组织的分享会。然而在公司内却没有一个可以交流技术的人。我甚至不知道别人家公司的前端都是如何工作的,我到底算不算一个真正的前端。
叫你一声前端你敢答应吗?我不敢。所以在不满一年的时候,我就离职了。
在大型互联网公司的一年
离职后我的目标很明确,就是互联网公司,工作强度越高越好。于是就加入了当时正处于虎狼之年的360.
之后我的工作是很充实的,看到了更大的世界,知道了大型互联网公司的前端都是怎么搞的。一开始有成银大神带着,后来又跟@墨尘频繁接触交流,成长很快。尤其是奇舞团的每周分享,我基本每期不落,吸收到了很多知识。这个时候,我才敢说自己是一名前端工程师了。
公司有很多大牛,也有很多现成的工具可以用。而我当时只是业务线上的一名小小前端,没有机会能够和大牛们一起造轮子。从技术框架上看,我当时开始接触了angular,requirejs和seajs也有所研究,当时由于微信H5游戏开始火爆了一阵,还接触了一下开发H5小游戏,学了学cocos2d-js,不过后来H5游戏的风似乎是刮过了,我也就没再深入cocos2d。
当时也有些需求是要做手机上的页面的,所以移动端的项目也做了一些,当时也没有现在比较成熟的rem方案什么的,切图需要有些额外的技巧,比如字号大小就是约摸着写,看上去差不多就行。
mvvm开发模式以及模块化开发,是前端发展历程中比较重要的两个里程碑,有幸自己没有落下这两个关键节点。
在我敢承认自己是一名真正的前端工程师之后,又开始有了别的想法,总在大公司做一个零件有点没劲。此时我迫切想干的事情就是,靠自己的力量去架构起一个项目的前端。所以除了各个流行框架,我还研究了一些前端工程化方面的东西,grunt尝试了一把。
感觉准备的差不多之后,我又开始蠢蠢欲动了。
在创业公司的一年
出于一些很现实的原因,我加入了现在的公司,一家比较成熟的创业公司。两方面原因:1.开得起工资,2.前景不错。毕竟,北漂了两年了,我也该为自己在北京落脚做一些准备了。
加入现在的公司后,我的定位不再是大型机器的一个零件,我需要对公司的前端担负更多的责任,因为我已经是一个老鸟了。于是我的思考方式也必须发生变化,以前不求甚解的知识现在也必须搞明白,并且更多的从项目整体上来考虑问题。
我开始承担面试工作,开始带新人。时刻思考着如何能利用多余的时间来做点事情,给公司的前端工作带来实际收益。
在技术方面,自由度也比较大了,可以尝试一些新的东西。首先是mvvm的大规模使用,如果以前使用angular只是蜻蜓点水的话,那么现在是在千万级pv的大站点施工了。由于我们的网站还需支持IE6(主要用户是老师学生,没办法~),所以采用了能够支持IE6的knockout。外加requirejs以及knockout的amd-helper插件,也搭建起一套模块化开发框架。
在移动端项目上,其他同事已经开始使用vuejs,使用webpack打包。尴尬的是,我对这两者兴趣极大,但是一直没能参与到移动端项目中去。
去年开始在公司推广sass,因为之前还一直是手敲css的。另外构建流也用上了gulp,来做一些项目上线的构建工作。
由于ES6也日渐成熟,而且我们有些项目也是不兼容低浏览器的。所以前段时间开始在项目中使用ES6,配置babel来编译,虽然现在使着还不是很熟练,但也总得跟上潮流不是。另外,我们项目中jQuery代码已经几乎没有了。
关于nodejs,自己业余也在学习,今年年初用express框架写了一个团队内部用的小项目。话说nodejs这个玩意吧,虽然我觉得前端都得会点,但是如果没有项目驱动,要写nodejs的机会还是很少的。
现在比较流行的东西,没用上的一个就是react了,因为现在还没有合适的场景,而且目前的框架也能满足业务需要。可能得以后有功夫了再尝试了。只是不要等我用的时候就发现过时了就行。
这就是创业公司的诱人之处,可以尽情尝试各种新技术。总之现在的状态我还是挺享受的,手中忙碌,心中平静,脑中计划未来。
关于前端学习
发现这么多年自己折腾的还是挺多的,自己还在成长的道路上慢慢前行,学习的脚步一刻不能停。
如果要我给新手同学们写点建议的话,我还是很乐意的。首先前端的知识体系多而杂,所以点滴积累是必要的。在我是新手的时候,有一个习惯帮了我很多,那就是写博客。毕业三年,在博客园开博也三年了,写博客对你的学习有很大的驱动力,而且要想准确得表达出你的理解,你必须对某个知识点了然于胸,这反过来能增加你的学习深度。
另外就是知识路线,得有一个规划,大体上来讲,这条主路径不要偏移:原生js、使用jQuery及编写jQuery扩展、前端模板、前端mvc(backbone)、模块化开发(amd/cmd)、mvvm开发模式、react为代表的redux模式。
另外css也是前端的一项基本功,有一些从后端转到前端的同学不想写css,我觉得这样不行,理解css有助于你去理解前端整体。所以关于css的学习,大体有这些就够:运用css完成页面、css基本原理(看w3c标准文档)、sass/less等预编译、架构可维护易扩展的整站css。至于css界新出的一些东西,比如OOcss、css module,我也还未研究,这些感觉是锦上添花的,可以先放一放。
nodejs的话,倒也不是最迫切需要学的,我看一些新手同学,js/css还未熟练,就扑到nodejs上,这就有点舍本逐末了。如果有余力,在学好前端的基础上再去碰nodejs。
PS.除了写博客外,我还在写自己的微信公众号,内容是技术之外的一些思考,有兴趣的同学可以关注哦: