IT技术人,“三十而已”
最近电视剧《三十而已》热播,我家的电视机自然也是被霸屏,我还是跟着妹纸看了看,开头和结局完整看完,中间看了一点,大部分都是在微信公众号上通过别人的文章看完的。我个人也已经30+了,今天也和你聊聊30+这个话题。
该剧以三位三十岁女性视角展开,讲述了都市女性在三十岁这一重要年龄节点时,遭遇到多重压力的故事。
私以为,这部电视剧可能贡献了整个7~8月一半以上的话题,它描写都市女性在30岁人生节点上面临家庭、事业、爱情上的种种波折,以及她们的态度和选择,引起了社会各界广泛的共鸣,特别是办公室的吃瓜同事们。
画外音:IT、互联网公司也无一幸免,午饭时间讨论剧情的,骂渣男的,骂林有有的,此起彼伏。
对大多数人来说,可能没有哪个年龄比30岁更“动荡”。中国传统意义中“三十而立”的观念深入人心,在这个节点周围,似乎覆盖了很多人生中最重要的时刻,结婚、买房、生子,看起来每一个事件都会让刚刚独立不久的年轻人面临巨大的压力,难以平衡工作和家庭的关系,他们必须有所选择,也必然有所放弃。更重要的是,他们很焦虑!
画外音:孔子曰:“吾十有五而志于学,三十而立,四十而不惑,五十而知天命...”这里的立其实是指“立德、立言和立身”,换句话来说就是学有所就,且对自己的发展方向有明确的定位和路线方针。但,现代人谁还没有个想立却立不起来的三十岁?不焦虑,是不可能的!
近年来,我们一直在听到各种新闻,说BATJ和华为等一线大厂不欢迎35岁以上的程序员,35岁以上的程序员会被逐渐淘汰,一时间,35岁的IT行业中年危机成为了我们技术人时常焦虑的一个问题。
之前也有一些童鞋在公众号后台问我:“我快30岁了,如何才能在30岁之后不被淘汰 或者 30+后如何进阶才能持续保持竞争力?”
作为一个今年年底即将32岁的大龄码农(相对很多90后的年轻码农而言),虽然还是混得不好,技术也不行,但好像自己没有太焦虑自己的35岁危机(不知为何,真的没有太焦虑)。每个人的成长道路都是不一样的,在此我就来分享一下我的成长故事吧。
画外音:嗯,这应该是我第一次在文章里分享我的成长故事。
我在2012年大学毕业,考了研,数学单科差了几分没有进入985大学复试,随即调剂进入了成都一所普通的双非(非211/985非双一流)信息类院校(江湖人称CUIT)读研究生。从2013年起开始在博客园上发文,最初也就是记录一些自己在学习过程中的笔记,以及一些IDE的高效设置之类的。在2014年,开始大量阅读一些技术书籍,然后整理成精华笔记,发布到了博客园首页,随即有了第一篇编辑推荐,然后第一篇100个赞的文章,然后,就是被评为了“推荐博客”(曾经我给自己设定的目标是毕业后争取评为推荐博客,没想到没毕业就完成了)。
画外音:先有兴趣,然后有幸得到鼓励,久而久之也就成为了习惯。
读研期间的2013~2014年,虽然我的研究方向是云计算技术,但是读研期间却被实验室老师派到了一个横向课题项目的合作单位(电子政务信息化方向),干了一年多的.NET项目开发,期间也经历了好几个月的996。虽然条件艰苦(驻场办公),好在项目组成员都比较Nice,对我帮助也很大,我收获了很多,特别是ASP.NET WebForm这种拖控件技术简直不要太Easy(虽然Easy,我还是理解了很多WebForm的底层知识)。不过,就是薪水收获不多,实验室老师也只给了我1万块,而我却干了一年多。
画外音:读研期间,还是不要太计较得失。嗯,研究生劳动力普遍很廉价。
2015年硕士研究生毕业,当年26岁,还未毕业时就加入了成都本地一家企业,我叫它S公司。S公司是行业里面的一家大型企业,我有幸加入了内容产品研发中心,跟着我的校友也是我的学长一起工作,从他那里我学到了很多,特别是对技术的态度。在S公司,我主要使用的技术是.NET+Siliverlight(对,你没看错,就是那个曾经被微软推出来要干掉Flash的富客户端技术Siliverlight,当然结局大家都知道)。
就这样,我干了大半年,学长领导也打算一步步地培养我做项目经理,我这时也已经在慢慢尝试着管理一个产品项目了。不过,这时我却打算离开了。主要原因就是,房贷压力较大且Siliverlight这套技术不是我喜欢的,我想要寻求一份薪水更高且能用新一点的.NET技术的工作。于是,我出去面试了一些工作岗位,也都拿到了Offer,最终选择了去一家世界500强的外资企业在成都的技术服务中心。
画外音:说到房贷,其实也很感谢我爸妈,在2014年我还没毕业的时候就给我付了首付,让我在成都的南五环边上(对,你没听错,的确是五环)有了自己的窝,要不然再晚两年,可能就买不起了,可能就全款变首付,对,说的就是成都2016年下半年的楼市。
这家外企,我叫它M公司,我的职位是Senior IT Engineer(高级IT工程师),薪资也比S公司多了一半,这时的我终于松了一口气,每个月除了房贷,还可以有自己的一点存款。在M公司,我主要使用的就是是ASP.NET MVC+Angular+WCF+Oracle PL/SQL。Oracle PL/SQL这种有点上古神器的技术还在很多的金融公司、银行系统、外资企业中散发活力。M公司的大部分业务逻辑都是写在Oracle的存储过程里边,一点都不具备可维护性和可扩展性,但是人家都说这是公司的核心业务逻辑,不能大动,于是大家都学会了一手调试Oracle存储过程的能力,虽然这个debug体验超级超级差。干了两个月,我的领导让我试着当Scrum Master的角色,于是我迅速看了本Scrum的书之后就开始学者当这个新角色了。时至今日,我虽然还是一个认证的CSM,我觉得我都还是没有当好Scrum Master,不过我感觉我已经在慢慢地向合格的Scrum Master靠拢了,感谢当时的领导的信任。
在M公司的三年,是愉快的三年,因为外企的工作环境和氛围都是很Nice的,我也很接受这种Work & Life Balance的文化,工作压力没那么大,也有足够的年假和同事们一起出去游玩,比如毕棚沟、七里坪、海螺沟 以及 稻城亚丁等等都是在M公司我和同事们一起去的。
画外音:说到外企的这种Work & Life Balance的文化,我想大多数人都可以在那个舒适区里干个3~5年以上。更别说,在微软这种顶级外企,应该干了10多年的人都有大把人在。
同时,在M公司的三年,也是我没有多少技术成长的三年(或者说成长较慢的三年),技术自主权受限,内部流程繁杂,连我所在的团队也被解散,最后我也加入了一个Java后端服务团队做了两三个月的Spring Boot开发微服务。使用Java后我最大的感受就是,开源世界的宽广,可以为我们这种团队提供太多太多的轮子。这个时候,我关注到了.NET Core,于是就开始学习起来(这个时候.NET Core都快发布2.0版本了),也在我们团队内部开启了一个学习小组,来一起学习.NET Core微服务相关的一些组件和应用,做了一个PoC项目,还研究了如何基于Steeltoe项目让.NET Core加入Spring Cloud技术体系与Java微服务共存。不过,貌似公司亚洲区CTO的总体技术路线里面已经没有了.NET的地位。
最后,在M公司的三年,幸运的是我还一直保持着学习和输出的习惯,虽然在博客园上的输出不多,但也还是在坚持。
画外音:说到Java,还是建议各位.NET程序员都抱着开放的心态而不是仇视的心态,有机会也可以去多了解了解,不失为一件好事。
刚好这时2018年底,成都本地的另一家企业,我叫它X公司,也是我现在所在的这家企业,联系了我,告知我有足够的技术自主权,并且领导也是.NET出身,愿意尝试.NET Core。于是,我说服了我自己,离开舒适区,来到了X公司,这个传统行业的初创型公司,这一年,我刚好30岁。一开始,我就有好多不适应,当你从一个较为舒适的区域中出来,来到一家传统行业的公司,你就觉得,无论是工作氛围还是福利水平,都是一个天上一个地下。不过,我过来的目的,重点还是实践和应用.NET Core和微服务,那些我觉得暂时都不重要。
于是,我和我的同事们开始了从0到1的设计基于.NET Core的微服务架构,从鉴权认证服务、API网关、产品服务、用户服务、项目服务 再到 Web系统、App等前端项目,虽然我已经告别了开发一线主要角色是Team Leader和初级架构师,但仍然是一步一个脚印走到了现在。这个过程中我也在其中收获和成长了许多,包括技术架构上的和团队管理上的,当然也看了不少的书籍,最为幸运的是,我还是一直坚持在学习和输出,这两年我在博客园上写了不少的文章,也在2019年也就是我31岁这一年评选上了阿里云最有价值专家MVP认证。
画外音:分析利弊,确认自己想做什么,更看重什么,想好了,干就是了。
2020年,疫情之下,传统行业下的众多企业都在经受煎熬,这时数字化转型成功的传统企业在乘风破浪,因为在线业务在支撑。而尚未数字化转型 或 才进行不久的传统企业则在羡慕嫉妒恨,也开始加大对数字化转型的关注。就这样,我和我的同事们开始了公司业务中台的规划和建设,心中已经有了一幅将来公司业务中台的样子,剩下的就只是不断地实践和学习,再学习再实践了。不过,对于技术,我不再是当年那个一心只想要追求和应用高大上的新技术的样子,而是根据当下的场景选择合适当下的就好(当然也会考虑一点扩展性),其他的就慢慢演进吧,毕竟传统行业的初创企业成本也有限,试错成本也较大(当然重点还是没钱)。
到此为止,我的成长之路就分享完了,现在来回顾一下我的成长之路,我总结了以下几点(特别适用于.NET程序员):
(1)毕业后没有进入互联网公司,也就失去了接触互联网级的业务量和技术体系的机会。这一点,应该是大部分.NET程序员的通病,因为.NET那些年真的没有赶上消费互联网时代而且也的确不够开放,导致了大部分的国内互联网公司都转向了Java技术栈。高并发、分布式、秒杀等架构和业务场景可能大部分.NET程序员现在都没怎么接触,而Java程序员却习以为常。不过,现在的产业互联网浪潮,对于.NET程序员来说却是一个机会,有机会就及时上车。
(2)人一旦进入了一个舒适区,就很容易放弃成长 或者 缓慢成长。幸运的是,虽然我那几年成长缓慢,仍然还算是在成长,只是不在技术方面。换句话说,只要今天的你比昨天或者上个月的自己有进步,那就是一件值得高兴的事。
(3)领导愿意让你尝试一个新角色,是件幸运的事,应该努力尝试过后再说自己不行。作为技术人,切换角色是件很痛苦的事,初次从程序员切换到初级管理者,会有很多思维上的冲撞。一旦冲破了你的预设防线,很可能就会放弃这个新角色,继续做纯技术了。我并不觉得做纯技术不好,我个人也十分想写代码写到50岁,但是也觉得角色切换应该尽最大努力去尝试,尝试之后再说。
(4)如果你觉得在舒适区给不了你想要的成长,那就分析利弊,决定离开就尽早离开,越往后离开的成本越大。前面也说道,确认好了自己想要做什么,想要获得什么样的成长,那干就是了,越往后拖,越不想离开,因为那个时候你会有各种理由说服自己,嘿,留下来。
(5)找到自己的源动力,让自己养成一种持续提高自己的习惯,并持续不断地实践这个习惯。对我来说,写作就是我一直坚持的习惯,而这个习惯也不断逼迫我持续地学习和输入,才会有更多的内容进行输出,如此反复,这个过程就会促使我进行提高。加上和园友们的互动,以及园友们给的肯定,就加强了这个循环,我称它为正向的增强回路。
以上几点就是我的成长故事总结,可能并不适用于每一个人。那么对于30+的技术人成长又有什么通用性的指导建议呢?
我总结整理了毕业后的这几年的学习和成长,给出我个人的观点供你参考(仅仅是我个人的观点):构建可复用能力,培养高效能习惯。
因为前台需要面对的是无序的市场变化,因此需要快速响应用户和低成本地试错。而后台面对的是需要稳定有序的生产,因此建设成本高改动成本极大,而且谁也不敢轻易试错创新。如果将企业的效率比作一个马达,那前台和后台就是这个马达上的两个齿轮,前台快速的转动,但是后台却缓慢的转达,这两个齿轮的转速比就不一致,因此无法整体提高企业的效率。
怎么解决这个齿轮转速不一致的问题呢?近年来互联网头部企业开始给我们推广企业中台建设,所谓企业中台就是在刚刚所说的前台和后台之间建了一个缓冲带的桥梁,它提供了可复用的能力,为前台快速响应提供可能性,就像为这两个齿轮添加了润滑剂一样。
通过对企业中台的介绍,我们可以将它的抽象层思想应用到我们技术人的能力储备中,也就是打造一个自身能力的可复用“中台”。
(1)数据结构:基础的数据结构与算法是所有软件行业从业者的必修课,虽然.NET/Java框架已经封装好了很多,但是不了解数据结构和算法,是无法写好优秀的代码的。
(2)面向对象:常见的面向对象设计原则 以及 23种设计模式(创建型、结构型、行为型)也是一个技术人需要掌握的,特别是重构代码的嗅觉和能力关系着你是否能写好Clean Code,这也是我在面试中重点考察初中级工程师的核心标准。如果你刚好对重构有兴趣,又有写单元测试的习惯,那就更好,这个能力真的是通用的,因为大部分的企业都需要你有这个能力。此外,DDD领域驱动设计也是一个值得我们持续学习和研究的知识,它能够指导我们进行微服务和中台的设计和开发,如果你想要做微服务,那么应该大部分的企业都会需要你有这个能力。特别是对于30+的技术人,你写的代码要和20+的技术人的代码有所区别,不再希望是简单的CRUD,那么DDD一定是值得学习的。
(3)开源项目:如果你对开源项目有兴趣,那么你一定会去对有兴趣的开源项目的源代码进行阅读,分析他们的设计和代码好在哪里,用了哪些设计原则和模式,重构了哪些地方,是否可以在自己的项目里面依样画葫芦去设计去重构,这一步关系着你的进阶,也是大部分企业所希望看到的开发者的样子。当你阅读了一些开源项目之后,或许自己也会试着去写一些开源项目比如中间件之类的。阅读开源项目源码,了解优秀设计和代码,参与开源项目并提issue/PR,算是所有技术人的进阶之路吧。
(4)云上技术:可能有很多童鞋会问,为啥要把云技术提到通用的能力层,这是因为云计算技术历经多年发展已成熟并成为一种潮流,它也是企业数字化转型的重要组成部分。所谓产业的发展势必影响个体,未来更多的应用都会运行在云上,架构模式和思维方式也会更多地与云契合共生!因此,越来越多的企业都会上云,基于云服务来设计自己的企业IT架构,将运维工作统统交给云服务,而专注于业务逻辑。所以,了解和善用云上PaaS服务、能够进行云端技术选型 并 运用云原生应用架构 是新时代的技术人应该掌握的基础技术。
最后总结,所谓通用的基础技术能力,其实就像Docker和Kubernetes一样,他们分别对应着容器技术 和 容器编排 领域的事实标准,基础技术能力其实也像是一个标准,无论你深入的语言和行业是什么,这些东西都是标准化的。而不是,今天看到Go受欢迎,啃了一大堆书和教程研究细节,结果去了另一个公司后发现公司技术路线要转Java了。过几个月看到AI火了又去学Python了,结果学完Python发现AI还有一堆数学需要补。30+的阶段,学习任何一个东西都得试着计算时间成本,如果在可复用的技术能力都没掌握的前提下,公司又不会使用这个语言,那还真不建议去深入研究。
(2)可复用的通用业务领域能力
对于一个技术人来说,在技术上的广度和深度都有所触及之后,也需要沉淀一些可复用的领域能力。这里,我想对于.NET技术人来说,业务领域其实更加重要。同样,这里我列举了一些通用的领域能力,供你参考。
(1)业务知识:无论你承认与否,大部分的企业的核心业务只有三部分,他们是 营销(市场)、生产 和 供应链。可能部分企业专注于一个或两个,但并不影响我们对其的了解。只有深入地了解业务背景知识,才能够在企业的数字化转型过程中充分发挥数字化的魔力为业务赋能。当然,你可能会说不同企业的核心业务肯定都会有所不同,这就需要你了解这些业务的共性和差异性了,而这些共性就是你可以平滑过渡的可复用能力。此外,我还将洞察力列入其中,这是因为只有掌握了洞察力,才能在短时间内了解各个业务的本质,帮助你做一些决策。当然,这是一个庞大的话题,在此就不展开了。
(2)行业经验:和业务知识一样,虽然不同行业的行业经验可能适应度不强,但只要你善于总结共性和差异性,就能成为你的可复用能力。
(3)团队经验:软件开发设计是一项需要协作完成的工作,单打独斗是做不了大项目的。因此,如何在团队里做一个好的组员,或者说如何较好地参与协作开发是一个需要学习的过程。而当你已经较好地参与团队的协作之后,你就会得到一些提高以及更大的责任,比如指导初级工程师和进行一些Code Review。当然,你还会得到升为Team Leader管理一个团队的机会。那么,如何做一个Team Leader,如何高效地管理一个团队,处理好与各个组员的关系,这也是一个学问,因为人是这个世界上最复杂的个体。因此,团队经验也是一个最通用的能力,因为有人的地方就有江湖,IT公司最不缺的就是团队。
(4)外语能力:说起外语能力,我想大多数童鞋或许在大学期间都通过了CET-4 或 CET-6,具有了一定的基础。但是,毕业之后,只要你没有进入外企 或者 对英语有要求的企业,想必应该都会大部分还给书本了。不过,软件开发也是一门需要英语的行当,内事不决问百度,外事不决查谷歌,很多时候都需要使用英语去搜索,很多开源软件的wiki以及报错也都是英语,乃至你去提issue写comments或者和github上的基友聊天还是得用英语。如果你的英语不错,你还可以和歪果仁流利地聊天,B格满满。所以,尽可能多锻炼锻炼你的英语吧,以后35岁或许还可以去955或者965的外企,体会work and life balance的快感。
说了这么多通用的领域能力,其实就是希望30+的技术人能够将自己的经验和能力进行一些分类,将那些大部分行业都需要的共性能力进行一层抽象,并重点培养形成自己的能力中台,帮助自己能够在不远的未来适应不同的变化。(其实,对于技术人来说,还有一个通用的能力我没有列出来,那就是产品思维,但是想到可能并不是太通用,因此也就没有列出来。很多时候,做减法,比作加法难。)
我们30+技术人所要培养的所有的能力,其终极目标都应该是 降本(Cost Saving,降低成本)+ 增效(Value Add,增强效益),从而实现自身价值。
你可以将自己看做是一个企业,你所有的努力都是为了让这个企业的效益更好,实现自身的价值,而你实现更高效益的方式就是努力使用和探索成本更低,效益更高的方式和途径,从而让自己一直具有较高的议价权。
说到这里,我很喜欢刘润老师在《五分钟商学院》中提到的一句话,也送给各位童鞋:“每个人都是自己的CEO”!
(1)从依赖到独立的“个人成功”阶段
斯蒂芬认为,在这个阶段,有三个习惯有助于实现独立:首先是积极主动,从“我不得不做”变成“我想做”;其次是以终为始,就是“先在脑海中构建未来,才可能在现实中实现未来”;最后是要事第一,就是“多做重要的事,就会减少紧急的事情”。
画外音:这些习惯个人认为是每个年龄段的技术人需要不断磨练的习惯,从需要有人带的实习生一步一步地成长为可以独立为团队做出贡献的工程师。
(2)从独立的“个人成功”到互相依赖的”公众成功”阶段
斯蒂芬认为,在这个阶段,有三个习惯有助于实现互相依赖:首先是双赢思维,就是“只有我成功还不够,你也要成功才行”;知彼解己,就是“比被别人理解更重要的,是理解比人”;统合综效,就是“你相不相信可以和竞争对手共赢”。
画外音:这些习惯个人认为是30+的技术人更加需要磨练的习惯,作为Senior Engineer、Team Leader或者是架构师的你,如何和团队共成长和同事共赢,是个需要不断思考的问题。
除了上面的六个习惯,第七个习惯就是“不断更新”,习惯的形成不是一蹴而就的,而是需要不断练习的,只有不断练习,才能更加成熟。
斯蒂芬的《高效能人士的七个习惯》一书是一本值得所有技术人,特别是30+的技术人阅读的好书,这些习惯也不是我这里一两段话就可以解释清楚的,希望我可以做一个引子,大家有兴趣的话就可以下来自行去阅读,希望能对大家有帮助!
画外音:如果你连看书的时间都没有,那就花5分钟看看下面我整理的思维导图吧。如果想要查看高清细节,点击本文底部“阅读原文”即可。
李宗盛:人生没有白走的路,每一步都算数。
《区块链项目开发指南》
专注于开发技术与个人成长分享,
做对你有用的公众号!
?点个赞和在看如何?