个人职业复盘-我的路

26,279 阅读20分钟

概述

从2009年毕业开始工作以来,至今已是第14个年头了,在这段漫长的职业生涯里,我干过好多件蠢事,也做对了一些事。

目前在一家公司,担任后端开发负责人,管着一个15人的技术团队。对我而言,这个是我当前的职业生涯里最亮眼的职位了。虽然团队不大,但是要对整个IT部门的系统稳定性负责,要承担的责任还是非常大的。

只要在IT公司做过几年程序员的都应该知道,要想走技术管理的路,并不是那么容易的,这里有运气的成分,也需要自己实力的加持。这篇文章就是想把自己如何走上技术管理之路的经历分享出来,供大家参考,为广大程序员尽一点绵薄之力。

文章的大纲分为如下几个部分:

  • 毫无成长的前五年;
  • 职业生涯转折点:进入了唯品会;
  • 第一次当技术组长;
  • 第一次当技术经理;
  • 第一次当后端技术负责人。

期间到底如何打怪升级的,请看下面的章节的详细内容。

毫无成长的前五年

前五年可以总结成一句话:

像一只无头苍蝇一样,到处乱撞,但一事无成。

这五年,待过了4家【传统行业的公司】,基本上一年一跳,其中两家还是外包公司。当时跳槽的原因只有一个,哪里钱多就往哪里去,就算只是涨幅2、3千块钱,我也去。完全没有任何的职业计划,现在回想起来了,已能知道为啥当时自己会那么做,原因就是:

没有良师益友的指导。

就是说没人帮你,没人带你,告知你应该如何珍惜前五年,如何做职业规划。人很容易困在自己的圈子里,认知很难突破的,如果没有高手帮忙拉你一下的话,你可能10年都是那个样子,一直碌碌无为,一直没有方向。

但毕竟工作五年了,为啥说毫无成长呢? 这里有几个原因。

  • 在外包公司(去过两家外包公司,待了两年多一些)的经历,基本可以忽略。因为做的东西都是企业级管理的后端系统,且也很难接触到真正的核心系统,也没有针对C端用户的大流量系统(就算有,也轮不到你来做),真的就是按照产品的需求做出来就行。团队不会严格要求你必须得有技术方案、技术设计,因为这种项目对技术的要求本身就很低。因此需求一来,火急火燎的,马上开工就行;
  • 虽然也待过两家非外包的公司,但是公司没什么名气,对技术人的要求也不高,还是需求一来,马上开工的那种状态。如何做设计,如何提升代码质量,代码如何写才是好代码,没人告诉你。

没做过好项目,周围也没遇到过高手,加上自己也没啥天赋,比较笨,就一直浑浑噩噩度过了五年。我是属于需要有人指导一下,才能开窍的那种。

经验教训:

在传统公司里做程序员,不太容易遇到好公司好项目好团队和好的人,你可能还自我感觉良好,觉得自己做的不错,但是在互联网的HR和面试官看来,你可能一文不值。这个时候的你,应该赶紧去找一下好公司,突破上去,上到一个新台阶。

职业生涯转折点:进入了唯品会

14年的时候,一个老友语重深长的说:

准备屡战屡败,屡败屡战,去互联网公司,把履历洗白一下,不然你以后的路会越来越难走的。

我当时是挺不屑的,她懂啥呀。但是听了她的分析后,我被说服了。

  • 工作五年了,履历毫无亮点。没在有名气的公司待过,也没做过有大流量的项目,还是一个普普通通的程序员;
  • 再过几年,就七八年工作经验了,但是你的技术跟年龄,完全不匹配呀。

可以说是当头一棒了,确实不能在这样下去。于是赶紧更新了简历,开始投递广州的一些互联网公司,开始走上了互联网公司求职之路。如上文的描述,我一直以为我的技术还是相当不错的,像Spring、Hibernate、Struts用的很熟练,但是去面了几次后,我才知道跟别人差距有多大。面试官一上来都是问JVM、高并发、高可用等一些技术点,我全都不会。

当时我是屡战屡败,屡败屡战。记得还连续去了广州一家知名互联网公司面试过4次,都没通过,每次都被打击的死死的。虽说每次都失败,但是也注意到了互联网公司到底都用一些什么技术,后面认真的准备了半年,啃了N本书,看了N个技术博客,写了N个技术Demo。终于在2015年成功进入了广州唯品会。虽然是降工资,降了两个等级过去的(我当时资深开发,但是去了唯品会,就变成普通开发,连高级开发都没有),但是我仍然愿意去。因为进入一家比较有名的互联网公司,当时对我来说实在太重要了。

2015年,唯品会刚好开始进行核心系统大重构,我刚好在公司的重构部完整的经历了整个过程,参与了几个核心系统的重构工作(其中一个商品项目,在唯品会2016年的大促里,流量是最高的,真的是百万级别的瞬时流量),都是从零开始弄的项目。整个过程下来,自己的JAVA技术、系统设计和架构、以及技术认知,都提高了好几个档次。也终于见识了,一个高并发、高可用的系统是怎么弄出来了,要经历过一些什么,要注意一些什么。记得在由于体会越来越多,也陆续写了很多博客,后来还成了CSDN技术博客专家。

期间由于表现还不错,晋升到高级开发(P3),刚晋升后不久,我就跟原来的leader提出说,能不能让自己带一个小团队,锻炼一下带队的能力。得到的回复是:

团队暂时没有这样的坑位。

但是带团队的经历对我来说是非常重要的,因为我当时的年龄已经不小了,技术上也没有什么特别的优势,但是项目管理的潜力还不错。最后没有办法,我只能提离职申请,离开待了快3年的唯品会。当时的离职不是一时冲动的,而是职业发展所需。

  • 年纪也30好几了,技术天赋也一般,走技术专家不合适我;
  • 对项目管理非常有兴趣也有一定的潜力;
  • 当时的团队暂时没有坑位;

基于上面几点,我又开始走上了寻求技术管理岗的求职之路。

经验教训:

  • 早期不要毫无目的的频繁换工作,很多中大型公司很在意这个的,会因为你频繁换工作而把你刷掉。因为职业发展所需才去跳槽才是对的;
  • 如果能进入到一家好的互联网公司,最好是去核心部门,学到的东西才多,成长才足够快;
  • 只要去过一家比较有名气的互联网公司,是能将你不好履历洗白的。这个对后面找工作非常有帮助。

第一次当技术组长

以我当时的实力和背景,去大厂带团队是不可能的,只能去一些中小公司,但是这个没关系,只要能让我带团队就行,先入门先。

刚好当时唯品会有几个认识的同事离职了,去了深圳的一些创业公司做技术负责人或者架构师。当时有3家公司可以选择,也都面试通过了(有熟人推荐和介绍,确实成功率高很多)。但是只有其中一家有机会带一个7人小团队,加上当时的推荐人在那边是技术负责人,对技术这块有完全的话语权,我就果断了选择了这家。

这家创业公司是做小程序电商的,是做这块业务的头部公司,业务发展非常快。基本上所有的业务项目都是倒排期的,技术团队是没有任何的反驳的余地的。

经常出现大老板对外说,我们什么时候推出什么样的产品,而我和我带的小团队,一行代码都还没写呢?

因此如何按时交付倒排期大项目,成为当时我面临的最大挑战。当时是小团队,我也是参与写大量代码的(必须一直在一线),但同时得兼顾如下几个角色:

  • 架构师,主要是关键系统的设计和核心模块的开发;
  • 项目管理者,负责与产品和业务方沟通,并制定详细的项目计划,让大家能依计划行事;
  • 管理者,主要是团队的成长、绩效这块。

那刚开始顶得住吗? 肯定是顶不住呀,我经常因为赶工,睡公司沙发。能力还没修炼到家,那就只能拼时间了。

这个节奏一直持续接近两年,非常的辛苦,但是成长也是有的。具体如下:

  • 正儿八经的带过团队了,团队虽小,但也算五脏俱全了。团队管理遇到的一些问题也基本遇到了,这个就是我当时想要的,因为后续再去找工作的时候,我就是实打实的有带团队的经验了;
  • 项目管理能力得到飞速的提升,毕竟要经常应付紧急大项目。项目管理能力是技术管理者的一项重要的横向能力,是一定要懂的;
  • 在创业公司,业务交付是最重要的,技术的长期规划是不重要的。老板都不知道某块业务上线后又没有用呢,你IT团队操心个什么技术的长期价值呢?
  • 在创业公司带团队,自己的硬实力一定要有,随时能在一线大量的写代码;
  • 人脉对找工作极其关键,我能快速的入职这家公司并带一个小团队,也是因为在唯品会累积了一些人脉。他们有好的去向,你是可以跟着去的。

第一次当技术经理

后来这家创业公司业务发展不行了,开始裁员了,我也不得不考虑一下自己的将来,于是又借助人脉,去了一家餐饮公司,当时这家公司的CTO以前也是认识的,简单唠叨几句后,很快就接到了该公司的面试通知,由于自己有唯品会的重构经历也有创业公司的带队经历,整个面试过程还是很顺利的,拿到了一个技术经理的职位,负责中后台业务,团队是13人。为了能快速的融入这家公司的IT部门,我当时做了几件事情。

  • 通过一对一沟通,了解团队的瓶颈;
  • 积极的去一线处理线上问题,以便快速熟悉业务和了解应用系统的情况,同时也能让更多的人认识到我;
  • 大重构;

记得刚进入这家公司没几天,上级就提到,我负责的团队的情况不是很乐观,项目经常延期且跟其他职能团队配合的也不太好,让我想办法解决一下。言外之意就是说,这个团队不好管,让我多花点心思。由于之前已经有两年的带团队经历,深知跟团队成员一对一沟通的重要性,尤其是跟核心员工。

于是便找了团队的两个老员工,请他们吃饭,顺便了解团队的情况。当时其中一个员工情绪稍微有点激动:

团队负责的核心应用,大部分还是PHP写的,但是PHP开发只有3个,业务需求又多,根本忙不过来。而JAVA开发基本又没事干。

基本是一针见血了,这个是团队的真正问题所在。忙的人忙的要死,不忙的又闲的无聊。事后我跟上级反馈了这个问题并提出了解决思路:

必须进行核心系统的重构,除了提高稳定性外,也能极大的提高业务需求交付速度;

在得到上级的批准后,便紧锣密鼓的操办起重构来,那会的阻力很大,因为产品负责人觉得这样会阻碍业务需求的交付,而测试负责人则反馈,重构期间,测试人员得两边测试,极大的加大了测试工作量。没有办法,我只能把问题上升上去,直到CTO那边。最终CTO拍板,必须重构,并让我列出详细的重构计划。

于是乎中后台技术团队足足花了10多个月,把核心的应用全部从PHP转成JAVA。期间也出现了很多线上问题,但由于有完善的灰度和回滚方案,都在5分钟内恢复正常。我因为这个重构项目,在次年晋升为高级技术经理,而我的上司则晋升为技术总监,记得当时他去晋升的时候,CEO还特意说了句:系统最近稳定了很多。

期间为了能快速熟悉业务,我做了一件很疯狂的事:

我个人在线值班3个月,并作为线上问题的对接人。

无论是线下门店的问题还是线上的app和小程序问题,都可以直接找我。这个当然会占用我很大的一部分时间,但我认为值得,理由如下:

带着问题去询问或者查看代码,效率是非常高的,因为问题非常明确,就摆在那,你压根就不用去想,从哪个地方切入去熟悉业务,直接把当前的问题解决掉,就能了解到一点业务,通过长期的坚持的处理一个一个的问题,慢慢的从点到线到面的了解整体的业务。随着解决的问题越来越多,你会越来越了解当前的业务应用,有哪些模块,都是负责什么的,当前是怎么玩的,哪些是关键的地方绝对不能出问题的,哪些又是强依赖第三方的,渐渐的会对应用有个整体的认识。当然也会知道系统哪些地方需求去打补丁,哪些地方需要去做监控。业务熟悉了除了有助于自己快速的融入到团队里去,还可以为自己后续的任务合理分配和系统有效规划打好基础,当然最重要的还是有助于与团队内部、外部、上司进行良好的沟通,如果业务都不熟悉的话,很多事情都无法直接跟你谈。

没有这段处理线上问题的经历,我是无法很好的推动重构的。因为业务和周围的人你都不熟悉,别人也不了解你。

在这家公司除了做重构之外,也交付了很多能给公司带来GMV的业务需求,上司和CTO也都比较满意,基本上每年都给我涨了不少工资。在CTO眼中,能帮大忙的,钱就尽量给够。那几年公司发展的不错,中后台技术团队的业绩也很不错,每年的蛋糕分的都比较多,团队的人都很开心。

经验分享:

  • 要去做有挑战有难度的事情,只要做成了,团队就容易拿到好的成绩,对团队的稳定性是极其有用的。一定要从团队的角度出发来考虑问题,像当时如果没有做好重构项目,我估计团队就会散掉了;
  • 跟着你一个看好你支持你的上级以及CTO,超级重要。他会信任你保护你并授权给你,让你做重要的项目,让你出成绩;
  • 稳定性是技术团队保命用的,如果系统不稳定,随时会被干掉的;
  • 空降兵,一定不要急着去改变团队现状,一定要先融入,了解团队的人和事,找到那几个关键的问题,然后全力推动去解决;
  • 项目管理能力很重要,因为大老板很看重这个能力。能按期按节奏交付系统,是很重要的。作为技术管理者,必须掌握这个技能;

我在这家公司待了也2年半。

第一次当后端技术负责人

在2022年2月,我又跳槽去了一家公司,当时离开上家公司是没有办法的事情,因为原CTO离职了,公司新招了一个技术总裁,哇去,带来了N多老部下。几乎所有的核心老员工都需要走,包括我。

当时我心里就想着一个事,CTO是否稳定太重要了。

因此从那家餐饮公司离职后,陆续去面试了几家,每每到最后,我都会问面试官,CTO的背景是什么,是否稳定,因为我吃过亏了。

当时选择这家公司有如下几个原因:

  • 这个行业的资本很活跃,一直在投资公司。也即是资本看好这个行业,赛道足够大;
  • 公司是这个行业的头部公司;
  • 我应聘的职位是后端技术负责人,责任变得更加大了,同时title也升级了;
  • CTO背景非常好;

这次我没有借助人脉,完全靠自己的判断和职业诉求去找工作。对团队内部的情况并不了解,里面一个人都不认识。相当于是进入了一个完全陌生的环境。因此也踩了不少坑,导致在早期,我在这家公司,过的极其的辛苦。

首先是leader层以及技术总监的技术专业水平,强到完全超乎我的想象,他们在技术架构、技术规划、技术管理、项目管理,有一套极其严格的规范,且是他们在上家公司严格经过考验的。这个导致我很不习惯,因为有一堆的方法论在卡着你,我在前两家创业公司里,做事的时候,有时候是有点野路子的,当然这个也是被逼的,因为当时业务方压的太紧了。

但在这家公司里,业务需求是能停一停的。可以专注的去做技术项目,提高系统的稳定性。大家应该知道,如果纯做技术项目,对你的技术能力要求是非常高的,但我已经有两年多没写代码了,刚开始完全适应不了。

另外呢,他们的要求又极其的高,像技术方案、代码质量,code reivew,压测,技术架构合理性,没按照要求来做的,通通打回重搞。再加上我的上级是细节控,一路盯着你,哎,搞得我压力山大。我曾经一度怀疑自己,我还合适待在这家公司吗? 怎么感觉之前累积的东西,在这里完全没用了。

后面压力实在太大了,只能多次的敞开的跟上级和CTO聊,慢慢的,自己的心态才缓过来。那会我开始明白了一些事情。

  • 勇敢的承认自己的不足,不是什么丢人的事情。一定要敞开的跟老板聊,老板虽然严格,但是他会帮你的;
  • 心态要好,有些人的实力就是比你强大很多倍,在他眼中很容易做成的事情,你可能一直都无法做好或者说需要花费很大的精力才能完成。要能接受这种差距,并努力提高自己,慢慢减少差距;
  • 有些事情真的急不来,解决它就是需要花时间的。

在这家公司经历了12个月的磨练后,哇去,我自己成长真的是飞快,而且成长质量非常高,比以往任何一家公司都高。毕竟跟着一波高人做事情,成长是最好最快的。

当然期间你得能挨过去,中间我其实有离开的想法,但是后面还是坚持了下去,到目前为止,基本上迈过了这个坎了。

那么在这家公司我学习到哪些技能?

  • 对团队要高要求,团队成长才足够快。中间如果有人适应不了的,那就请他走;
  • 如何用最标准的方式,准备一场大促;
  • 如何管理自己的时间。这个是我在这家公司才真正掌握到的,做管理的,其实有一条暗线,那就是管理自己的时间。如果做的不好,你可能一路都被别人牵着走;
  • 如何高质量的从0到1,搭建应用系统。以前我都是短平快的把事情做成,在这边,学习到如何系统性、体系化、长期化的去思考和解决问题;
  • 做管理的,如果自己都没重点,那团队也就没有重点,这个是很危险的事情;
  • 如何从0到1的搭建研发流程体系。

小结一下的话,就是到目前为止,我学习到了一些技术总监才懂的技能。有一种从八路军到正规军的转变的感觉。

总结

提几个重点吧。

  • 跳槽要根据自己的职业规划来,每次跳槽都是往上跳。呈上升的趋势,不要搞降级跳,平级跳。我这边在后面几年就是按照这个思路来的。传统公司-->唯品会高级开发-->技术组长-->技术经理-->后端开发负责人;
  • 每次跳到一个新的台阶,你都会累到半死,只要你能挨过去,就能得到飞速的成长;
  • 跟着高手才能学习到好东西,要注意成长的质量;
  • 勇敢的承认自己的不足,不是什么丢人的事情;
  • 心态要好,要能接受差距,并努力提高自己,慢慢减少差距;
  • 团队管理,必须在实战中体会和掌握。