别动手动脚的,把手拿开!
我是在地球上成长的赛亚人!

Posted by 小程同学| Blog on March 24, 2018

说实在的,和后端相比,前端的知识体系太杂了,以至于很多入门者找不到方向。其实,前端既要宽度,也要深度,优秀的前端开发人员比后端开发人员难培养多了。

1 兴趣是最好的老师

学习前端,或者说(ˇˍˇ), 玩代码这一行,要玩得有深度,最基本也是最重要的,要自己有兴趣,没有兴趣就不要浪费时间了。虽然这是废话,但是当你碰到了技术发展的瓶颈期了,我觉得就应该能很比较好地理解这句废话的含义。

2 找一个好的导师

找一个愿意传授知识的导师,或找一个有大牛存在的团队,这是提高技能的最好也是最快的途径。如果什么都是自己研究,天赋异禀,或许会比别人快,但有一个人在关键时刻提点你,效果其实是非常显著的,突飞猛进指日可待。说白了,你要和牛人一起干过活,知道大牛长什么模样的。当然,在大中型项目中,大牛比较多,但这个对于入门者来说,如果你进入不了大中型项目,那么也可以在很多创业项目中物色,特别是电商领域等热门的、竞争激烈的领域,前端这一块至少需要一两只大牛来做前端架构和开发模式选型,能承担这样子角色的人选,一般都算是比较厉害的了。竞争激烈的领域,如果连交互体验都不重视,那么这种项目绝对是没有成功的机会滴。

作者:知乎用户
链接:https://www.zhihu.com/question/28638304/answer/42021247
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

不同level,前端需要的技能分析

1 初级入门

html和css,这两个基本功。合理的html结构,很多时候可以减少js逻辑、css样式,以及避免绝多数的兼容性问题。基本功不好,到了一定程度会限制你往后发展的空间。这一层面会涉及photoshop、美术方面的相关知识,而交互方面,大多数WEB需求是在jQuery或Zepto这样的库下进行的,会这两个库基本能够入门了。

2 中高级前端

初中级前端对于原生js开发能力的要求并不是很迫切,但是如果到了高级前端,就需要对js原生层面的API、属性以及不同浏览器的特性,都要有较深的了解了。这一层面的前端,我个人认为必须深刻理解几个知识点:js的闭包、作用域以及类。熟练掌握几种js类的定义以及继承的方法,了解它们之间的差异,并能结合实际需求,在开发生产应用上。这其实就是具备面良好的向对象编程的编程开发思维了。此外,中高级的前端必须掌握CMD或AMD的模块化方案中的一种,还掌握至少一个MVC或MVVM框架,能胜任比如OPOA页面,又如tmall、唯品会等电商网站的侧边工具条、提交订单等交互功能复杂的开发需求。在这个级别的前端,我觉得,才好称之为程序员,和后端的开发一样,都是码农了。对于入门的,只要求会切图,写简单脚本或整合个jQuery插件来完成任务的,在我看来,还不能算是一个程序员。

3 前端leader

之前都是说技术的,而leader角色其实除了开发技能外,可能还需要一些管理方面的经验或能力。在这个层面,不同的团队可能不一样,有偏技术的,有重管理的,但我个人认为,如果要底下的开发人员服你,至少代码层面的功力不能少,要不你无法做好代码review,保障整个团队是按照规范来执行得,有问题的时候需要leader快速定位问题,提供解决方案或解决思维。小结,一个优秀的前端leader,我认为应该具备的能力:①重要功能或需求的开发,或提供解决方案,做技术选型 —> 技术功底②需求分析评审,分发开发任务,和产品经理、设计师以及后端等沟通、协调 —> 沟通能力,具备产品思维,前端转型做产品不在少数③开发需求的跟进,代码review,代码合并与发布等,精通svn或git是必须的,记住是精通,你新招的新手同事很可能不知道什么时候把别人写好的东西弄没了,你至少要知道如何找回吧 —> 项目管理能力④前端开发规范,开发文档、开发标准的建立和实施,关键是实施 —> 文档功力和执行力⑤新员工的培训、辅导 —> 做老师的能力⑥前端的技术更新太快了,一个优秀的前端leader还要引导团队了解和学习新的技术,为以后做技术储备 —>行业观察能力……⑦不能太宅。这很重要,技术男大多很宅,要想做一个好的leader,就要多和不同的人特别是多和沟通方面强势的人打交道。要不,等你做到leader的位置,即便是站在前端的角度来看有些极度不合理的需求,你也可能镇不住,天天接这样的需求,怨言就犹如漫天飞雪,受不了的人会选择离开,如果你的团队离职率高的话。。。Boss会觉得你是合适的吗?

4 前端架构师

是的,前端也需要架构!前端leader,或高级前端开发不就是了?可能是,但架构是一个系统性层面的东西,能做好前端管理,未必能做好架构,当然,做好前端架构了,未必就能做好前端团队的管理。当然,这是两个层面的东西,也没所谓谁更高大上。好吧。还是聊聊架构师这玩意吧,因为做架构要涵盖的前端方面方面,还包括一些后端的东西。听起来,还是挺高大上的。现在的前端已经不再是刀耕火种的年代了,在整个web开发生产流水线上,可能一些企业网站还可能属于附属或边角的工作,就是干php的顺手也可以弄一下的那种,但是,但凡有点追求的,重视前端体验的项目,前端必须是专业人士来干的,前后端分离开发也是必须的。如何实现前后端分离?为什么要实施前后端分离?这方面的知识,似乎不是这个主题的范畴了。我就不说了,这里主要是给前端架构师,这个细分工种,给出我个人的见解。首先,在我看来,前端架构要解决三个层面上的问题:①团队开发协作层面的——根据项目的情况,设定一套符合项目实际需求的,能够解决前端团队多人协作开发、代码模块化组织的开发架构或模式,减少前端开发的边际工作,方便开发人员把绝大多数精力专注于业务逻辑的本身实现。也就是,前端生产的工程化和发布的自动化。②业务需求实现层面的——根据业务需求,设定或整合一套符合业务需求的,能够解决绝大多数业务场景的基础上,保持好良好的可扩展性以及良好的可维护性的Javascript框架或方案。③除了解决前端自身开发的两个层面问题外,还可能协同后端架构师,确定前后端对接的API,定一套符合项目需求的RESTful方案,并整合到前端框架中,最终形成一套数据封装的js API,如果项目有采用MVVM框架的,最好是能结合Model,以便view视图的控制。当然,对于前后端交集的部分,比如服务端view模板层的一些东西,可能也需要前端架构师提供一个合理的架构或方案,哪些东西是公共的,可继承或复用的,该抽象出来的。。。这在PHP项目中是必不可少。当然,这个工作可能是前端Leader来干也合适的。或墨水有限,或眼界有限,对于前端架构师这个工种的表述不是很到位的,欢迎补充。举个例子吧,然后我再对前端架构师要干的活做一个小结。以阿里巴巴为例,淘宝、天猫、一淘等平台,都是基于kissy框架以及基于kissy开发的模块,这是根据阿里巴巴复杂多变的业务需求,在多次迭代后形成的,几乎你想要的前端功能它都包含,底层的基础工具函数,表现层的业务实现代码,甚至标准模板都有的,如果把所有功能都打包,这个框架就很大,实际生产时不可能这么干,对吧?没关系,它本身是模块化,可以按需请求。但这还需要结合在Combo技术和CDN技术,这其实是阿里前端的核心技术,这里也有些相关的介绍:前端优化:淘宝的Combo Handler和新浪微博的link标签includes属性模块化高扩展性的前端框架 KISSY小结: 如果项目中要用上类似kissy这样的框架,到底涉及多少前端架构相关的技术:1、前端自动化工程化——nodeJS/grunt /gulp2、前端模块化——CMD或AMD,kissy是CMD,也就是seaJS,CMD就是阿里自己弄出来的标准3、前端发布代码增量发布系统——git是必须的,NodeJS Express框架的自动化或可视化的发布界面4、前端按需加载——在线Combo,CND缓存技术,这里的核心,我认为是解决js模块依赖分析以及CDN的强缓存问题5、前后端数据交互——RESTful、模板控制系统(tmall内部好像是TMS系统),前端主导业务系统的API规范6、前端开发环境的一些相关问题,这个因为前端开发比较零碎,边际工作多,提高开发体验和提高开发迭代速度,很多基础性工作,比如开发环境,数据模拟系统,等都是前端架构师要考虑的事情当然,kissy很强大,但并不一定适合每个项目,所以架构师要做的事情要对技术做好选型,如果时间允许,架构师不妨考虑自己造一个轮子,但项目的时间规划上不允许,不是要你自己造一个轮子,而是整合各种资源,形成一套能快速用于实战的整合套餐。比如,蘑菇街的前端开发框架就是一盘整合的套餐——requirejs+jquery+backbone+一套自定义的底层库+各种插件+在线combo如果要了解大公司的前端是怎样的,或者别人是怎么做的,可以看这里的视频,——D2前端技术论坛——2014绽放丨章节有不少底料,前端开发理念层面的东西比较多。当然,前提是你都看明白了,如果都理解别人的做法,我想,你距离大牛也就不远了吧。题外话:在线combo和本地combo在阿里和蘑菇街两个电商上,都用了在线Combo,说明这确实是一个前端非常重要的技术,模仿阿里前端资源在线combo的服务,咱用coffeescript也写了个在线combo的服务,基于node 的Express框架,有兴趣可以参考一下https://github.com/lmtdit/static-combo但是,我个人认为,在中小型的项目中,其实还用不上在线combo这种技术,因为这需要良好的服务器支持,而阿里、蘑菇街在这方面的资源并不是问题,而初起步的项目一开始就引入这种前端资源加载机制,是挺高大上的,但可能投入产出比上考虑不是很划算。。。而本地化的Combo机制,生产代码在本地build好之后,再发布到第三方的CDN上,这种可能会比较实际,但也要解决好CSS和JS模块开发和生产混淆压缩以及静态资源的缓存问题。