技术成长发展
成长模型
大型公司→中型公司→创业公司,专注的事情从技术到团队再到业务
这里把整个职业生涯分三个阶段:
第一阶段:一技之长,就是深耕你的专业技能,你的专业技术;
第二阶段:独立做事,当你的一技之长达到一定深度的时候,需要开始思考如何独立做事;
第三阶段:拥有事业,选择一份使命,带领团队实现它。
第一阶段:一技之长
把它分成五个层次:栈内技术、栈外技术、工程经验、带人做事、业界发声。
所谓栈内技术,是指你的专业领域技术,对于前端工程师来说,就是那些我们熟悉的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。
独立做业务:团队稳定之后,开始关注所做的业务,行业的发展,理解你的用户,他们是谁,他们在哪,他们为什么使用你的产品,为团队指引下一步的产研方向。
独立生存:独立做事的最高水平,就是能带领一群人养活自己,独立生存下来。互联网的商业模型只有有限的那么几种,深谙其中的玩法,寻找擅长的合适的模型养活一群小伙伴,意味着一次更大的蜕变。
独立做事每个阶段,都是一次比较大的跨越,需要思想和多种软素质发生较大的变化,抛开技术人的身份不讲,独立做事的几个阶段,也是一个人逐渐成熟的过程。
职业问题思考
CTO平时都做些什么?
一个是招聘,招聘面试是我平时要做的事情,有专门的HR团队,把自己的帐号给人事的同学去登录,勾搭别人,有一些专业的高端人才,会一直保持联系,寸志老师就是这样被我勾搭过来的(:逃。其次就是考虑技术团队的组织架构,我要参照曾经的经验设计一家公司的架构,一家公司的发展你要在不同的阶段做不同的调整,比如大数据,运维这样的团队,早期我会统一管理,随着公司发展,会考虑独立出来做特色的东西,不要受业务的干扰,这是组织架构。还有就是经常跟CEO聊天,游湖散步,把他的战略目标拆解成技术目标落地实现。另外就是跟合作厂商的沟通协作,创业公司需要借助各方力量,我可以通过置换商业资源的方式寻求行业其他公司的技术帮助,加快产研速度。
怎么决定一个人的薪资、奖金、期权?
薪资是一个人的未来能带来的收益的考量,它是一个市场价值,一个人不管来这家公司做出多少业绩,他达到这个水平,就要给他薪资;奖金是做出业绩的回报,是一个人过去做过的事情的价值衡量;最后一个是期权,如果这个人这家公司充满希望,你可以用一部分的薪资奖金兑换成期权,降低公司的成本。这是三者的关系。充分理解薪资、奖金、期权的关系,是一个CTO要关注的事,有助于建设良好团队氛围。
如何建设好团队工作氛围?
除了前面说到的待遇问题,还有很多举措可以用于建设良好的团队氛围。我是偏理性的管理者,我基本上不太会用个人关系,比如天天吃饭来去维护这个,我比较认可通过完善的机制,完善的规范来建设公平的环境,带领好的氛围。另外,好的氛围的根本,取决于业务,业务不向上,基本上你怎么做都是不好的氛围。
是不是技术做不下去的就要转管理?
我觉得没有所谓的转管理,这个过程对我来说,只是在寻找独立做事的能力,最后怀揣着使命感,要达成梦想,是这样的过程。
技术型人才是不是都不适合做管理?
我曾经也有这样的怀疑,后来自己带团队,经历了一些事情,慢慢了解到,每个人都会形成自己的管理风格,没有适不适合的问题。管理上不是有个『五型管理风格』吗?老虎型、考拉型、孔雀型、猫头鹰型、变色龙型,这五种,没有谁好谁坏,只是不同的风格会带来不同的团队氛围。我估计很多技术同学刚开始带团队的时候都是老虎型。
再就是刚毕业的人应该去大公司还是去创业公司。我觉得经历大公司很有必要,因为去到大公司,你会了解到『好是什么好』,我现在能做到这个位置,一定程度上得益于曾经在B和A的工作经历,大概知道一个团队如何从1发展到60,再从60到100。经历过大公司,知道了好是什么好,才有足够的视野和高度指引团队走下去。
这一点我发现创业的时候一定要先做后学。2年多前,我一个朋友有一天问我,『云龙,我要做个易企秀那样的平台需要多少成本?』,我说认识一个朋友,他们大概需要二三十人的团队做两三个月,可能需要两三百万的资金吧,他说这么高的成本,就不理我了。过了两天来找我,说搞定了,我很诧异,问他怎么解决的,他说在淘宝上买的,一套代码,100多人民币,还带大量模板。这件事给我很大冲击,当你做技术决策的时候,尤其是创业公司,千万要先想到行业里面有什么可以直接用的,用公司的资源置换也好,商务采购也好,拿过来先用,用完以后再组团队去学,学完以后形成自己的一套东西,是这样的过程。
最后一个问题就是如何体现技术团队的价值。如果一个公司都是产品设计运营做的好,我们怎么知道是技术做的好,这是一个技术管理者要非常清楚的要点,才能让团队有方向可以遵循。
这里大概总结了3个要点:
技术产品质量: 稳定是基本要求
开发效率: 越快越好
体验性能: 核心业务指标
高可用,稳定性,扩展性
业务开发方向和基础支持组件开发方向
当线上服务一切正常时,老板回想『一切风平浪静,真不知道我要雇这群研发干什么』,而当线上出现事故,老板又会想『成天出问题,真不知道雇你们这群研发干什么』,这种现象其实很普遍,技术产品质量是基础,稳定压倒一切。其次能体现技术价值的就是在稳定的基础上,提升开发效率,快速迭代,快速上线,小步快跑。但做到以上两点,只是基本满足业务要求而已,不被诟病,但要进一步体现技术的价值,就要在性能上做文章了。
亚马逊提出的一个概念,网站打开速度每降低0.1秒,网站就能多增加1%的收益,优秀的团队需要在业务核心性能指标上下功夫,突破秒级的打开速度。