一个程序员的成长之路 - 剖析别人,总结自己

3,587 阅读23分钟
原文链接: mp.weixin.qq.com

张云龙- 全民直播-CTO

张云龙老师于2018年5月19日在「FDCON2018中国前端开发者千人峰会」上的发言。作为走在前端工程化前列,现任全民直播CTO的张云龙老师,分享了他的个人成长之路,希望能够在前端职业规划上,给大家一些参考和启发。

张云龙:大家好,我是云龙,从2016年3月份开始,我参与到全民直播这个创业项目中,这两年一直在上海。关于我自己的成长历程,一直都很想找个时间跟前端的开发者们分享一下。通过剖析别人,也可以总结自己。我很害怕把这个主题讲的跟成功学一样,其实CTO这个职位现在多少有点“烂大街”,不算是什么成功,仅供参考。

我是2010年毕业的,刚毕业即加入百度,当年我毕业的时候同一批入职的人后来成立一个微信群,那个群在8年后的今天,我们还会一起扯皮闲聊,分享彼此的际遇。我发现它可以作为参考 —— 8年前一群有着相同能力,相同起点的人,在8年之间因为做出不同的选择,最后达成了不同的人生。有的创业,有的在大公司做高管,有的炒比特币财富自由。参考他们的选择会让你有一些感悟: “如果当初我选择了那样,我现在会怎么样”。我现在经历了职业生涯8年的时间,也想把自己的经历作为一个案例,分享给大家。

在讲之前,先问一下在座的同学工作3年以下的举手。。。。emmm,剩下的都是三年以上的咯?我看了一下,比例差不多一半一半。

我面试过许多前端工程师,发现大家在工作了3-4年的时候会遇到一个迷茫期,我问他们你们接下来想做什么,大多数人回答说想做一个开源项目,并且推广开来,成为前端“网红”,更长远的职业发展规划往往考虑的很少。

今天,我希望把自己的工作经历完全拆解开呈现在大家面前,作为一个案例解答有关职业发展的困扰。

第一章: 程序员的中年危机。

我今年33岁,虽然有技术傍身,但是难免会有一些焦虑,这种焦虑来自对自己的能力质疑。在大公司的那些年,背靠大平台,做出的成绩80%是平台赋予我的,它有健全的体系,有优秀的同事,有完善的职级制度,还有优厚的薪资待遇。你在这样舒适的环境下做那么一小块事情,如果有一天你发现你这20%可以被替代的时候,这家公司会怎么思考?你有很多股票,开很高的工资,对于公司来说,你的成本很高,在新人的推动下,你会产生一种可被替代的压力,我大概在28岁,29岁技术水平还在上升期的时候就有这种焦虑。

在大公司那些年,我感觉自己还像一个没毕业的学生,始终没有脱离“学生气”,无论说话做事都有这种感觉。其次技术的更新迭代速度特别快,尤其是前端领域,你会发现很少有能真正沉淀下来的东西。第三个焦虑点就是关于企业如何对待35岁以上员工,我当时在百度的时候团队有一个非常厉害的工程师,他在2010年技术职级很高,但技术思维还停留在上一个时代,随着技术的发展,渐渐不能指引团队进步,那个过程比较艰难,对我触动很大。最后一点,就是随着年龄的增长,选择的成本会越来越高,你会有家庭,即便公司觉得你没有价值,你也不能走了,走不动了。这些触动了我,开始要去思考。

我们做技术,尤其是前端,很多时候我们做出的产品,看到的都是UI设计,交互设计 ,产品设计,即便我们做的产品非常成功,成功点在哪儿?可能是UI设计得漂亮,也可能是推荐算法精确,而前端的产出给产品带来了什么?还有前端技术深要深到什么程度?做久了技术就必须要转型管理吗?这些问题我当年没有答案,我可以坚持不懈得写页面,但是这个事情做5年,6年,10年不还是一样吗?现在我能做什么?未来我想做什么?

带着这些疑问,用8年时间我走了3个城市,从北京、到广州,在到上海,在职业道路上寻求答案。

最开始的3年我在北京,那个时候刚毕业,还不能决定自己的未来,加入百度算是比较运气。当时花了些精力准备一份漂亮的简历,这件事对我找工作帮助很大。在学校的时候,基本上对前端这块已经非常熟悉了,我的简历非常漂亮。最开始刚毕业的时候选择工作,简历会成为一个好门面。我把当时自己在前端的方向、学习深入的点,都花精力体现在简历上,当时在大公司招聘的时候已经占了一些优势,很荣幸的是被百度接收了。

在百度三年时间里面,主要深入的在做技术。当时百度有一个很大的前端团队,一百多人,包括百度新闻,百度视频,百度知道,百度百科等等,整个团队为了解决开发效率问题,决定成立一个横向支撑的小组,做一款构建工具,就是fis,我当时还在CMS部门(一个内部的内容管理系统),主动提出参与到fis项目中。做fis的过程让我学到了很多服务端技术,包括运维知识。在百度工作3年后,开始想着开始去脱离这个平台80%的支撑,我当时认为UC是一个中型的创业公司,我过去待了两年多,那个时候开始关注前端团队建设。把我在百度学习到的技术理念在UC结合nodejs重新实践一遍,其次是指导前端团队提高他们整体的技术水平。

在广州UC工作2年后,来到了上海,参与全民直播这个项目。做全民直播的整个过程经历了比较多的坎坷,我最开始接手全民的时候,仅有两个全民自己招聘的研发同学,经过2年多的时间,组建了将近一百人的团队,包括服务端,前端,客户端,测试,运维,编解码,大数据等部门,感觉在上海这两年的成长,比前面在大公司所有5年的加起来还多。

过去走过了一个这样的路线: 大型公司→中型公司→创业公司。专注的事情从技术到团队再到业务。今天我重点跟大家分享我总结的成长历程,当你后面工作到一定年限,碰到困惑的时候,可以拿这个模型参考一下,也算是一个方向。当然,这不是唯一的成长路线。

我把整个职业生涯分三个阶段:

第一阶段,一技之长。就是深耕你的专业技能,你的专业技术。

第二阶段,独立做事。当你的一技之长达到一定深度的时候,需要开始思考如何独立做事。

第三阶段,拥有事业。选择一份使命,带领团队实现它。

大致是这样的三个阶段,接下来我逐一拆解一下:

第一阶段:一技之长。

我把它分成五个层次:栈内技术、栈外技术、工程经验、带人做事、业界发声。

所谓栈内技术,是指你的专业领域技术,对于前端工程师来说,就是那些我们熟悉的JS、CSS、HTML等基础,深入了解我们的程序所运行的宿主环境——浏览器,能掌握并灵活操纵在浏览器内发生的一切。前端没有秘密,所有可访问的页面都近似于开源,所以检验栈内技术的标准就是看你是否能最终形成技术上的“写轮眼”——那种看到任何前端产品都有能独立复刻和洞察它的自信。

栈内技术是安身立命的根本,不要轻易“换方向”。

虽然我现在在做技术管理,但始终不会放弃我作为前端这个一技之长的根本。遇到一些前端同学工作几年以后前端做得比较熟了,考虑转行到其他岗位。但是我想说,当你转行那一刻起,就把要转的领域变成了你新的“栈内技术”,然后又要重新走一遍技术沉淀的过程,匆匆几年,又过去了,所以不要轻易“换方向”,前端绝对是可以长时间坚持的领域,现在新型的软件生态,无论是小程序,快应用,甚至区块链,都会首先瞄准JS开发者,因为有庞大的开发者群体,工具链也比较完善,所以长期坚持从事前端工作,在可预见的未来都不会“过时”。

栈外技术,是指栈内技术的上下游,领域外的相关专业知识,包括但不限于服务端技术、运维、CDN、测试,甚至UI设计、产品设计等等,扩展你栈内技术的周围领域,充分理解你的工作在整个技术研发体系中处于怎样的环节。工作之余多投入一份精力,把其他栈外技术不断纳入到你的知识体系中来,建立栈外能力。前端想要做的深入,往往会涉及到缓存、模板渲染、用户体验等知识,没有相当的栈外技术积累,你很难为自己的团队争取到足够的话语权。

我个人非常推崇“大前端”的概念,有点类似“全栈工程师”,但不是要求一个人全面专家,而是以前端为根,展开上下游的栈外技术学习,一专多能。我能在全民做到CTO的角色,也得益于早年在百度和UC积累的栈外技术经验,了解两家公司大部分产品线的运维和架构体系。

第三,工程经验。是指建设专业技术体系的“解决方案”,通俗的说,就是做事的“套路”,掌握从0到1,1到60,甚至60到100分阶段建设专业技术体系的过程。工程经验涉及到技术选型、架构设计、性能优化,CI/CD,日志监控、系统测试等,这些是跟工程相关的方法论。

很多的工程师没有总结自己工程经验的能力,我面试经常会问,你们觉得自己工作了两年、三年、四年和刚毕业的学生有什么差别?面试者说掌握了某某技术,但其实往往说的只是一些知识点。那些“今晚查完明天就会了的”不叫技术。决定你比别人更有专业价值的,其实是领域工程经验。你看过再多的文章也没有用,没真正实操过都不能称之为“掌握”。所以我建议要想掌握足够丰富的工程经验,需要在业务中多争取实践的机会。

工程经验才是技术水平的分水岭。

第四,带人做事。之前三项都是个人专业技能方面的深度要求,带人做事是对团队协作能力的要求。我以前非常不理解一件事情,就是我自己明明做的很好,来了一个新人不能get到我的要求,怎么办?非常着急的时候,我说你别做了,我来吧。更有甚者,早年间在百度工作的时候,有同事白天辛辛苦苦写好的代码,晚上我code review之后直接给重构掉了,没过几天那位同学就提了离职。带人做事,是把自己擅长的事情,良好的习惯传递给他人,实现1+1>2的生产力提升,让整个团队的产出高于自己。另外,这个阶段大家要特别注意『管』与『带』的区别。所谓『管』是"我不懂某个领域,但我知道你懂,你必须给我做好",而『带』则是"我特别懂这个领域,我知道你不懂,我要教你做得更好"。有点授之以渔,甘当人梯,成就他人的意味。带好一个人或者带起一支有战斗力的团队,是做人做事成熟的表现。

对技术有洁癖的人,往往缺乏耐心,带人容易走极端,如何引导新人成长,激发他人的能力,也是我在职业发展过程中要寻求的问题。管理上有一个特别好的方法,就是善于启发式的提问。提问的深度特别能体现一个人的能力水平,任何用于提要求的陈述句,都能转换成疑问句,在启发萌新的过程中植入对结果的约束。举一个例子,我想要老板给我加薪,如果直接说:『老板,我要加薪』,估计十之八九会被搪塞过去,但是转换一下,先问问『老板,我最近工作怎么样?』启发上司思考你的工作成果,引导他得出你应该被嘉奖的结论,或许是个不错的话术。当你让一个人做A的时候,他提出了方案B。你不要强行扭转对方的思路提出A,因为对于新人来讲,或许确实不能一步到位理解A方案,在他的能力约束下,只能想到B。你带人呢,要尽量尝试把A和B之间有差异的地方转换成提问,你问他遇到这个问题怎么解决,遇到那个问题怎么解决,一直问到形成A,他会带着思考去做事情。如果没有这个过程,没有让他思维演化的过程,虽然他收到了A的指令,但是他不理解,他会用别的方式做出来,最后得出来一个C,然后你又重构一遍,陷入一个怪圈不能自拔,这就是我以前的误区,所以我现在特别注重提问的艺术。

第五,业界发声。如果你前面做的非常好,基本上到了可以对外发声的程度。把自己的工作经验总结对外发布,与他人交流,碰撞思想,看到更高的山峰,然后修正自己的想法,日臻完善,是能走得更远的一种方式。有的时候真的要把自己的思想放到业界的层面验证它,自嗨有毒,大家好才是真的好。如果别人不认可你的这套思路,你的想法,基本上你也可以判定为自己没有达到一个更高的水平。不过通过业界发声获得认可,往往需要机会,可遇不可求,得之我幸,失之我命,这也和你所在的公司平台有关。在我技术声誉成长最快的地方就是在百度那几年,刚好一个大平台,做出一点成绩,但是小型创业公司出来分享,基本上没有人理你。

永远不要放弃一技之长,没有所谓的转行或者转型,永远坚持你最初的领域,扩充你的外延,最终达成比较全面的能力,所以一技之长是值得你长期信仰的。

第二阶段:独立做事。

独立做事也有几个层次:

独立Coding:给你一个目标自己做完,不让别人给你擦屁股就可以了。

独立带人:要注重提问的水平,帮助他演进他的想法。

独立带团队:进入到这个阶段,要关注的更多,整个团队的氛围、工作效率,运用你一技之长的工程经验带领团队高效优质的产出成果,实现1+1>2。

独立做业务:团队稳定之后,开始关注所做的业务,行业的发展,理解你的用户,他们是谁,他们在哪,他们为什么使用你的产品,为团队指引下一步的产研方向。

独立生存:独立做事的最高水平,就是能带领一群人养活自己,独立生存下来。互联网的商业模型只有有限的那么几种,深谙其中的玩法,寻找擅长的合适的模型养活一群小伙伴,意味着一次更大的蜕变。

独立做事每个阶段,都是一次比较大的跨越,需要思想和多种软素质发生较大的变化,抛开技术人的身份不讲,独立做事的几个阶段,也是一个人逐渐成熟的过程,这是我过去2年多以来一直探求的结果。

前面讲到中年危机,在我看来,独立做事的最后一个阶段,独立生存,就是解决中年危机的终极答案。

审视我自己,基本上一技之长已经达成,在业内也有一定的影响力。独立生存还在学习中。职业生涯最后一段,是拥有事业,这部分对我来说也是云里雾里,只能隐约看到,在这个阶段,你已经有团队,能独立生存了,接下来需要寻找到一份团队使命,如果今天我说,我想去做一个最赚钱的直播,估计台下很多人觉得没有人愿意跟我去做的,但是如果我说我想做年轻人最爱看的直播,也许很多人心动,这就是使命感的力量。使命可以凝聚人才,使命背后还需要有完善的商业模式。阿里巴巴的企业使命是『让天下没有难做的生意』,他们始终坚守这个企业使命,一开始做了阿里巴巴,又做了淘宝,发现跟用户沟通又做了旺旺,后来发现交易需要解决付钱的问题,又做了支付宝,后来又有了物流,所有大的战略方向无不围绕着自己的企业使命。

以上就是我的个人成长模型,用五年的时间做一技之长,三年的时间独立做事,最后具体什么时候拥有事业,目前看来还是未知。

以上模型分享给大家做一个参考,但是走什么样的路,取决于你想成为什么样的人。

后面还有一些问题,我猜今天来,可能会很多人关心这些,我自己这几年带着问题走过很多城市,做过很多事情,那些曾经困扰我的问题也都慢慢得到解答。

前端入门应该学些什么?现在前端领域知识很庞杂,各种框架林林总总,对于前端来说,是最好的时代,但是对于新人来说,也是最差的时代,不知道入门该从哪里入手。我特别推荐的就是谷歌的DevTools文档,https://developer.chrome.com/devtools (需要翻墙),它囊括了很多前端基础知识,通过学习开发者工具,同时触达前端基础知识,浏览器运行原理,以及提升开发、调试效率,是一个比较好的入门捷径,有可以夯实基础。

第二个事情是CTO平时都做些什么?一个是招聘,招聘面试是我平时要做的事情,我们有专门的HR团队,我会把我的帐号给人事的同学去登录,勾搭别人,有一些专业的高端人才,我会一直保持联系,寸志老师就是这样被我勾搭过来的(:逃。其次就是考虑技术团队的组织架构,我要参照曾经的经验设计一家公司的架构,一家公司的发展你要在不同的阶段做不同的调整,比如大数据,运维这样的团队,早期我会统一管理,随着公司发展,会考虑独立出来做特色的东西,不要受业务的干扰,这是组织架构。还有就是经常跟CEO聊天,游湖散步,把他的战略目标拆解成技术目标落地实现。另外就是跟合作厂商的沟通协作,创业公司需要借助各方力量,我可以通过置换商业资源的方式寻求行业其他公司的技术帮助,加快产研速度。

怎么决定一个人的薪资、奖金、期权?薪资是一个人的未来能带来的收益的考量,它是一个市场价值,一个人不管来这家公司做出多少业绩,他达到这个水平,就要给他薪资;奖金是做出业绩的回报,是一个人过去做过的事情的价值衡量;最后一个是期权,如果这个人这家公司充满希望,你可以用一部分的薪资奖金兑换成期权,降低公司的成本。这是三者的关系。充分理解薪资、奖金、期权的关系,是一个CTO要关注的事,有助于建设良好团队氛围。

如何建设好团队工作氛围?除了前面说到的待遇问题,还有很多举措可以用于建设良好的团队氛围。我是偏理性的管理者,我基本上不太会用个人关系,比如天天吃饭来去维护这个,我比较认可通过完善的机制,完善的规范来建设公平的环境,带领好的氛围。另外,好的氛围的根本,取决于业务,业务不向上,基本上你怎么做都是不好的氛围。

再就是是不是技术做不下去的就要转管理?我觉得没有所谓的转管理,这个过程对我来说,只是在寻找独立做事的能力,最后怀揣着使命感,要达成梦想,是这样的过程。

技术型人才是不是都不适合做管理?我曾经也有这样的怀疑,后来自己带团队,经历了一些事情,慢慢了解到,每个人都会形成自己的管理风格,没有适不适合的问题。管理上不是有个『五型管理风格』吗?老虎型、考拉型、孔雀型、猫头鹰型、变色龙型,这五种,没有谁好谁坏,只是不同的风格会带来不同的团队氛围。我估计很多技术同学刚开始带团队的时候都是老虎型。

再就是刚毕业的人应该去大公司还是去创业公司。我觉得经历大公司很有必要,因为去到大公司,你会了解到『好是什么好』,我现在能做到这个位置,一定程度上得益于曾经在B和A的工作经历,大概知道一个团队如何从1发展到60,再从60到100。经历过大公司,知道了好是什么好,才有足够的视野和高度指引团队走下去。

这一点我发现创业的时候一定要先做后学。2年多前,我一个朋友有一天问我,『云龙,我要做个易企秀那样的平台需要多少成本?』,我说认识一个朋友,他们大概需要二三十人的团队做两三个月,可能需要两三百万的资金吧,他说这么高的成本,就不理我了。过了两天来找我,说搞定了,我很诧异,问他怎么解决的,他说在淘宝上买的,一套代码,100多人民币,还带大量模板。这件事给我很大冲击,当你做技术决策的时候,尤其是创业公司,千万要先想到行业里面有什么可以直接用的,用公司的资源置换也好,商务采购也好,拿过来先用,用完以后再组团队去学,学完以后形成自己的一套东西,是这样的过程。

最后一个问题就是如何体现技术团队的价值。如果一个公司都是产品设计运营做的好,我们怎么知道是技术做的好,这是一个技术管理者要非常清楚的要点,才能让团队有方向可以遵循。

这里我大概总结了3个要点:技术产品质量、开发效率和体验性能。

这里有一张漫画,当线上服务一切正常时,老板回想『一切风平浪静,真不知道我要雇这群研发干什么』,而当线上出现事故,老板又会想『成天出问题,真不知道雇你们这群研发干什么』,这种现象其实很普遍,技术产品质量是基础,稳定压倒一切。其次能体现技术价值的就是在稳定的基础上,提升开发效率,快速迭代,快速上线,小步快跑。但做到以上两点,只是基本满足业务要求而已,不被诟病,但要进一步体现技术的价值,就要在性能上做文章了。

右图是亚马逊提出的一个概念,网站打开速度每降低0.1秒,网站就能多增加1%的收益,优秀的团队需要在业务核心性能指标上下功夫,突破秒级的打开速度。

最后特别要感谢两个职业生涯中遇到的贵人。第一位是我刚入行时的第一位导师,在百度任职的朱旭,为人很淡泊,在百度工作十年如一日,非常低调踏实,培养新人也真正做到了甘当人梯,给我很多启蒙指导。第二位是我在UC的老大,离开UC之后我们也是亦师亦友的关系,给我很多管理上的启蒙,在我带人做事最迷茫的那段时间指引方向,给出答案。

最后,非常感谢大家!

福利时间

如果你想获得本届峰会的PPT资料

请关注TopGeek的公众微信号:topgeeks

或者长按识别下面的二维码

然后回复关键字:

FDCON2018PPT

即可获得PPT下载链接!