2

作为文科专业毕业,无名校背景,无任何关系,没有接受过任何专业培训,完全靠自学和看书看视频做了五年前端,在外包公司,创业公司,BAT级公司再到新型互联网公司都呆过,想结合自己的经历谈谈对于自学前端的一些看法:

学习大纲

关于技术栈学习,网上总会有各种讨论,在此我就不详述了,感兴趣的话可以看看github上的一份前端学习大纲:2016年前端知识学习大纲,这个基本能覆盖绝大部分新手需要学习和掌握的内容,后面我更想聊聊自己对技术学习上的经验归结。

有认同感

首先对于前端学习需要有认同感,关于这点非常非常非常重要,想必大部分人学前端的初衷是觉得前端相对于简单,上手快也不需要学习算法,编译原理,数据库,操作系统,网络原理都诸多基础知识,所见即所得马上就能开始干活,而且外观呈现和交互效果这类东西比较容易激发人的学习兴趣,另一种情况是做后端,做客户端,做产品的同学觉得自己的发展遇到了瓶颈,转做前端无论是从上手程度还是快速出活等都相对容易,加上这几年h5应用,webapp,微应用,小程序,混合app开发等各种新概念层出不穷,市场认可度也比较高,行业需求的水转船高也让前端的职位的一直供不应求,但是请不要因为以上的外在因素降低了自身的学习标准,前端开发做到后面仍然是软件开发的一个工种,软件技术的一些普世性标准放到这块也同样适用,比如基础算法,编程语言,设计模式,工程管理,网络知识等都是通用的,甚至这些基础底蕴掌握的好坏会直接决定你后续的发展空间,所以请放弃前端=页面仔这种幼稚的想法,努力提升自己的内功修炼。

与时俱进

前端是门一直在变化的工种,相对于服务端和客户端的开发,无论是技术沉淀还是框架的选用等业内都会有一套大致认同的标准,更多时候我们是根据自身的产品类型和业务发展来做技术选型,但是前端则不然,这是为数不多走的官方标准落实缓慢,民间标准层出不求,然后民间标准流行后再反推官方标准更新的技术路线,这就直接导致了好不容易学了点新技术标准却苦于无合适的环境可以使用,好不容易掌握了一个流行框架和工具然后隔年再看发现业内都不用了,不同的浏览器和软件大厂纷纷推自己的特殊标准来占据市场导致同一套标准下的代码在不同的环境中还会有各种兼容性问题等各种囧境,这就要求作为前端开发者天生就需要具备各种积极主动和开放包容的学习精神,多与业内的同行交流,多去关注下github上的一些火热的项目,多去尝试些新技术理念和调试一切的耐心。比如前几年会写jquery,了解CSS就能开始干活,加配个grunt和less已经算是高配,但是现在我们再看看,你要不整点node的基础环境,不弄个npm和yarn来管理你的资源依赖,不整点单页路由,不上点babel和typescript来预编译下高级语法特性,不用点数据驱动和MVVM之类的框架,不来点redux,rx-js之类的编程模型,不整点webapck之类的依赖管理与打包工具,不上点mocha,jasmine之类的测试驱动开发框架等,你都不好意思说自己在做前端开发,诚然很多人都会说我只是想写个页面为何要弄的这么复杂,但是大家为何不反思下我们的页面开发的工作模式和技术选型上是不是真的一直以来被我们低估了才会有如此大的偏见,况且现在前端开发的工作量已经不同往日,服务的接口日趋API化,各种处理业务和控制层等操作也在逐步往前端迁移,这也对我们的工程化规模控制提供了更加严格的要求,而非之前的拼成各种脚本片段;

海纳百川

前端是门不断借鉴的工作,这里说的借鉴其实并不等于抄袭,而是指不断在站在巨人的肩膀上创新的过程,如果来看今天js的发展。当年js的作者都不会想到自己当初只是设计用来验证页面表单的语言能发展到如今这个程度,但是随着技术领域的不断发展,业内大家都比较公认的一些好的设计模式,架构理念其实也是不断地被一些新型的js库的作者所借鉴,比如当下最火的angularjs2,react,vue等,其中的很多数据更新策略,分层设计以及组件分层的思想其实在很多其他语言框架的设计中早已体现,只是把这些概念带到了js中再根据语言特点重新做了优化实现,好的技术理念与算法其实是和语言无关的,所以多了解些通用的技术准则和最佳实践才能不断创新,不然的话永远只是做API的调用党和框架的追随者,自身的发展就容易陷入迷茫期。

有判断力

前端发展到现在可谓层出不穷,百花齐放,但是如何选择做适合自己项目的技术选型,这其实也是非常考验每个从业人员的能力,一方面团队和个人需要成长,肯定会愿意在项目中去尝试些新的技术框架和理念,另一方面工作需要快速出活以及旧的业务需要平稳过渡,考虑到前后的衔接也不可能完全弃旧的技术体系不顾,同时还需要考虑技术的稳定性以及后续的升级维护成本,第三方资源,社区活跃度以及生态发展环境等等,作为前端从业者是需要你对自己选择的结果负责的,所以我们的指导原则应该是多考虑下自己以及团队的能力,hold不hold住,如果出现了最坏的情况该如何处理,如果出现了源码级的bug改怎么调试。遇到了文档匮乏和团队成员水平不一致该如何配合等等,这些都应该作为你的技术选型的参考,而非单纯的求新求酷,我们不排斥新技术,也不轻易否认各种框架的优缺点,但是前提是请先多了解多思考,做最佳的选择。

以不变应万变

万变不离其宗,技术和基础的沉淀才最重要,诚然各种理念和框架在不断涌现,但是语言最本质的一些东西是不会变的,ecmascript的语言基础特性,html的语义标准,css的各种特性,http协议,设计模式以及常用的页面优化性能实现等等,这些最接近技术本质的东西是任何框架都取代不了的,所以时不时地回过头来多多看看这些东西,可以的话,自己也多写点博客文章或者造个轮子,对于自身的提升也极其有用的。

写在后面

最后我想说的是如果条件允许的话,建议初学者还是多去大公司锻炼锻炼或者多研究一些业内主流公司的标准,毕竟先以高标准来要求自己,即使客观环境再怎么恶劣也不至于完全走偏,但是相反一开始就都是些野路子,完全按着自己的主观臆想和快速出活的想法去积累经验,那样往往容易陷入被动,后面再纠正回来无论是成本还是时间损耗都是巨大的。


Abcat
2.1k 声望1.4k 粉丝

浮世滔,人情渺,千古纷争何时了?江湖远,碧空长,几度飘零试锋芒!