一些感叹
转眼间就连2021年都已经过去四分之一了,我也惊恐地发现自己的职业生涯已经走过接近5年,35岁中年危机似乎离自己越来越近。对于身处互联网行业的程序员来说,“日新月异”这个说法真没有夸张。似乎在这个行业,永远不变的就是变化。
我还依稀记得2018下半年入职字节跳动的情景,那时候凭借着自己在微软的2年工作经验初露锋芒,围绕在身边的声音充斥着“年轻有为”、“少年得志”。但时过境迁,年轻这个标签离我越来越远,却同时默默被别人打了更多别的标签,有“技术专家”,有“技术架构师”,有“技术leader”等等等等,似乎随着年龄的增长,每个程序员都自然而然得有这些标签。
但只有我自己的内心知道,我的实力其实还远远达不到这些标签。我开始害怕、焦虑、恐惧,我不敢暴露自己的无知,尤其不敢在新人面前。因为在他们的眼里,这是一个“已经工作5年的资深员工”了。不知不觉中,我似乎再没有犯错的机会,我不仅要承担团队中最艰难的技术架构,又要逐步学会技术管理,我要且必须要成为团队的“刀锋”,必须要持续保持自己的锋利。
的确啊,5年的程序生涯了。一个又一个的业务需求,一天复一天的加班迭代。虽然还不至于发量稀疏,但回头反思一下,自己的核心竞争力,究竟是什么,究竟又有多强。
“逆水行舟,不进则退”。程序员的生涯正是如此,我们在当下的信息时代,掌握着时代发展的金钥匙。因此无数的前浪后浪争相追逐,每个人都想要在IT界打拼出一片天,无论是鼓吹梦想的狼性996加班,还是看破现实的只为高薪反复跳槽,这是程序员能够改变命运的时代,但也宣告程序员之间已经无可争议的内卷了。
未来的巨浪中,一定会有更多的程序员被淘汰,从而印证35岁中年危机。也一定会有冉冉升起的超级新星,甚至改变世界。
我,既不想要被淘汰,也做不了新星。但我不甘于平庸,不甘于CRUD,不甘于沉醉在过去。我想要成长,不断成长,不断不断成长。我想要自己在未来回首过去的时候,发自内心的感受到自己的强大,而不是后悔蹉跎了岁月。我希望自己能够在接下来的时间里,反思自己的职业规划,明确自己的角色定位,定制自己的成长路线。在未来,能够看到自己的沉淀,看到自己的成果,甚至于说看到自己的成功!
总结过去
我过去的职业经历分为两个阶段:微软时期和字节跳动时期。
微软时期(2016.7~2018.7)
2016年本科毕业之后,我幸运的进入苏州微软工作。这在当时无疑是相当高的一个起点,我也非常庆幸自己有过这段微软的经历。当时我主要从事web服务端开发,产品是一个面向内部员工的广告商管理系统。技术栈基于Windows Server和IIS web容器,语言主要基于C#,并且有幸接触到微软堪称业界标杆的VSTS(Visual Studio Team Services,后更名为Azure DevOps)和顶级公有云Azure。
总结下来,我在微软得到了三个重要收获:
- 完全克服对英语的恐惧,深刻了解到技术浪潮中以英语为母语占主导地位,对未来的职业生涯影响深远。
- 掌握业界领先的DevOps技术,对CI/CD流水线,日志、监控、告警都有了极大视野开拓,深刻理解DevOps理念。
- 领略公有云的架构,理解云上基础架构组件的运作方式,对后续理解云原生奠定重要基础。
但与此同时,我也真切感受到微软的一些不足:
- 跨国合作的沟通效率极其低下,邮件回复经常需要隔夜才有下文。
- 技术栈封闭,在中国崇尚开源的大环境下不利于个人发展。
- 晋升缓慢,提升空间小。毕竟微软已经是可以靠部分业务躺赢的世界级公司,因此苏州的绝大部分团队确实是最边缘的存在。
字节跳动时期(2018.7~now)
2018年7月底入职上海字节跳动之后,我进入飞书团队音视频组。我先后在音视频业务后端和音视频RTC(Real-Time Communication,实时通信) 后端两个小组从事开发工作。
彼时凭借着微软时期的DevOps经验在团队中大展身手。从0到1,再从1到N,在团队中普及DevOps理念,率先进行DevOps实践,并且后期逐步孵化出DevOps平台。
在字节的两年半中,我有幸能够以云计算时代的热门语言golang为工作语言,同时大规模基于微服务架构开发。Container、Kubernetes、Service Mesh、Serverless等等先进的理念逐步渗透,让我受益匪浅。
总结下来,我在字节得到了四个重要收获:
- 将微软学到的DevOps理论知识通过实战方式落地到字节,奠定自己在团队中DevOps技术专家的地位。
- 掌握Go语言并深入理解其运行原理,深刻理解“less is more”在真正工程中的威力。
- 基于微服务架构开发,吸收大量架构经验,对设计系统的构思趋于成熟。
- 对云原生从启蒙到入门到逐步熟悉,对容器技术原理、Kubernetes容器编排、Service Mesh和Serverless等先进技术有了深刻理解。
同样,我也真切感受到字节的一些不足:
- 扩张过快,人员数量成倍增长。带来的直接后果是内部斗争突增,组织结构频繁变更,个人发展空间迅速消耗殆尽,俗称内卷。
- 对个人的定位不像外企一样更加追求全面发展。而是将人限制在某个方向上,导致个人的视角非常受限,成长的路线极其狭窄。
- 焦虑是常态,疲于奔命地迭代需求,短期之内就需要得到反馈的快餐式开发流程。个人容易迅速失去在市场的竞争力,陷入舒适区。并且字节的薪资水平在业界普遍偏高,跳槽空间很小。
反思现在
过去的经历看似辉煌,但我却越发感受到自己的焦虑,我对自己要成为什么样的人,拥有什么样的未来,始终无法坚定。我非常贪婪,什么都不想要放弃,但人生的很多事情,往往都是权衡。
尤其此时此刻,我还正在经历着一次组织架构的调整,可以说是身处人生的十字路口。但其实在更早的时候,我已经开始迷茫。我对自己的成长和发展一直非常重视,每当我全身心投入工作的时候,我时常会感到自己的创造力全面迸发,时常会感到自己的自驱力无比强大。
但是当项目周期结束之后,我如果发现自己并没有得到成长,焦虑会成倍席卷而来。尤其当自己发现在可见的未来中,仍然无法破局,那么我的工作状态会急转直下,脑海里面会突然涌入非常多的想法。
焦虑、迷茫、恐惧,便是我现在的直观感受。更本质的是,我对自己的角色、能力、成长,没有清晰的规划,没有坚定的勇气。
核心问题
总结下来,我知道此刻自己面临着两大核心问题:
- 职业规划不明。我对自己的角色定位一直不够清晰,太容易受客观因素影响而改变(薪资、上级、组织调整等等外因)。经历多而杂,但不够精。对于自己要成为技术管理还是技术专家摇摆不定。
- 技术沉淀不足。我虽然在后端和DevOps都广泛涉猎,但自己对很多概念仍然是浅尝辄止。技术不成体系,不成知识图谱,因此导致理解趋于片面化。
展望未来
因此,从现在写下这第一篇博客开始,我要求自己在未来要有所突破!
我从过往的经历总结出自己的优势:
- DevOps实战经验丰富,能够同时兼顾开发和运维。
- 思路清晰,口语表达能力强。
- 对技术的追求永无止境,能够沉下心钻研。
同时我也明白自己的劣势:
- 不擅长争取,害怕与人发生冲突,职场容易吃亏。
- 技术深度不够,经常游离在各种技术之间,计算机基础还不够扎实。
角色定位
首先是职业规划问题。我现今对自己的定位是:坚定技术序列不动摇,但暂不在技术管理和技术专家分支中自我定型。这一方面是因为当技术管理是受团队机会的客观影响,另一方面是因为自我认知中对技术的掌握仍有明显不足。
技术沉淀
其次是技术沉淀问题。未来我主要通过技术博客的方式,让自己的技术沉淀可以量化,同时也希望自己的博客能造福他人。
OKR驱动
在字节工作,一直是基于OKR来驱动自我,OKR是一个非常棒的规划方式。OKR的定制原则通常既不能过于简单,也不能过于困难,70%的最终完成度可以看做是OKR最好的落地实践。
因此,我会继续基于OKR来为自己定制目标和计划,以双月为单位进行总结和反思。
现在是2021年3月底,我为自己定制的4、5双月OKR如下:
- Objective 1:深入理解云原生核心组件-Kubernetes
- KeyResult:通读k8s核心存储etcd源码,沉淀至少1篇博客。
- KeyResult:通读k8s核心组件kube-apiserver,kube-controller-manager,kube-scheduler,沉淀至少3篇博客。
- KeyResult:极客时间《深入剖析Kubernetes》精读2遍。
- Objective 2:深入理解go语言
- KeyResult:context源码阅读,沉淀1篇博客。
- KeyResult:总结error handling最佳实践,沉淀1篇博客。
- KeyResult:总结go依赖管理,沉淀1篇博客。
- Objective 3:架构设计精粹系列
- KeyResult:总结2个业务场景的架构设计,开启架构设计精粹系列文章。
结束语
这里是文章的结尾,却也是我个人新的开始。这一步,我选择走出舒适区,但我相信未来的我一定会更加强大!