一年的工作经验用10年

司徒正美出了一本书:《JavaScript框架设计》,前几周快读了一遍。书中介绍,实现一个JS库或者框架,所会遇到的方方面面的问题。如选择器的设计,数据缓存,动画,各种JavaScript设计模式等等。书中有大量关于兼容性的解决方案,对于经常使用jQuery或者其他JS框架,而对背后原理接触甚少的人来说,读此书会有相当收获。

司徒正美在序中说到:如果写业务代码,你写十年,水平还是那样。因此有句话说——“用一年的经验混十年”,..."我能力强,我效率高,我应该是公司的关键人物",其实那是错的,不可替代性才是最重要的。

但事实上,前端的发展和学习,一直是和业务紧密相连。很难想象一个前端,拿一年的业务代码经验,可以用3年。2010年左右,前端还必须熟练掌握IE系的兼容性问题,而如今,HTML5+CSS3在各终端下的兼容性问题成为了主要矛盾。因此,站在业务一线的前端,水平肯定会随着业务的发展而得到提高。

如何成为全栈

两年前我带了一个徒弟,缘由是公司在启动一项活动:让开发前端起来。现在想来,效果不理想,但也不是特别糟糕,我鼓励她用最标准的浏览器来学习。第一天我从MS Word讲起,说明结构、表现,行为是什么。文档流是什么现象,绝对定位、相对定位、浮动、内外补丁等概念。当时之所以流行“让开发前端起来”,就是为了让开发能脱离前端,独立完成一些业务。这应该是全栈工程师的雏形吧。

前端学习技术的侧重点因人而异:

  • 研究底层,开发工具
  • 完成业务,满足需求

这是有交集的两个方向,例如,在用工具完成业务的过程中,发现一个业界无法解决或解释的问题,那么他很可能去了解工具背后的原理,进而得到一个解决方案,回馈给工具开发者。而工具开发者,在了解业务痛点后,会开发出更多的工具来让业务进行得更加顺利。前端的知识储备,和年龄的增长、业务的发展是成正比的。以前为了IE系兼容性问题而存在,而如今要关注HTML5+CSS3的跨终端兼容性、性能优化。但更重要的是,前端能在缺乏后端的支持下,能独立将一些想法,转换为一些实实在在在的产品吗?如果是,那么前端要学习的就有很多了。

围绕着“将想法转化为产品”这个目标,至少就产生了如下问题:

  • 用什么语言来完成后端业务?Java、PHP、NodeJS?
  • 能实现交互所想要的优雅的UI动画吗?
  • 如何根据设备,响应不同的页面模板?
  • 需要学习Android或iOS开发吗?phoneGap如何?
  • 如何配合DBA做数据存储?
  • 如何实现灰度发布?出现问题了怎么回滚?如何监控?
  • More…

如果开始遇到上述问题,那么已经在通往全栈的路上了。全栈是一种学习的欲望,尝试通过个体来完成产品的一种途径。如此说来,全栈有大包干的嫌疑。

全栈违反社会分工原则吗?

1982年,图形用户界面先驱、图灵奖获得者艾伦·科提斯·凯伊(Alan Curtis Kay)讲到:People who are really serious about software should make their own hardware.(真正在乎软件的人,应该自己生产硬件)。苹果就是个例子,自己的软件跑在自己的硬件上,性能、体验才能达到极致。软件工程师和硬件工程师需要更深入的互相渗透,才能开发出好的产品。

全栈的目的,是让前端与后端配合时更为默契,互为对方提供更好的方案、灵感。甚至可以在缺少某端支持,或资源紧张的情况下,独立将一个Idea,做成真实可用的产品。在阿里已经有很多案例了:淘宝指数时光机数据魔方等等。淘宝首页Node版更是将QPS从400提高到了20000。这是在浏览器端进行优化时,无论如何也达不到的效果。这些产品有的由开发人员来推动的,而有些是由前端推动的。

就像浏览器兼容性、BS架构下催生了前端开发工程师这一职位的诞生。全栈是新时期,前后端互相渗透过程中,必然出现的一个现象。

伟大一点的说,全栈就是新时期下对一个人综合技能的新要求。对开发如此,对前端如此,对设计、交互也如此。

感谢全栈,她给予人们一种能力:在Idea和Product之间架起了一座桥梁。这才是全栈最重要的地方吧。