写点什么

winter 眼中的前端十年:觉醒、全栈、包袱,未来无不可为

  • 2019-04-24
  • 本文字数:4350 字

    阅读完需:约 14 分钟

winter眼中的前端十年:觉醒、全栈、包袱,未来无不可为

程劭非,网名“winter”,前端社区知名专家,前手机淘宝前端负责人,极客时间《重学前端》专栏作者。先后就职于微软、盛大、阿里巴巴等公司。winter 早年做过嵌入式系统浏览器、电子书和 WebOS 的相关工作,近年致力于移动前端领域研究,提出过 Flexible 布局等先进概念,也产出过 Weex 这样的移动前端开发框架。


00:00 / 00:00
    1.0x
    • 3.0x
    • 2.5x
    • 2.0x
    • 1.5x
    • 1.25x
    • 1.0x
    • 0.75x
    • 0.5x
    网页全屏
    全屏
    00:00

    我的心里种下了一颗种子:坚信做前端这件事情是有前途的。

    我最早接触前端是在大学的时候,我在中国的黑白棋小圈子里面还是很活跃的,一群棋友经常一起下棋。后来我们的论坛里要有展示棋谱的功能,因为我很擅长,所以就很积极地去研究怎么改进。我花了很长的时间才搞清楚几个带 Java 的技术——Java、JavaScript、Java Applet 都是干嘛用的,然后我就发现 JavaScript 的能力比我想象中的要强得多。



    这时候其实我心里就种下了一颗种子:坚信做前端这件事情是有前途的。这个预判主要是发现了技术的潜力,发现市面上产品跟你预判的技术潜力有差别。后来了解得多了,我发现 W3C 所主导的万维网能力无穷,我就变成了 Web 的信徒。在我看来,这种开放性的东西才是人类软件的未来,私有技术终究会逐渐被标准化,而标准化会越来越强大。


    后来我就开始有意识地去参与一些前端的社区、论坛,我其实是一个很会混社区的人,我在社区基本上是如鱼得水,我很会交“技术大牛”的朋友。比如接触月影、周爱民老师,我一点也不害羞。其实大部分社区中看起来高高在上的大牛,他们都是比较 nice 的。

    过去十年,是前端觉醒的十年。

    前端这个行业很年轻,更早时候其实是有前端工作但是没有前端岗位。大家觉得这个东西程序员做也行,设计师做也行。前端工作一直存在,但是没有人认为它是一个独立的工种和岗位,也没有人去发展它的工程体系,更没有人去找它的核心价值。所以如果说过去十年前端是什么样的十年,我认为是觉醒的十年。



    在过去十年中,前端技术的发展大致经历了三个阶段:


    首先是青铜时代,就是 2008 年前后那段时间,前端圈子里流行的是各种特效,比如鼠标跟随、Flash,当时觉得非常炫酷,今天看来有点 low。


    其次是白银时代,大约是 2009 年到 2011 年这段时间。大家的观念开始转变了,从单纯的说我要做一个什么样的效果,开始关注我怎么样做这个效果能够更方便。如果回头来看,jQuery 抓的两个点是很准的:第一点叫做 API 的应用性;第二点叫做浏览器的兼容性。jQuery 以这两点为核心,打造了一套这样的开发框架,白银时代其实就是最终以 jQuery 大获全胜落幕。


    另外就是黄金时代,其实也是我加入手淘的时间点,也是移动前端开始抬头的时间点。这个时候不管是移动前端还是桌面开发前端,都开始进入到了一个正规化阶段,开始关注工程体系,开始关注自身价值,开始关注质量与效率,同时这个时期也是 Node.js 崛起的时期。

    加入手机淘宝,它看起来不像是一个会死的产品。

    我在毕业找工作的时候,就有意识地去看前端岗位,但是因为那个时候前端岗位级别不高、工资跟客户端也有差距,所以我就“曲线救国”,去做浏览器开发。这段经历让我了解了很多的底层知识。另外很有意思的一点,无论第一份工作在微软,还是后来在盛大,我都是阴差阳错跟移动开发结下不解之缘。


    遗憾的是,我在上两个公司做的产品都不算成功,后来我就在想,我一定要找一个成功的产品。找来找去,发现阿里不错——手机淘宝,这个东西听起来就不像是一个会死的产品,后来我就加入手机淘宝,成为了手机淘宝前端负责人,正式进入前端领域。

    前端 Leader 的焦虑感:为什么没了你不行,有了你一定能有什么东西?

    在阿里有几个大的前端团队,我们这些大的前端团队的 Leader,其实内心的焦虑感是很强的——前端作为一个新生职能,怎么才能够像服务端、客户端一样,给团队找到核心价值?如果你的团队只是接需求、做需求,技术再好的人,最后也会变成一个“看摊儿”的人。



    这个里面有一定的必要性,就是说没了你不行;当然还要有一定的充分性,就是有了你就有了什么东西。所以说前端团队其实可以分成两条线,一条是对内的工程上面的一些操作和一些设施的建设,这样能够提升效率,你工程上做得越深越好,结构越合理,你最后的产出就越多,这个是针对必要性的;还有一条线就是充分性,我们做性能、做跟客户端的融合,这些能够给公司带来新的价值。

    工程思想在大公司萌芽,仅靠管理方法吃不开。

    其实相对于大公司来说,社区产生的还是一些工具的思想,工程的思想还是在大公司产生,主要是因为会有一个大型团队协作上的需求倒逼你一定要这么做,而社区其实是通过规则来保证团队协作的。


    靠规则建立协作,太慢,大公司是接受不了的,它一定需要强有力的推动。比如说我们今天用的东西版本太旧,是不是大家要统一升个级?如果我们用纯粹的管理方法,我写一封邮件要求大家都升级,不升级的今年没有奖金,这是管理的思想。但是其实我们工程团队还有更好的办法,干脆就是对你用的旧版本给你提示,甚至强行推荐你在网上下载最新版本。这个工程思想对于前端行业来说意义深远,但其实前端行业在这个上面已经有点太晚了。另外,未来伴随项目复杂性的提升,工程思想一定还会再进化,再去衍生出更多新的想法。

    全栈不是把别人的东西抢过来,而是把自己的东西赋能出去。

    工程之后,还有一块比较重要,就是全栈。其实全栈这个想法也是从社区逐渐渗透到公司里的,一开始大家对全栈的理解是很狭隘的,一些前端同学觉得现在有 Node.js,他们也能写服务端的东西。后来发现出现了不可调和的矛盾,尤其是在阿里这样的公司,服务端这么多年下来有很多很重要的基础设施,你去 Node.js 体系下再发展一遍,一是没有必要,二是没有资源,阿里有很多中间件团队,你不管怎么做,都不可能有他们的深度。


    另外这也是我当时犯的一个很基础的错误:前端本来就缺人,你把前端转成全栈去做服务端的事情,你前端更缺人了。后来发现逐渐有人探索出一条路:全栈不是说把自己的能力堆上去,而是你要把自己强势的东西给它赋能出去,让别人具有全栈的能力。


    我们就开始尝试着在这种类型的业务上面,把前端技术工作交给服务端同学去做。我们提供基础设施、组件、工具,又提供培训。一开始服务端的同学都不太高兴,说你们前端就是想偷懒,后来他们发现不对,这是好事情,以前我只能做一部分,我还得跟前端去做一些联调,现在我自己全都做了:一是业绩上好看,二是省去沟通成本,三是个人能力提升了。服务端同学越来越支持这件事,后来淘宝的中后台业务都转向了这种模式。


    而服务端同学也做了很多 API 平台,提供定制 API 的能力,其他部门不需要找服务端去开发新的接口,只需要少量的服务端同学参与。最后大家发现其实全栈不是把别人的东西抢过来,而是把自己的东西赋能、输出出去。其实在企业里面,不能永远是零和游戏(非合作博弈),但是这种赋能输出,是能够把零和变成正和(双赢)的。

    从前端到”钱“端:我并不把钱当做工作的目标,但是钱从来也没有亏待我。

    圈儿里很多人开玩笑说你们现在都是“钱“端了,因为挣钱多。实际上现在看一个同等水平的前端,他的价格还是略低于服务端的,不过前端最近可以说是涨得快,而且前端胜在竞争少。虽然前端基数大,但是实际上真正懂技术、会写代码的前端非常少。大部分前端就是市场上的前端,基本上是切个图,做一些机械性劳动,对于大企业来讲,是不要那种单纯只会去做机械性劳动的前端的。


    今天我们很多人其实是在尝试把“钱端”的天花板弄得再高一点。其实我更愿意这样看:其实 前端本身不是你的天花板,你的个人能力才是你的天花板。


    今天很多前端同学其实就是关注如何把设计师的设计稿变成一个用代码写出来的样子,那么你对业务的介入是浅的,你也就这样了。其实工程师应该做什么?从工程方面来讲,你怎么样能让更多的团队、更大规模的团队一起去协作?怎么样做出来更大规模的产品?其实还是需要我们把视角转一下——你能够真正以公司利益、以公司业务为导向,去思考你应该做什么,才能真正有晋升机会。


    过去十年对我个人来说,我工作就是两个目标,一个是自我个人成长,一个是自我价值的实现。在这个过程中它必然会产生收入,我并不把钱当做工作的目标,但是钱从来也没有亏待我。我过去的经历都是在大公司,从微软到盛大到阿里,一毕业,拿到的就是差不多国内最好的 offer,后边基本上每换一个工作,工资就涨 50%,工资是其次,说明其实成长是没有耽误的。


    当然 2018 年对我来说会是一个分界线,我希望把目标从自我成长切换到自我价值上来,我要去做教育这件事儿,能不能做成还不知道,但是我愿意去尝试。

    前端未来:没有什么东西是做不了的。

    如果让我来展望前端发展的话,我认为有两个方面不容忽视:


    一是 AI 与前端的结合,智能研发是我非常看好的领域。我们技术圈里有一个比较流行的观点:一切机械劳动最终都是可以被计算机替代的。


    另一个我比较看好的发展领域就是图形学。因为前端相对来说是一个在封装好的环境下去工作的一个代码环境,所以我认为前端未来应该会更下沉,跟图形学有更多的结合。今天我们前端还是有很多东西说我做不了,当你能够去从更底层去做的时候,就没有什么东西是你真正做不了的。我们就不会看到一个 C++ 的程序员说这个东西我做不了,因为理论上讲它可以操作计算机的所有部件,而且能以非常高的性能去做。

    前端很有意思,它充满着工程上面妥协的味道。


    说实话我觉得前端领域今天不完美和不满意的地方太多了。前端很有意思,它充满着工程上面的妥协的味道。你做技术总是希望尽善尽美,希望把每个细节都做到最好,但其实 前端是一个建立在标准之上的工作,标准本身又是工业化之后的一个妥协的产物,所以前端的 API 也好,语言也好,包括今天很流行的一些开源实践项目也好,里面有大量今天去看非常差的设计。



    这些比较遗憾的东西,将来始终会作为一个包袱让我们背负着前进,这是前端的一个无奈。我们为了一些事情去付出这样的代价,但是大家还是会尝试逐步去解决这些陈旧的问题,今天我们已经看到很多旧的问题不是说把旧的改掉,而是设计一些新的东西来逐步替代它,它是一个很漫长的过程。所以有人说前端程序员喜新厌旧,说前端同学追新追的很厉害,新框架基本上隔个 4、5 年就出一个新的工具,所以很多人抱怨学不过来了。


    虽然有很多不完美,但是前端也带来了很多新机遇。怎么说呢,这就是前端了。




    winter 老师还将担任 QCon 北京 2019《前端工程实践》专题的出品人,与大家探讨兼具大厂系统化设施和创业公司新方案的前端实践。部分精彩分享如下:


    • 阿里巴巴:设计生成代码的前端智能研发实践

    • 腾讯:基于 Service Worker 的高效灵活离线化工程之路

    • 百度:打造通用 MIS 平台,彻底释放前后端人力

    • 美团点评:Electron 在企业 IM 前端工程实践

    • Vue Technology LLC:AST 与前端框架的工程化



    点击链接了解 QCon 十周年特别策划。大会报名倒计时,有任何问题欢迎联系票务小姐姐 Ring,电话:13269076283,微信:qcon-0410



    2019-04-24 11:4810602
    用户头像
    二叉树视频 InfoQ旗下短视频品牌

    发布了 98 篇内容, 共 32.2 次阅读, 收获喜欢 185 次。

    关注

    评论 1 条评论

    发布
    用户头像
    学无止境
    2019-04-24 13:53
    回复
    没有更多了
    发现更多内容

    GaussDB(DWS)如何实现实时,批量和交付式查询一站式开发

    乌龟哥哥

    10月月更

    Sonatype Nexus 管理员初始密码

    HoneyMoose

    群晖(Synology)NAS 安装 MongoDB

    HoneyMoose

    【资损】资损防控的系统规范-渠道网关类设计

    小明Java问道之路

    架构 安全 金融 10月月更 资损

    加密标准中DES与AES到底是什么?两者有啥区别?

    wljslmz

    信息安全 加密 AES 10月月更 DES

    “程”风破浪的开发者|代码规范

    over℡

    学习方法 “程”风破浪的开发者

    【设计模式】Java 语言不同的编程范式-第1章

    跟着飞哥学编程

    设计模式 编程范式 java 编程 10月月更

    微信小程序云开发收费调整,大家怎么看?

    江拥羡橙

    微信小程序 云开发 10月月更

    CentOS 上安装 Sonatype Nexus 仓库

    HoneyMoose

    feign client客户端的自动装配

    急需上岸的小谢

    10月月更

    RxJava的操作符

    急需上岸的小谢

    10月月更

    详解CAN总线:CAN总线故障界定与管理

    不脱发的程序猿

    汽车电子 CAN总线 CAN总线故障界定 CAN错误故障诊断

    SAP | 内部表的表类型

    暮春零贰

    SAP 10月月更 内部表

    过去几个月,他们把数字化融进了中国经济的毛细血管

    脑极体

    Git 操作命令笔记

    宇宙之一粟

    git 10月月更

    智能化运维场景分析

    阿泽🧸

    10月月更 智能化运维

    2022-10-20:以下go语言代码输出什么?A:7;B:7.0;C:0;D:编译错误。 package main import ( “fmt“ ) func main() { const

    福大大架构师每日一题

    golang 福大大 选择题

    golang中的切片

    六月的

    Go slice

    “程”风破浪的开发者|如何更好的学习专业知识

    闫同学

    学习方法 10月月更 “程”风破浪的开发者

    数据开发也能双轮驱动?

    乌龟哥哥

    10月月更

    Feign的两个调用处理器

    急需上岸的小谢

    10月月更

    “程”风破浪的开发者|Web3.0是什么?带你解析Web3.0

    梦笔生花

    Web3.0 “程”风破浪的开发者 Web2.0

    Vue组件入门(十一)$attrs

    Augus

    Vue 3 10月月更

    el-table表格还可以这么玩

    江拥羡橙

    Vue 3 Element UI 10月月更

    Glibc-scratch_buffer的源码分析

    桑榆

    源码刨析 10月月更 C++

    Spring Batch 中的 chunk

    HoneyMoose

    PHP出发(php+apache+MySQL)

    江拥羡橙

    php MySQL apache 社区 10月月更

    【愚公系列】2022年10月 Go教学课程 035-接口和继承和转换与空接口

    愚公搬代码

    10月月更

    数据湖(六):Hudi与Flink整合

    Lansonli

    10月月更 Hudi与Flink整合

    YARN基本架构

    穿过生命散发芬芳

    YARN 10月月更

    【一Go到底】第二十一天---defer

    指剑

    Go golang 10月月更

    winter眼中的前端十年:觉醒、全栈、包袱,未来无不可为_语言 & 开发_二叉树视频_InfoQ精选文章