大家好,我是风月,2014年二进宫进入阿里,目前是业务平台体验技术数据服务前端团队负责人,负责 BizCharts 横向建设以及财鲸数据业务支撑。本次分享我将回顾作为业务前端从前端工程转型到数据可视化过程中的心路历程。
前端工程师的修炼没有捷径,踏踏实实的通过一个个项目的实践来升级打怪实现进阶;本文仅分享自己11年的前端生涯,探讨一直在业务中的技术人的成长之路,也复盘再认识下自己,每个节点我遇到的问题和我的选择,过程中聊聊走过的弯路希望能让大家少走弯路就达到我的目的了,不说教,不带货。
在我十一年的职业生涯中,以一个阿里的BU为单位,从推动解决业务问题的角度,我基于自己有限的观察总结了需要修炼的6个层次仅供大家参考。
第1层是个人专业技术能力的修炼:
第2层是人际沟通能力的修炼:
第3层是组建团队&架构能力:
第4层跨职能协作能力:
第5层组织发展能力:
第6层战略眼光:
2009年,我从浙江中医药大学计算机专业毕业,和CS强势专业的大学还是存在差距的,学长学姐也没有给出参考模版,一番分析后,不认命的我还是决定继续走前端工程师路线,一开始就很有自知之明,不怕从小公司做起。我大一就开始抓紧机会在计算机学院的创业园里开发学院网站以及大四全年出去实习来积累研发实战经验。幸运的是,几经周折如愿以偿P4入职阿里做前端,可能面试官看中我的不放弃,能否活下来靠自己了。
2009-2011年是我的第一份正式的工作,这阶段我主要负责阿里妈妈淘宝客的前端开发工作,主要技术栈是类库YUI,让我学会了模块化开发的前端工程思维。当时同团队的师兄们已经在实践应用backbone,尝试开发单页,还有一个骨灰级的大神 @李牧 在团队中坐镇,相对而言,对我这个菜鸟来说,09年就接触到了前端届的MVC,学习机会很多,技术氛围也不错;
2011年,本该珍惜来之不易工作机会的我,却因一点小插曲(毕业不久怀孕生娃拿了阿里职业生涯中的1)作出了看其他机会的冲动想法,同时被外部的创业公司以薪资double和技术TL岗所吸引,就这样离开了阿里。创业这一年日日生存在生死线上,资金紧张、融资失败、1小时裁员、互相鼓励、迷茫、解散,从激情满满入职到失望离开,至今历历在目。创业这一年学到的不是技术精进,而是血泪教训,意识到我正在偏离前端技术专家这条主航道,过早被眼前的薪资和TL岗位所吸引,忽视了欲速则不达的道理,我真正需要的是一个稳定长期发展的工作机会,不能短视到只看眼前利益。
2011-2012年,这阶段我的技术栈是seajs、jquery,关键词是模块加载、类库、轻量、ftp上传部署;
2012年,我顺利入职了腾讯(杭州),负责应用宝PC端的Web前端开发,两年后作为预备Web前端TL参加了潜龙培训,一切都在往好的方向进行中。但是,2014年初腾讯杭州分部突然被通知要求将应用宝PC端的业务从杭州迁移回深圳总部,杭州研发人员要么选择base深圳,要么在杭州从头再次孵化新业务,且此时腾讯总部也在大面积的收缩业务,从自研转变为投资合作伙伴。作为杭州土著家庭的我,要想继续我的技术专家路线,只能选择离开,找到一个真正足够大的互联网平台,能够支撑我长期发展。
2012-2014年,这阶段我的技术栈是Angular,MVVM、单页、shadow dom、框架、编译、CDN、动静分离等关键词;
痛定思痛,2014年04月28日,选择在生日这一天二进宫阿里,代表我的新生,从看似光鲜的TL岗重新回到一线开发工作,且暗暗下决心,这一次绝不会主动离开阿里,也不转岗,坚持到底活下来。此时二进宫的我已经工作五年,现在想起来特别感谢这一年没有层级和年龄的限制,让我这个浪子可以有机会回头。考虑离开阿里的同学一定慎重思考未来二进宫阿里是否还有机会,千万不要草率作出决定,可以参考我的血泪史。
2015-~,这个阶段我一路写过全栈node、移动端zepto、React,阿里统一以React作为底层技术栈,内部紧密共建React生态,toB研发模式逐渐形成,D2C(design to code)、webIDE、搭建发展如火如荼,数据可视化也正式被阿里加入前端招聘细分子方向,影响着前端从业人员努力的方向,并且不少阿里优秀的库对外开源回馈社区。这个阶段是最百花齐放的时刻,也是无形中在推动你成长,不要忽视环境的力量;
11年里前端技术栈发生着剧烈的变化,前端的职能边界一直在延伸。阿里非常鼓励我们在技术产品化上有更多的尝试,在阿里已有的平台上,独立从前至后完成一个专业的产品完全不是问题,就看你是否限制了自己,当然牺牲业余时间学习不可避免,我自己想的很清楚我会得到什么,失去什么,未来自己把控。
感悟:功利心是大忌,长远职业生涯考虑,发展才是硬道理,面包会有的
冲动是魔鬼,工程师在打怪升级的过程中,会遇到非常多的“意外”面临选择,比如失恋、迷茫、怕累、家庭、没信心、与主管意见不合、晋升失败、被打3.25、创业吸引、薪资吸引等等原因,无可厚非。但我更想说的是,想清楚自己真正想要的是什么?如果确定是技术专家路线,那就有自己的坚持,职场上的玻璃心基本上不适合长期发展,大概率“出局“。尤其是像阿里这样的高速发展的互联网公司,外部环境的剧烈变化必然引起内部的变化,一线的开发要有感知,但一般影响没那么大,专注做好自己的本职工作更重要;
正视3.25,从我个人了解的,大部分有三种情况。第一种是与该层级要求的能力有距离,如刚入职的新人不适应新环境,或者刚晋升到新层级的老人处在迷茫期;第二种是工作方式出现问题,如只会埋头苦干纯执行没有自己的深入思考;第三种是因身体原因,如生病修养一段时间,或孕期需要更多休息等特殊情况;前两种情况都可以通过努力来解决。3.25只是代表当前这个阶段,并不代表一年后两年后的你,成长需要看的更长远。至少我认识的发展不错的同事大部分都有被打3.25的经历,包括我自己,第二年逆袭3.75和晋升的大有人在,也包括我自己;更关键的是,主管的理由是不是更多关注在你的成长上,有没有看到自己的成长。
2016年初,感谢主管 @梓骞 信任我,让我承担商家业务的前端TL,此时此刻的我,一方面要熟悉新接手的业务,一方面要修炼组建团队的能力,同时承担PM的工作。这一年下来,业务做起来了,团队建起来了,而我自己的发展呢?精力被分配,代码量少了,编程能力生疏了,开始迷茫,技术TL到底该不该写代码?是否只有我并发能力不行?只有我不适合当前端工程师?
我甚至主动的约我的主管 @梓骞 探讨我转型PD的可行性,认真的讲我对自己优劣势的分析。主管没表态,告诉我迷茫是好事,说明我在思考,对于我的想法不拒绝也不肯定,只是让我自己去尝试后再做决定,但前提是不能影响当前的本职工作,且明确的告知我技术TL必须写代码,而且是核心的代码,无论有多忙,都要保持住技术敏感度,熟悉当前的研发体系,对研发痛点有体感,再结合业务痛点才能作出更正确的判断和技术决策,否则面临的就是职业生涯的天花板甚至被阿里淘汰。
经过主管一番的指点迷津,了解到技术TL参与研发的目标后,我开始思考怎么选择项目来确保ROI,做好时间管理,而不是事事参与后精疲力竭还拿不到结果。此刻再回到业务本身的痛点,贴着业务打是最稳妥的方式,大数据客户运营平台最大的痛点就是可视分析的高效表达,且鉴于之前在ARMS监控平台中积累的图表开发经验,我发现自己对数据分析场景下的数据可视化有浓厚的兴趣,可以先从这里入手深入了解一下体系。短短几个月的探索,奠定了我后来几年为之奋斗的细分技术领域方向-数据可视化。
感悟:在业务痛点中发现机会,方向对了就不怕远,坚持就是胜利
现在回想,职业生涯中出现迷茫不可避免,是很常见的事情,主动找主管沟通是很明智的选择,可以更快走出迷茫期,避免陷入误区作出不成熟的决定。比如在TL初期很多同学都会遇到是否坚持写代码的疑惑,时间管理的疑惑,专业发展的疑惑。
在入行之前,我和大家一样以为只是简单的使用图表库,会API调用,能渲染出来折柱饼就行,实际上数据可视化这个方向别有洞天:
同学看到这里,不禁又问?那前端工程能力是不是没有要求,我只会做渲染实现绚丽的大屏?又是一个大大的误区,前端工程永远是Base能力,没有这个基础,基本可以不谈其他的,因为阿里的业务是一个大工程,而受限于你的技术栈不全,你能发挥实力的业务少之又少,谈何独当一面?因此大部分新人入职后,都会优先开始工程能力的训练,存活下来是第一要事。我自身能够顺利转型到数据可视化领域,也是依赖之前积累的工程基础;
感悟:机会总是给有准备的人,保持热情,坚持(死扛)领域深耕
我自己的经历是,刚开始是2017年初从商家业务的痛点入手,先重点做统计图,在作出bizcharts的原型并且应用到业务中后,和AntV建立深度的合作,基于G2沉淀出BizCharts赋能给集团,后又开源反哺给社会,这个过程中也深度参与前端委员会数据可视化小组,希望能贡献自己的一份力量。过程中牺牲了很多我自己的业余时间,比如参与答疑、参与文档优化和demo编写,确实很辛苦,但是我自己乐此不疲,因为过程中我了解到很多用户的真实诉求还有真实的业务用例,这对于我判断bizcharts的发展是很有帮助的,也逐渐清晰下一步应该怎么做。
后随着自己对数据可视化的理解加深,自己能Cover的业务机会也越来越多,2018年开始组建专业的数据可视化团队支撑业务平台的数据服务和大财鲸业务(阿里大财务中台),现在重点投入精力做财务行业领域的可视分析系统和ToB企业级工程解决方案。会一直深耕下去,踏踏实实的,一步一个脚印,稳扎稳打,一起加油。
感悟:不惧怕失败,深耕绝不是一蹴而就,不积跬步,无以至千里
之前有同学问我:为什么我选的是数据可视化这个细分方向?理由如下:
过程中我也是从一次次的业务中实践和摸索,在我看不清的地方,就跨出去先试试水,没有人一开始就知道所有,围绕着数据领域的业务一步步的做,一点点的积累,前期还看不到自己的成长,但是在坚持两年后,突然有一天发现自己有系统性的观点,可以和 @宁朗 @御术 等数据可视化领域的前辈,在一起平等探讨业务发展问题和技术建设的问题了,其实就是日积月累的经验让我从量变到质变了,一万个小时的定律至少在我这里是准的,失败并不可怕,可怕的是还没开始就放弃了;
我的主管 @梓骞 经常会讲,阿里很多小二比我们聪明,却还比我们更努力,我们还有什么借口说是天赋的问题。虽然聪明人很多,但不缺有想法的,更缺的是实实在在落地做实事的;内网ATA有很多非常高质量的前辈体系化的经验总结,非常宝贵,能够扩大技术视野,非常适合在碎片的时间里充电。
心态要摆正,成长是自己的事,职场那么长,长达三十年,为什么我要跟面子过不去,老拿自己去和身边的同学比,非要去死磕层级,累不累?坚定我当前做的事是不是一件正确的事情,是不是解决了业务痛点,在当下,我的核心竞争力是什么?成长真要有什么灵丹妙药的话,可能是我的主管 @梓骞 一直以来的思维方式是怎么通过技术产品化等工作,提升团队的运转效率,那就可以做更多新的事情,自然而然的就成长了,这个思维方式对我影响很深,至少经过目前为止的验证还是成立的!一年可能看不到成果,需要三年~五年;
在经历千辛万苦之后,我幸运的晋升到了P8,你以为终于可以松一口气好好休息一下,其实是不存在的,因为你面临的是新层级的期望和要求,讲人话就是距离3.25很近甚至淘汰。说好的不可替代呢?真相是在工程世界里没有银弹,也就是不存在不可替代性的人,连马爸爸离开阿里,阿里也能正常运转。但技术领域研究越深入,权威度越高,替代成本就越高,一定程度上可以形成核心竞争力。阿里的舞台很大,身边的学习对象很多,立志做一个懂商业的数据可视化专业人士,打深、打穿、打透,新的征程,重新出发,努力踏上数据可视化领域的新阶梯。
作者 | 风月
本文为阿里云原创内容,未经允许不得转载。
文章浏览阅读3.4k次,点赞8次,收藏42次。一、什么是内部类?or 内部类的概念内部类是定义在另一个类中的类;下面类TestB是类TestA的内部类。即内部类对象引用了实例化该内部对象的外围类对象。public class TestA{ class TestB {}}二、 为什么需要内部类?or 内部类有什么作用?1、 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。2、内部类可以对同一个包中的其他类隐藏起来。3、 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。三、 内部类的分类成员内部_成员内部类和局部内部类的区别
文章浏览阅读118次。分布式系统要求拆分分布式思想的实质搭配要求分布式系统要求按照某些特定的规则将项目进行拆分。如果将一个项目的所有模板功能都写到一起,当某个模块出现问题时将直接导致整个服务器出现问题。拆分按照业务拆分为不同的服务器,有效的降低系统架构的耦合性在业务拆分的基础上可按照代码层级进行拆分(view、controller、service、pojo)分布式思想的实质分布式思想的实质是为了系统的..._分布式系统运维工具
文章浏览阅读174次。1.数据源准备2.数据处理step1:数据表处理应用函数:①VLOOKUP函数; ② CONCATENATE函数终表:step2:数据透视表统计分析(1) 透视表汇总不同渠道用户数, 金额(2)透视表汇总不同日期购买用户数,金额(3)透视表汇总不同用户购买订单数,金额step3:讲第二步结果可视化, 比如, 柱形图(1)不同渠道用户数, 金额(2)不同日期..._exce l趋势分析数据量
文章浏览阅读3.3k次。堡垒机可以为企业实现服务器、网络设备、数据库、安全设备等的集中管控和安全可靠运行,帮助IT运维人员提高工作效率。通俗来说,就是用来控制哪些人可以登录哪些资产(事先防范和事中控制),以及录像记录登录资产后做了什么事情(事后溯源)。由于堡垒机内部保存着企业所有的设备资产和权限关系,是企业内部信息安全的重要一环。但目前出现的以下问题产生了很大安全隐患:密码设置过于简单,容易被暴力破解;为方便记忆,设置统一的密码,一旦单点被破,极易引发全面危机。在单一的静态密码验证机制下,登录密码是堡垒机安全的唯一_horizon宁盾双因素配置
文章浏览阅读7.7k次,点赞4次,收藏16次。Chrome作为一款挺不错的浏览器,其有着诸多的优良特性,并且支持跨平台。其支持(Windows、Linux、Mac OS X、BSD、Android),在绝大多数情况下,其的安装都很简单,但有时会由于网络原因,无法安装,所以在这里总结下Chrome的安装。Windows下的安装:在线安装:离线安装:Linux下的安装:在线安装:离线安装:..._chrome linux debian离线安装依赖
文章浏览阅读153次。中国发达城市榜单每天都在刷新,但无非是北上广轮流坐庄。北京拥有最顶尖的文化资源,上海是“摩登”的国际化大都市,广州是活力四射的千年商都。GDP和发展潜力是衡量城市的数字指...
文章浏览阅读3.3k次。前言spark在java使用比较少,多是scala的用法,我这里介绍一下我在项目中使用的代码配置详细算法的使用请点击我主页列表查看版本jar版本说明spark3.0.1scala2.12这个版本注意和spark版本对应,只是为了引jar包springboot版本2.3.2.RELEASEmaven<!-- spark --> <dependency> <gro_使用java调用spark注册进去的程序
文章浏览阅读4.8k次。汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用,代码精简高效,大厂出品有量产保证。:139800617636213023darcy169_uds协议栈 源代码
文章浏览阅读4.6k次,点赞20次,收藏148次。AUTOSAR基础篇之OS(下)前言首先,请问大家几个小小的问题,你清楚:你知道多核OS在什么场景下使用吗?多核系统OS又是如何协同启动或者关闭的呢?AUTOSAR OS存在哪些功能安全等方面的要求呢?多核OS之间的启动关闭与单核相比又存在哪些异同呢?。。。。。。今天,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JCXrdI0k-1636287756923)(https://gite_autosar 定义了 5 种多核支持类型
文章浏览阅读2.2k次,点赞6次,收藏14次。原因:自己写的头文件没有被加入到方案的包含目录中去,无法被检索到,也就无法打开。将自己写的头文件都放入header files。然后在VS界面上,右键方案名,点击属性。将自己头文件夹的目录添加进去。_vs2013打不开自己定义的头文件
文章浏览阅读3.3w次,点赞80次,收藏342次。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。当数据量很大时,count 的数量的指定可能会不起作用,Redis 会自动调整每次的遍历数目。_redis命令
文章浏览阅读449次,点赞3次,收藏3次。URP的设计目标是在保持高性能的同时,提供更多的渲染功能和自定义选项。与普通项目相比,会多出Presets文件夹,里面包含着一些设置,包括本色,声音,法线,贴图等设置。全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,主光源和附加光源在一次Pass中可以一起着色。URP:全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,一次Pass可以计算多个光源。可编程渲染管线:渲染策略是可以供程序员定制的,可以定制的有:光照计算和光源,深度测试,摄像机光照烘焙,后期处理策略等等。_urp渲染管线