2017真是充实的一年

第一个年度总结

此时是2018年1月23日凌晨1点,久久不能入眠,感叹时间的飞逝,看了很多大佬的年终总结,自己也拿起笔记本写下了今年的年终总结。

决定

在今年四月决定自己程序员生涯的方向,前端工程师。为什么在这个大数据发展蓬勃、人工智能仿佛要取代所有工作、Java仿佛要成为世界编程领袖的年代,我要选一条被外人看上去“切页面仔、入门简单、底层程序员”的前端路?

其实原因很简单,前端工程师是最接近用户的程序员,一个产品的交互体验、页面结构、细节处理,往往是给用户的第一印象,在这个有很多选择的年代,从用户点击进来到展现产品的过程中,如果第一印象不好,用户可能会毫不犹豫退出右拐进入了你竞争对手的产品中,无论你后端代码写的再精良,大数据分析的再到位,如果被前端拖了后腿,白屏时间超长、页面交互卡顿、毫无响应式布局,那么我觉得这个锅得铁铁实实地盖在前端工程师的头上,你不仅对不起你老板给你薪资,更对不起和你并肩作战的后端小伙伴,让他们的付出付之东流,让你老板的投资打水漂。

所以,前端程序员还不重要吗?已经不是当初那个被称为切图仔的前端工程师了,更不是一个团队中技术含量要求不高的底层程序员了,恰恰相反,前端程序员已经成为一项产品的门面,在这里我并不是为了强调前端程序员的地位多高,而是认清楚作为一位前端工程师,要肩负起团队所有成员所有的心血,把大家的成果集中起来用最大的努力,提供给用户使用,这才是我想表达的重点。

所以,认清楚这点后,我毅然决然地放下了手中的java书,删掉了启动需要十多秒的eclipse,开始走向前端之路。

过程

遇见macbook

在使用widows多年后,一直有很多怨言,比如下载软件需要时时刻刻注意被安装附加垃圾软件,系统设置繁多却没几个真正用到等等等…直到有一次上课需要用电脑上去讲解PPT,打开电脑我懵逼了,自动开始给我更新window版本,当时懵逼,我什么时候允许更新了,一更新就更新了整整两个小时,导致无法讲解PPT,整个team的分数被我拉低,虽然责任不完完全全是电脑导致的(谁让我不备份一个的= =),但是这么多怨言终于在此刻爆发,我是一个非常注重产品使用体验的人,手机上的app并不多,因为当遇到一些设计不合理,让我用的很不愉悦的app,只要不是刚需(如12306),我都会毅然删除掉,于是乎,我放下了我用了一年多的windows,用自己一年多积蓄,买了最低配的16款macbook pro,拿到手后,不但没有觉得贵,反而是相见恨晚,它真的惊艳到了我,怎么可以设计的这么好看,操作系统怎么可以做到这么轻而实用。这篇总结文章在mac键盘下完成,虽然已经是凌晨,但舒适的键盘让我丝毫不疲惫。这或许是我买过提高自己工作效率最大的一件产品吧。

使用mac后,写代码也变得那么地优雅,尽管遇到bug也不会那么焦虑。

前三个月——起点

开头往往是让人充满期待的,慕课网是我学习的第一个起点,跟着上面的简单demo敲击让我觉得前端仿佛并不难吃透,在上面学习HTML、JavaScript、CSS让我感觉内容并不多,并且JavaScript和其他语言有很多类似点,因为基本语法都是一样的,CSS好像平时也就用那几个padding,margin,color…,HTML好像有了div就够了,因为什么东西都能有div包起来然后用CSS绝对定个位就好了,要header、fotter这些标签有啥用。仿佛只要我使用那百分之二十的技巧,就能完成百分之八十的需求。

在自己的“不知天高地厚”的愚昧中,那几个月“貌似”成长速度很快,学会了很多东西,能够展示一个静态网页和一些交互,那个时候也是过的很充实,感觉自己每天都能作出一些东西,并且还能向github提交个仓库。

学习编程最怕的就是来自内心浮躁,这三个月的学习过程,在一个暑假的晚上,开始了真正的思考,我是不是过于急于求成,追求数量而缺乏对质量把控。

后五个月——转变

在经过几天的思考后,绝对放松心情,于是和女朋友去杭州南京玩了几天,回来后来时真正的转变,炎热的暑假没有回家,在学校的图书馆带着电脑,用了二十多天将陆凌牛老师的《HTML5与CSS权威指南》完整的过了一遍,跟着书上的代码,敲了很多demo,对整个HTML和CSS有了一个大概的体系,虽然有些东西也理解不了,学了但是有用用到实际项目上,至今也不敢说上面的每个知识点我都牢牢记住,但是这也算是我第一次对HTML和CSS进行了体系地学习。这是转变的开始,让我认识到学习知识不可急于求成、浮躁。后面五个月是我学习前端比较关键的小半年,也是下面将分点总结我的知识体系。

Node.js

说出来你可能不信,学习Node并不是当时在计划当中的,但是因为学习ajax的数据获取过程中,压根找不到合适的数据让我去获取,不是跨域就是获取的东西摸不着头脑,于是就在想干脆自己做一个后台接口提供数据好了,于是乎开始踏上了学习Node的征途,因为当时也没打算学的很深,所以也就是提供了简单的get、post请求,用express框架和mongo数据库做了个MVC的登录注册的小demo,也算是第一个像样一点的小项目吧,当时在上面踩了不少坑,身边也没人学Node,于是只能自力更生通过百度来修改自己的bug,到现在遇到问题也不会马上问小伙伴,更多的是自己在网上实在是无法找到相关内容,才会麻烦小伙伴来寻找bug,因为毕竟每个人的时间都是宝贵的。自己认为自己并不算是天赋很高,但是幸好耐心足够,遇到bug会静下心来分析,也为后面学习其他知识打下了一个坚实的基础。

微信小程序

九月中旬,那段时间小程序被炒的很火,感觉所有产品都想在小程序上做一个分支,来获得这一部分的流量,炒归炒,程序员总是要对新的事物有足够的敏感性,于是我也开始学习小程序的基本开发,后来有幸在参加的社团中领队老师那里获得了一次真正开发线上项目的机会,当时社团是工商学院和我们学院联合创办的一个社团,主要和校园招聘相关,指导老师找到我说能不能为社团做一个微信小程序,在上面提供一些企业来校园投放的招聘信息和宣讲会时间地点。当时没有马上说可以,因为当时自己的水平并不高,还没有真正的项目经验,我和老师是让我回去思考以下。其主要问题是我不会做小程序的后端,甚至丝毫头绪的没有,但是这么好的机会不可错过呀,于是经过两天不断地百度不断的查文档,了解到了有leancloud这种BaaS提供商,不需要自己写后端代码,他们有一套成熟的小程序后端技术支持,甚至有一整套用户体系,做了简单的几个curd小demo,觉得可行,第三天找到了指导老师,经过几天的UI设计和产品需求分析,虽然都是一个人在做,但是丝毫不觉得累,于是乎开始了编码的过程,其中也踩了很多坑,过了大概二十多天,不知多少个熬夜(因为当时课程繁多,学生会社团事情也多),自己一个人孤军奋战,beta版本总算出来了,实现了基本上所有预计功能,老师看了觉得不错,但是上线这种招聘类的小程序需要有公司注册,当时社团也没注册公司,老师说会想办法,我说行,我再修复修复小程序的bug。结果三个月过去,到了今天,公司也没注册成功,小程序被放在电脑里,像是铺满了一层厚厚的灰,期间老师多次安慰我们,学院和老师都在想办法,让我们不要着急。最后还是没有上线成功,希望在今年的某个时间段,能够有机会被上线吧。这个项目经历是学习以来成就感最大的一次,不仅学到了很多知识,更是对于一整个项目的流程,有了初步的认识,为我后面学习React开发奠定了基础。

React

为什么我没有选择国人非常火热的Vue作为入门呢?并不是Vue不好,反而到今天我觉得Vue非常适合初学者入门,Vue的语法更加贴合初学者学习的那套HTML、CSS、JavaScript开发习惯,文档和生态在国内都比较全面。React反之,前期学习成本非常大,入门不算是容易,还有文档也没有Vue那么详细漂亮,生态系统在国内并没有Vue那么简单完整,很多一手中文文档更新较慢。那为什么我要走React呢?因为React有个亲兄弟叫React Native呀,学会React就可以顺便学学移动端开发(现在想想真是too young),于是我毅然决然地踏上了React这条船,前期学习真的很难受,文档过于简单,JS in HTML、CSS in JS这两种概念让我头皮发麻,还有复杂的class类和webpack繁琐配置,甚者Redux那一套复杂的体系,曾经一度想转型Vue,但是前期的努力怎么能放弃呢,于是开始认真地看书,到处找教程,阅读别人写的代码,花钱在幕课上买了一套React的入门教程,跟着敲了一遍,还是没有形成较好的体系,于是乎二次阅读文档,自己动手写一些小Demo,React总算也入门了,然而Redux这个工具又让我有点摸不着头脑,前脚刚刚把state学会,这一下又全部不用state用Redux管理状态,说实话我是拒绝的,但是有些项目不用Redux不行呀,又是硬下头皮来学习Redux,多少个日日夜夜,听着室友的呼噜声顶着疲倦在台灯下敲代码,功夫不负有心人,React全家桶(React-router、Redux)总算是有了大概的知识体系,能够开发一些简单的应用,也算是了解并且有一点熟悉React这个前端框架了。转眼间快到了冬天,一个夜晚在想,是不是做点自己的项目,再次巩固一下自己的学习成果。

React项目——小米有品web App

当时也逛了比较多的技术社区,总会看到一些初学者模仿一些app,用Vue或者React做一个web版的app,当时我也想是不是也可以做个,于是挑了一个还没有被模仿的app,小米有品,将它整个app的页面基本上用React实现一遍,当时并没有做过移动端的项目,对于适配问题也没有做到极致,还有一些点击事件也没有注意到,但是也算是第一个“切页面”的项目,用到了当时比较火的CSS类库styled-component,当时觉得这个非常好用,也非常利于组件化的思想,为此也写了一篇styled-component的总结博文,这个项目中对于UI的还原度还是比较高的,因为自己的强迫症,如果有点不好都会花很多事件来修复它,虽然这个项目并没有向后台获取数据,是一个静态页面。不用虽然如此,经过这次开发,对React的使用进一步巩固,对如何在React写CSS有了一些自己的心得,但是还有一点比较遗憾,就是没有后端的支持,整个项目也就是一个展示页,这个时候,我再次思考,是不是应该再次学习Node,圆自己一个完整上线项目的梦,又一个夜晚,躺在床上,决定明天天一亮,就开干。

全栈项目——React博客

我一直又一个想法,因为自己在学习过程中习惯用博客来总结自己的学习成果,然后做一套自己的博客系统,不想再用HEXO和有道云笔记来记录自己写的博客,但是想起来好像有点难,又要做后台接口,又要设计数据库,又要将项目部署上线,这么多步骤,好像有点麻烦呀。确实,很多东西之前都没怎么接触过。但是又想突破自己,于是乎重拾之前学习的Node,将Express进行进一步学习,对mongo数据库再一次的了解。很快,将自己博客系统的大部分API在本地完成,用postman验证了很多次,可以之后,便开始了博客前端的编码,设计真的是件很头疼的事情,用了整整一天的事件,将UI整体定下来,之后又做了一些修改,总之就想达到自己心中最完美的样子,那几天真的很刺激,写代码从没有这么开心过,因为是自己想要的东西,于是满身都是劲,提前一天就将第一个版本开发完成,前后端联调也没什么问题。这个时候,又一个难题来了:怎么部署上线呢?从买服务器,到域名备案,到配置服务器,整整花了我将近十天的时间,这十天的过程真是坎坷,服务器系统被重新安装很多次,mongo数据库装不上来,谷歌了无数次,才勉强将自己的代码放到服务器上面跑起来,返回到自己浏览器,输入自己的域名,看到自己的项目展示在浏览器中,那应该是我感慨最深的一次吧。又一次功夫不负有心人,完成了自己的目标。但是后面又发现一个问题,因为线上的项目出了一些bug,然后在本地修改后,又要放到github上,然后再次在服务器clone下来,再次跑起来,这是件很繁琐的事情,于是听前辈说用pm2来部署项目很便捷,于是又学了用pm2来部署,虽然也很坎坷,但是也算是学会了。这次项目的开发是历时最久的一次,长达一个多月,因为要学的新东西太多了,而且都是自己不怎么熟悉的后端、运维知识,但是这也是我学习收获的知识最多的一次,自己的一双手,扛起了整个项目的前后端开发部署上线,对全栈工程师也有了那么一点了解。

我的经验之谈

上面写了那么多,对自己学习过程进行了详细的说明,转眼间就到了2017年就结束,时间过的真是很快,这就是从入门到全栈项目上线的整个学习过程,历时8个月,身边的小伙伴都是学Java,自己一个人孤军奋战学前端,学校并没有开设涉及到前端的课程,完全靠自学,走了很多弯路,也踩了很多坑,虽然这一年过的很辛苦,也没有什么机会放飞青春,但是收获到的知识已经足够让我感到充实,下面说几个自己学习过程中的习惯。

坚持写博客

写一篇博客真的很耗时间和精力,但是能够让自己完完全全记住并熟悉这个知识点,记得刚刚进大学的时候,父亲对我说,如果想要知道自己对一个知识点是否掌握牢固,办法就是:你是否能够将自己学的东西表达出来,让别人也学会。这点深深启发到了我,每当我对些个知识点学习后,就会用一篇博客来总结和巩固,虽然博客上面没有很多高深的知识点,也能力写出和大佬们那样高水平的文章,但是也好歹记录了自己的学习,到时候忘记了,拿出来简单过一遍,又熟知了。

坚持看社区

每天我都会在掘金上面看半个小时到一个小时的文章,看看大佬们发的技术博文和项目,总会学到很多新的东西,而且只要前端届有什么新的东西,社区上总会马上更新出来,这也让我时刻知道是不是又有新的东西出来了,让我不至于落伍,但是对于发文章在掘金上,开始的时候发了几篇,但是总是觉得自己的水平和大佬们差距还是有点大,后来就不怎么发上去,因为发现我写的东西很多在掘金上已经有类似的,为什么还要炒剩饭。

多看别人的项目

只要我看到了一个比较像样的项目在github上开源了,这里指的是别人做的诸如React和Node项目,我都会clone下来,阅读一遍,如果发现上面有自己不知道的东西,但又是很实用的东西,基本上都会马上开始学习,然后再自己的项目中使用到,这点我觉得是个非常有效的学习方式,因为自己眼光是有限的,不可能完完全全都知道所有的知识点和使用方法。通过别人的项目,学到了很多,不光是新的方法,还有别人书写代码的格式和习惯,对自己也是有很多转变,总之,抄别人的代码,也要抄最优秀的代码并且能读懂,不是吗?

学习习惯

学习习惯同样很重要,切记不能浮躁,对于代码要保持敬畏之心,切记不可逞一时之快,书写可维护性差的代码,害人害己,让别人看不懂,时间久了自己也无从下手维护,因为自己走了很多弯路,所以对这点感慨颇多,这里同样也提醒自己注意良好的习惯。

其他

女朋友

和女朋友已经在一起一年半多,虽然异地,但是每个月还是会抽出两个周末,用上半个月的生活费,坐晚上凌晨的车第二天早上到,去陪她上课逛街生活,还好只是隔壁省份。现在抽屉里也应该有将近一百来张的火车票,虽然时刻感到窘迫,自己喜欢的电子产品也很少买过生活品质也没那么高,但是,累并快乐着。正是因为这种窘迫,才让自己时刻保持努力,以后要赚多一点钱,过上幸福美好的生活,哈哈~,同时也是学习中的动力来源之一。

学习生活与爱好

很惭愧,在这方面,我并没有好好调整之间三者之间的时间分配,将大部分时间花在学习上,导致生活品质和爱好都没有怎么顾及上,没有保持健身,曾经最爱的单反也放在柜子里吃灰,anyway,在下一年,将会调整自己,做到生活学习爱好有个较好的平衡点。

总结

时间过的很快,总是感叹自己已经不再是玩的阶段,是该为自己的未来所有打算,所以这一年来,学了很多东西,对于前端依旧保持着热情与动力,希望在新的一年,能有所进步,祝大家新年快乐!

Life is not waiting for the storm in the past, but learning to dance. :)