Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

一个程序员的成长之路(转贴) #200

Open
yanyue404 opened this issue Dec 10, 2020 · 0 comments
Open

一个程序员的成长之路(转贴) #200

yanyue404 opened this issue Dec 10, 2020 · 0 comments

Comments

@yanyue404
Copy link
Owner

yanyue404 commented Dec 10, 2020

原文链接: https://github.com/fouber/blog/issues/41

FDCon2018大会上的演讲整理

主题:主会场 - 一个程序员的成长之路
时间:2018年5月19日 10:40
地点:中国 上海
演讲嘉宾:张云龙-全民直播-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 到我的要求,怎么办?非常着急的时候,我说你别做了,我来吧。更有甚者,早年间在百度工作的时候,有同事白天辛辛苦苦写好的代码,晚上我 codereview 之后直接给重构掉了,没过几天那位同学就提了离职。带人做事,是把自己擅长的事情,良好的习惯传递给他人,实现 1+1>2 的生产力提升,让整个团队的产出高于自己。另外,这个阶段大家要特别注意『管』与『带』的区别。所谓『管』是"我不懂某个领域,但我知道你懂,你必须给我做好",而『带』则是"我特别懂这个领域,我知道你不懂,我要教你做得更好"。有点授之以渔,甘当人梯,成就他人的意味。带好一个人或者带起一支有战斗力的团队,是做人做事成熟的表现。

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

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

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

第二阶段:独立做事。

独立做事也有几个层次:

  • 独立 Coding:给你一个目标自己做完,不让别人给你擦屁股就可以了。
  • 独立带人:要注重提问的水平,帮助他演进他的想法。
  • 独立带团队:进入到这个阶段,要关注的更多,整个团队的氛围、工作效率,运用你一技之长的工程经验带领团队高效优质的产出成果,实现 1+1>2。
  • 独立做业务:团队稳定之后,开始关注所做的业务,行业的发展,理解你的用户,他们是谁,他们在哪,他们为什么使用你的产品,为团队指引下一步的产研方向。
  • 独立生存:独立做事的最高水平,就是能带领一群人养活自己,独立生存下来。互联网的商业模型只有有限的那么几种,深谙其中的玩法,寻找擅长的合适的模型养活一群小伙伴,意味着一次更大的蜕变。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最后,非常感谢大家!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant