拿到淘宝offer已经有一段时间,西湖、百淘、D2、实习、各位前端牛人的亲身指导,美好的生活正向我招手。本来决定12月7号报道,但因为一些不可抗力,行程有变(事实上能否进入淘宝工作尚有变数)。在这焦急的等待过程中,还是静下心来,整理一下最近关于职业规划方面的诸多思考,希望能对和我一样的前端新人们有所帮助。
淘宝一面时,与一舟的谈话中很大一部分内容和自己的职业规划有关,二面时也和小马谈及许多关于前端未来的东西。后来试玩Google Wave,又心血来潮发起了一个《重构是否有必要单独作为一项职业》的问题。我承认,这个问题很讨打,尤其是对“重构界”的各位大大来说。想来也真是好笑,我实在太小心眼儿了,当初还在庆幸腾讯有一个专门的页面重构职位(因为我编程基础很差,只会CSS),被他们鄙视后,发觉了这职位其实大有学问,反而开始怀疑起它的必要性来。不过这个不是重点,重点是在这个怀疑的过程中,我对自己在前端领域该如何发展,有了更为理性和系统的认识。
我想相对于其他技术职位来说,前端算是最不挨踢的IT职位了。我注意到很多校招进来的“页面重构师”、“前端开发工程师”等等都是非计算机相关专业的(像我,木材科学…. 扯蛋~)。这当然是因为互联网行业吸引人以及html和CSS入门起点低,大学里尚能全民考C(计算机二级),全民做网页有什么不可以?而且,因为职位所处位置的交叉性,注定有很多前端人员是转行而来:
这个最常见。小公司里的“美工”至今还干着这样的工作 —— 出图(Photoshop) -> 切图(HTML/CSS)。我本人也是因为帮我姐(设计师+代码盲)切图才踏上前端这个道路的。搞设计出身的前端有一个优势是能更好地把握设计稿的表现重点,对于某些视觉设计师不合规范的操作能轻松地化解。劣势也很明显,缺乏数理基础,写出的代码不够严谨,JavaScript基础也普遍较差,不能做真正的“前端开发”。
淘宝的第一位前端工程师本身是写Java的,今年校招也有一位同学面Java结果被推到前端然后被录取的(哇,复杂的中文句式)。之所以现在前端有很多非计算机专业的人,还有一大原因是学计算机的都“不屑于”来搞前端。你说学四年计算机,结果跑去切图写CSS,丢不丢人?所以从后台转战前端的,一般也要去搞所谓的Web Apps,基于Ajax和各种复杂架构的Web运用。而这一技术方向,其实才是前端的大势所趋(下文再议)。
现在很多小孩,特喜欢上网,老打游戏也没意思,所以想学点互联网相关的东西,首选自然是前端了!(因为简单嘛。)有兴趣搞这些的90后,个个成了全才:Photoshop能玩,CSS能玩,php也能玩…… 包括奶瓶嘴作者在内的几位Twitter名人就是其中的典型…… 作为“互联网重度用户”,有一大优势,那就是对网页结构、交互需求的直观理解,懂得网民需要些什么,写出的程序也往往有更佳的易用性。当然,易用性要靠所谓“交互设计师”,不过,交互设计不也是前端的一部分么?
此外,还有很多在实践中成长起来的站长,也还是有一定的“前端修养”。可能他们最初就只是想搞几个站玩玩,在不断建站的过程中学到一些前端技术。有些人在前端方面精专下去,有些人则持续地做着重复性的工作或一直坐吃山空。此是题外话,不表。
从不同渠道接触前端的同学自然会走不同的道路,而前端作为联系服务器数据与用户的纽带,作为视觉设计与程序逻辑的碾钵,也发散出很多不同的分支。
面试前准备自我介绍时我写过一些要点(后来因为紧张没有用上):
我认为平常做网页时,我能获得的心理满足包括:
- 设计中的美学体验
- 同时作为用户和设计师,完成一项交互产品时的参与感
- coding时的逻辑性对自己的锻炼
- debugging完成后的成就感
这其实大致描述了在前端领域可能面对的挑战——视觉,交互,前端开发。这也正是大部分互联网公司UED部门的职位划分。平常所说的前端,一般指狭义的“前端开发”,此文标题里所说的“前端新人”,也是指作为程序员的各位刚入行的前端开发者。程序员有什么成长轨迹,前端新人自然也八九不离十——一日千行代码,钻研细节成为技术大拿,自写程序贡献开源社区,出书立著;学习管理经验,负责团队项目架构,跳槽或创业,当老板赚大钱……
有一些搞前端的同学,投身这个职位时并没有意识到自己是名程序员(说实话,我本人现在对“程序员”这个称谓的认同感也不强)。他们进入这个行业的初期,就是一“做网页的”,或出于个人兴趣,或出于工作需求(传奇的网络工作部),可以说是在一种“全民有个站”的浪潮中成长起来的。他们什么都会一点儿,设计、交互、SEO、站点架构,都是在潜移默化中进行着无意识实践(或有意识的浅实践)。而一旦决定把“做网页”当做自己赖以谋生的职业,这样模糊的定位肯定行不通了。你要自信地对自己说:“其实,我是一名前端工程师(or 交互设计师 / 视觉设计师)。” 不然你就只能吃青春饭,干一些“笨活儿”,走不出一条可持续发展之路。
如果你一定要说我是做网页的,可不可以不要在前面加‘死’字。
个人觉得,现在搞前端的确是要什么都会,什么都要了解。在这种“大前端”的趋势下,先有一个明确的目标职业比较重要。你是更爱设计还是代码?亦或者用户研究更对你味?小公司(小项目)里没有那么明确的职能划分,要求你什么都会,这无可厚非,而且对你的成长很有帮助。但做到一定程度,确立一个能力重点,是十分有必要的。
拿“前端开发”这一块来说,有重视视觉的展示类站点,有重视交互的应用型站点,前端开发也自然地划分出两个方向—— 普通应用和RIA。普通应用只需单纯的psd2html,把psd文件转化成html。而RIA则需要和“广义前端”的各个部门分工协作,同时又兼具较高的程序员素养(算法、逻辑严密性,etc…)。话说回来,psd转html的过程也大有学问,很多CSS tricks让人抓狂,页面重构的细节多多,而且别忘了,它还是RIA的前期准备。考虑到将来Web应用的复杂性(交互越傻瓜化,支撑交互的脚本就越复杂),互联网产品的迭代周期越来越短,分工合作乃大势所趋。要避免成为“死做网页的”,就要理解这个“分工”与“合作”的过程,并在某一方面有所精专(要么CSS,要么JS,要么Flash),同时不断学习其他相关技能。
在这一点上,我坚持着两个信条:
不论做设计还是写代码,我都不喜欢重复自己。新鲜的布局往往让我激动万分。只要看到新的技巧,就要在下一个项目里亲自实践。这也是为什么我只做过五六个站(一些小练习不算),却能面上淘宝的原因(好吧,其实是因为运气,哈哈)。
而怎么选择自己的能力重点,也是一个问题。在面试前,我如此帮自己分析:
平时做整套网页,前端coding所花时间最多。项目需求、学习条件所限,导致我在网页视觉设计和交互设计上的学习,不及前端开发深入,可能还不能满足融入一个大公司团队的需求。而且前两者需要很强的沟通能力,相对来说,写代码的活儿独立性更强,应该更适合我一些。
现在想来也不无道理,但随着工作的深入,自身能力的提高,兴趣点发生转移也不是不可能。总之,无论如何选择职业,都以能实现自己已有长处,同时不埋没自己的潜能为准。
互联网瞬息万变,前端行业发展喜人,Web 2.0网站风光无限,同时也给从业者提出很多新的要求。而你跟随时代的脚步有多紧,很大程度上决定了你将来会有多成功。前端开发这一职位,将来会怎么发展;如果还有新人转过来,会是程序员们更适合,还是设计师们更适合?把这个问题想通了,也就预知了前端的未来。
HTML5新增了很多方便富应用的标签,CSS3新增了很多方便视觉设计的属性,这即能简化开发,也提供了功能实现上的更多可能。更强大的Web应用,更灵活而方便的构建方式,更需要前端人员具有“大前端”的思维。是理性的程序员更容易大起来,还是感性的设计师更容易呢?
浏览器兼容一直是前端开发的重中之重。既是最费时也最无趣的部分,也是需要前端开发作为独立职位的一大原因。既有人抱怨“IE6去死吧!”,也有人说“IE6死了,我们就没工作啦”(当然,后者目光比较短浅)。IE6已经活了整整10年,上个月淘宝的访客还有70%是IE6用户。IE6一日不死,HTML5/CSS3这些新东西就一日不能全面部署。
不过,IE6生命力再顽强,它总归是会死的(浏览器标准会越发统一)。是否能把握先机,决定了你将来的竞争力。
互联网前所未有地慎入移动设备。君不见,手机黄祸的影响力已经大道让家长们个个如坐针毡。作为前端开发人员,这些社会问题我们无力过问,但我们至少能看出,手机等移动设备上的开发潜力是非常大的。淘宝已经新成立了无限事业部,联通“iPhone拥有各种应用程序”的广告铺天盖地袭来,你还在等什么呢?
所谓Web App被大力提倡,很多前端程序已经比某些后台程序还要复杂。当你投身于复杂的JavaScript海洋时,心中对交互和视觉还能保有多少敬畏?嗯,这个问题比较悬了,还待我真的能写得出复杂程序时再议。
这些东西,就是“专业”和“半罐水”的区别。互联网上有很多渠道可以接触这些新热点,我不再赘言。
JavaScript游戏,JavaScript绘图,酷炫的ActionScript动画,你能写出来几个?