阿里前端的困局与突围

  最近发了两条微博:

想起克军的一句话:前端研究,研究个屁~ 的确如此呀。补充下联:前端设计,设计个屁~

前端目前最大的困境是,如 HTML 一样,无论你承不承认,市场上并不太需要 HTML 高手。

  微博上的回复大部分歪楼了。上面两句话乍看有点激进,却是我的真实想法。

  背后是一个问题:

  前端的价值究竟是什么?未来应该如何发展?

  前端的价值

  如果你刚入行,或者从事专职前端工作未满 3 年,请忽略上面这个问题,并且尽量不要再往下看了。

  我知道你会忍不住往下看,那就看吧。负能量有时也是正能量。真实面对所做的事,如实面对自己的真心,这是迟早的。有过痛,才真正懂得乐。

  特别注意,下面说的前端,都是阿里的前端,其他公司切勿对号入座,每个公司的情况都不同。每个公司,前端的定位也会有差异。

  阿里的前端,目前主要分两种:一种在 UX / UED 部门,另一种在技术部门,所做的事大同小异,都是负责界面交互层的开发。上游是 PD、交互、视觉等,下游是后端开发人员、测试等。技能主要是 HTML、CSS、JavaScript,有些前端团队比如支付宝还直接负责 Velocity 等模板层的开发。这是阿里目前前端的现状。

  前端是后端数据的第一消费者,也是最贴近用户的程序员。

  一切看起来很美。

  前端的价值在哪呢?很多人会回答:

  1. 实现界面交互。
  2. 提升用户体验。

  第一点是前端的本职工作,也是前端岗位存在的原因。第二点也不多说,前端做得好,对用户体验是有益的。

  让人纠结的,是前端有价值,可是,这价值真的很重要吗?真的值得做为一个职业投入一辈子吗?

  做技术的,可能都会有类似纠结。但传统技术,纠结相对少点。比如搞数据库的,有一堆牛人榜样,搞网络、安全等等的,也是如此。这个现实的背后,是因为:

  这批传统技术的背后,无论是数据库底层优化,还是网络优化、安全防范等等,做得好,对业务都能直接产生影响,比如大幅度降低硬件成本等等。 价值是直接的,可见的,不太会被质疑。

  然而前端的价值,没有人会直接否认,但看得明白的,都知道:

  淘宝的核心用户体验,并非是 UI 层面带来的,而是 C2C 的模式,是同等品质下商品的价格,还有支付宝的便捷等等。前端的确很重要,但真的,也就那么着。比如京东,很多交互细节做得其实不咋的,但京东靠着靠谱的物流、货到付款等方式提升了整体购物体验。对阿里来说,用户体验非常非常重要,但前端在用户体验层面能做的其实很少很少。

  一个事实:

把国内大部分公司的 UX 部门解散掉,也不会太影响产品的体验。在国内,UX 主要还是起到美工的作用,虽然我不想承认。

  前端依旧是美工,而且仅仅是实现工。

  在阿里,我们不得不承认一个事实:**前端的确有价值,但放在全局来看,前端产生的价值并非核心价值。** 在阿里,虽然前端的工作已经不可或缺,但对大公司而言,不可或缺的岗位多了去呢,不可或缺不代表有核心价值,我就不说了。

  前端的未来发展

  前端,往后是技术,往前是体验。我的理解,前端的未来发展,有两个方向:

  1. 前后端体系的融合,技术平台化。 范例是 Google、Facebook 等公司的技术体系,不细分前后端,都是 Web Developer,在整套技术平台上,Developer 都可以从后到前高效开发。技术平台本身由 Engineer 维护,有各个领域的高手,包括前端的。
  2. 前端技术带来的体验革新,成为某些产品的核心竞争力。 典型的比如 Path,国外有很多创新型项目,体验是核心竞争力之一。在这类产品中, 前端带来的用户体验很关键。

  然而,上面两个方向,在阿里的现状下,困难重重:

  1. 技术平台化之路很难。 阿里现有的技术体系,前端只是薄薄的一层,要靠这薄薄的一层,来渗透甚至改革现有前后端开发模式,非常困难。支付宝算是走在前面,已经摸索了一年多,但越来越觉得,前端的绝大部分问题,其实都需要后端才能解决。去跨团队推动也可以,因为难,所以前行也挺有挑战挺有意义。可是,更悲催的事实是,技术平台化,前后端开发模式的融合,目前来看,并不是阿里的痛点,还没有到这一步,没这个强烈需求。需求不强烈,意味着缺了“天时”。很希望我的想法是错的。前后端的技术平台化之路,还有一个很现实的问题是,马云留下的隐患:平凡的人去做非凡的事。虽然现在有意不提这句话了。这句话很伤人,特别是技术人员,然而事实就是事实。即便技术平台能建成,在平台之上,阿里现有的开发人员,无论是前端还是后端,很多人可能还欠缺了不少能力。Facebook、Google 等玩起来,有个重要因素是精英文化。这话题不多说。现实的残酷,虽然也有方法是改变。
  2. 体验创新之路也非常难。 在淘系可能相对好点,在支付宝,前几年首要的问题是安全、稳定,接下来几年之内,依旧是安全、稳定。创新受产品形态的影响非常大,没有一个好的产品,妄谈创新。可以有不少微创新,可以有很多小而美,但目前都触不到痛点,隔靴搔痒。真正承担阿里用户体验的,是 CDN 团队、是数据库团队、是 PD、是运营、是大安全…… 继续希望我是错的。

  以上两个方向,虽然困难重重,但在一些新领域,却充满机会与希望:

  1. 无线领域。 未来是属于无线的,这话说到心坎上。目前阿里的无线才起步,起步意味着百废待兴。无论是前后端的技术体系,还是产品的体验创新,在无线领域,前端的机遇与挑战都很多。并且其价值,有可能变成核心价值。这一点,希望我的判断是对的。(编者注:在阿里“移动”叫“无线”)
  2. Node.js 领域。严格来说是 JavaScript 程序员的新舞台。通过 Node,前端程序员可以摇身一变,变成传统程序员。数据库、网络、业务架构等等技术核心领域,都可以通过 JavaScript 来达成。Node 社区是迷人的。同样,希望我的判断是对的。

  上面的分类有点混乱,下面继续乱谈:

  1. 创业。 在很多产品中,前端虽然很难产生核心价值,但在有竞争的地方,附属价值经常会成为核心竞争力。比如出去创业,如何在大量同类产品中脱颖而出,前端界面层的实现非常关键。可是,无论是淘宝,还是支付宝等,目前都已经过了初期创业期。有时真希望,易趣如果还强大着该有多好。
  2. 转行。 的确,没必要因为懂 JavaScript,就一辈子做前端。没必要限定自己的发展,可以做 2-3 年前端,然后再去做 2-3 年开发,还年轻的话,可以继续尝试各种岗位,说不定,10年后,就变 CTO 了。

  从人的一生来看,前端只是一段很小的旅途。它能带给你我们的已经不少,舍弃惯性,脱离舒适区,长远来看才能走得更远。放弃有时也是坚持,重要的是你心中的梦是什么。

  感悟与坚持

  纯技术上,前端目前的很多发展,只是在满足业务,并没有真正对业务带来“从无到有、促进变革”的变化。从公司的角度讲,并不需要那么多前端牛人。这是我那条说 HTML 高手是屠龙术的微博的含义。

  另一个角度上,前端技术这些年的变化,无论是 YUI 的发展、还是最近两三年兴起来的模块化开发理念、以及 Node.js 带来的前端工具变革、还有 Backbone 等类库背后的 MVX 的发展,这些都切实推动着前端往前发展,虽然很慢很慢,虽然短时间内很难直接影响业务价值,但我相信,这类工作的价值,也很大。

  一类是直接促进业务发展,一类是缓慢带动人员的成长。这两类工作,都非常有价值。一个着力于现在,一个发力于未来。

  看起来,路都很清楚。然而我们都是人不是神。最后以一段人与人之间的对话来结束这篇充满负能量的文章:

章小新:有一个现实是,如果在这块上长时间的价值不被认可,那很有可能真正产出的价值没有我们想想象的大,是否是我们自己深限其中? 有时虽然不想往这方面想,但又是不得不仔细深思的问题。

玉伯:毕竟我们都是人,要坦诚面对自己的真心,包括贪欲。比如一个事,如果做了 5 年,依旧得不到直接认可,也没更多物质上奖励,我估计你也很难做下去了,或者就是打着酱油,干着其他有意思的事情去了。

章小新:哈,今天的话题的确是沉了点,今天上午还和同事们讨论过~~~ 先认清自己,再从容微笑去面对。

玉伯:从容微笑谈何容易。从容微笑的一个前提是,认清了自己,找到了今后要走的方向,知道接下来该怎么走下去。

李牧:这么说好像我有多么淡定一样。。其实没有了。会很计较,但是现实面前了。

玉伯:从容不是有希望,也不是在路上,而是自己喜欢自己做的事情。又变鸡汤了,不过发现很多鸡汤越来越有道理,得真心去信。真正的认可是自己给自己的。

柏林:我不是做前端的,一直在关注大家。 呵呵。看到这句话蛮有感触,要体验过鸡汤的过程,才能品味到真实的味道。(说得不好哈)

  (完)文 / 玉伯

  PS:把这篇文章发出来,很犹豫。把这些想清楚的事情说出来,虽然可能会影响团队士气,会打击工作不久的前端,但隐瞒更不可取。 前端还很年轻,如何发展,如何前行,需要所有前端们一起来思考。我们需要未来,也需要真实。我们不需要的是混日子。我们往哪里去,取决于我们自己。

  题图:路在心里,更在脚下。

阿里前端的困局与突围,布布扣,bubuko.com

时间: 2024-10-12 13:26:06

阿里前端的困局与突围的相关文章

阿里前端推出的新的React框架Mirror

前几天看到寸志的知乎文章,关于阿里前端推出的Mirror框架,在这里记录一下. Mirror是基于React,React-router,Redux的一套前端框架,总的来说是对它们的封装和强化. 其中,Redux对状态管理的流程很清晰,但是就代码来说,存在不少重复劳动,而Mirror对其进行了简化. 以下是一个Todo的例子 import mirror, { actions } from 'mirrorx' let nextId = 0 mirror.model({ name: 'todos',

阿里前端两年随想

阿里前端两年随想 其实按照我的情怀和尿性,文章的标题应该是 前端登堂入室宝典.前端成长就这三招 之类,奈何这是篇软文 ~ 看官先别急Command + W,尤其是和我经历类似 做着其它岗位的工作,却多少会接触一些前端 发现有些兴趣,但又不肯定这应该是自己未来 也会有些成就感,但似乎挫折和沮丧来的更多一些 我可以负责任的说,这是一篇有态度的软文 欲语泪先流 我希望做些有用的事情,甚至可以做个有用的人 才毕业工作的第一年我是满足的,学到了很多新知识,写的代码不但能work,还能真的跑在生产环境中 我

前端试题-2016年阿里前端开发工程师笔试题6,7,8题的解法

2016年阿里前端开发工程师笔试题(只有题,没有答案): http://www.cnblogs.com/sdgf/archive/2015/08/18/4740698.html 第6题:请在____处填写答案,从而达到题目的要求 var arr = [1, 2, 3, 4, 5]; var result = arr.sort(_______________________________).join("+"); console.log(result); 解答:在排序当中,如果需要按照某

2015阿里前端工程师在线笔试整理

昨天下午参加了阿里前端的笔试,题目是随机的,但好像越到后面题目越难.建议小伙伴们还是尽早参加. 总体来说,题目不算很难,有时间都是可以做出来的,总共11道题,6道单选,3道填空,两道大题吧.一个小时时间略少,加上我本来想直接在上面敲代码的,然后发现太慢了,所以又改成了sumlime. 单选题有一道问无序列表是什么元素,一紧张的我竟然选了<ol>....考完才反应过来的我心都要碎成渣了 最后,有一道大题没写,一道填空和一道大题没写完.在这篇文章中进行完善吧. 1.找出页面中所有宽度和高度大于40

阿里前端测试题--关于ES6中Promise函数的理解与应用

今天做了阿里前端的见识题目,原题目是这样的 //实现mergePromise函数,把传进去的数组顺序先后执行,//并且把返回的数据先后放到数组data中 const timeout = ms => new Promise((resolve, reject) => {setTimeout(() => {resolve();}, ms);}); const ajax1 = () => timeout(2000).then(() => {console.log('1');retur

阿里前端框架Alice是个不错的选择

BootStrap虽然用户群体广大,其整体风格尽管有不少skin可选,但以国情来看还是不好看. 阿里开源的前端框架,个人觉得还是很不错,Alice处处透着支付宝中界面风格的气息,电商感挺强. 以下内容摘自:http://aliceui.org/docs/rule.html Alice 的样式模块组织方式追求扁平化的方式,分为三个层级: 基础框架(reset + iconfont + 栅格) 通用模块(符合 Alice 规范的样式模块) 页面样式(继承通用模块) 什么是模块化的样式 Alice 对

阿里前端笔试总结

几天前,去参加了阿里游戏的前端实习生笔试.因为基础不太扎实加上第一次没有经验,所以成绩肯定也不理想!不管怎样都好,都已经过去了,想多了也没用,生活,总是要向前看的嘛!所以,就花点时间把这次的题目总结一下,算是对自己的一个提高吧.因为那天没有用手机把笔试题目拍照下来,这些题都是凭借印象记下来的,所以,有些题目记得可能不太准确,题目的序号可能也不一样!好吧.说了一大坨的废话,该进入正题了:“ 1.有一个长度未知的数组a,如果它的长度为0就把数字1添加到数组里面,否则按照先进先出的队列规则让第一个元素

阿里前端一面

阿里一面挂,问学多久了?一年多,就说问些基础知识吧. 如何去除数组中重复的项? 用for循环,新建一个数组,不重复push进去,返回数组 2. 遍历数组除了for循环还有什么方法吗?答了forEach 3. 浏览器出于安全考虑有?(同源策略),不知道为什么电话面试就什么都想不起来,说了个安全策略,我也是服我自己. 4. 登录原理?不知道 5. 让我设计一个页面,选择男或女,搜索出相应项?主要是想问我请求流程之类的吧,不知道她想让我说啥 6. 发送请求有哪些方法?ajax,jquery不知道还有什

经典的阿里前端笔试题

1 请说明下面各种情况的执行结果,并注明产生对应结果的理由. function doSomething() { alert(this); } ① element.onclick = doSomething,点击element元素后. ② element.onclick = function() {doSomething()}, 点击element元素后. ③ 直接执行doSomething(). 参考答案: 1.element:调用执行时直接指向事件元素. 2.window:函数调用中的 thi