技术人的持续学习成长之路
近期有几位童鞋在公众号后台留言,希望我指点一下如何从码农进阶为大佬。我想说的是,我不是大佬,因此无法给你建议。但是,对于学习成长提高自己这方面,我想我应该还是有一点发言权。因此,我录制了一期骚年快享的视频《技术人的持续学习成长之路》,本文是该视频的文字稿,希望对你有帮助!
近期有几位童鞋在公众号后台留言,希望我指点一下如何从码农进阶为大佬。我想说的是,我不是大佬,因此无法给你建议。但是,对于学习成长提高自己这方面,我想我应该还是有一点发言权。因此,我录制了一期骚年快享的视频《技术人的持续学习成长之路》,本文是该视频的文字稿,希望对你有帮助!
1、技术人成长之路是什么样的
理想中的样子
大多数技术人理想中的进阶路线都会像上图一样,从毕业之后的初级码农、中级码农、高级码农 再到 技术经理 甚至CIO/CTO。不过,正如这个圆圈一样,越往上进阶圈子越小,里面的人也就越少。我们大部分人还是在外层的三个圈子(初级、中级、高级码农)里边奋斗。
现实中的样子
现实中呢,可能随着年龄的增大,生活的压力也随之增大,时间管理的效率也随之降低,伴随而来的就是学习提高的欲望逐渐消灭。所以,可能身边的人大部分都有35岁的危机焦虑,因此可能会选择去送外卖、摆地摊之类的。
虽然大部分的时候都是程序员的自嘲打趣,但是现实就是这样,本质上还是处于信息爆炸时代的技术人们充满了焦虑,不时发出:“我太难了”!
2、你的焦虑,企业早就在经历
其实你的这些焦虑,大部分的企业早就开始在经历了。近年来,不确定性和不可预测性不断冲击各个行业的企业,企业的高层管理者们焦虑倍增。特别是在今年的疫情之下,大部分中小企业的高官们比你还难。但是,他们越来越发现在企业前方市场和企业内部支撑之间的一个冲突,那就是市场的无序与企业的有序之间的矛盾。
因为前台需要面对的是无序的市场变化,因此需要快速响应用户和低成本地试错。而后台面对的是需要稳定有序的生产,因此建设成本高改动成本极大,而且谁也不敢轻易试错创新。如果将企业的效率比作一个马达,那前台和后台就是这个马达上的两个齿轮,前台快速的转动,但是后台却缓慢的转达,这两个齿轮的转速比就不一致,因此无法整体提高企业的效率。
怎么解决这个齿轮转速不一致的问题呢?别急,我们先来看看在软件设计领域中的解决方案。我们往往会听到很多大佬说:“任何问题都可以通过添加一个抽象层的方式来解决,如果解决不了,那就再加一层。”
嗯,好像有那么几分道理!我们来看看下面这个图,假设我们要自己实现一个ASP.NET Core迷你框架,针对HttpContext对象,如何适应匹配多个不同的Web Server(比如Kestrel/IIS等)呢?没错,为HttpContext和Web Server之间增加一个抽象的Feature层,不同的Web Server只需要实现这个Features接口就可以对HttpContext进行处理了。
嗯,所以近年来互联网头部企业开始给我们推广企业中台建设,所谓企业中台就是在刚刚所说的前台和后台之间建了一个缓冲带的桥梁,它提供了可复用的能力,为前台快速响应提供可能性,就像为这两个齿轮添加了润滑剂一样。
下图就是一个典型的电商业务中台,里面有我们所熟知的而一些可复用的能力,比如商品中心、用户中心、订单中心等等,无论前台业务线如何扩展,都是可以复用这些能力的。
3、打造自身能力的可复用“中台”
通过对企业中台的介绍,我们可以将它的抽象层思想应用到我们技术人的能力储备中,也就是打造一个自身能力的可复用“中台”。
从上图可以看到,我们所具有的某个具体编程语言的使用开发经验及原理深入了解知识、桌面/Web/App等不同类型的项目开发经验、不同行业的行业经验他们都是针对某个具体领域的,可能不是那么的可复用(这里的可复用是指可以平滑过渡到新的行业新的岗位)。而最上层我们所面临的的确实不断在变化的行业和不同的岗位,就会出现类似于刚刚提到的两个齿轮不一致的问题,也会让我们对未来充满焦虑。因此,从企业中台抽象层给我的启发,就是持续学习,刻意练习,建设自身的“能力中台”,而且这个“能力中台”一定要是可复用和可迁移的。
我将这个抽象层大致分为了两类能力:一是基础的技术能力,作为一个技术人,技术是所有能力的前提;二是通用的领域能力,这个能力可能既包含硬能力也包含软能力;
基础的技术能力
对于一个技术人来说,技术肯定是安身立命的基础。这里我选择了一些可复用可迁移的技术能力点,供大家参考。
(1)数据结构:基础的数据结构与算法是所有软件行业从业者的必修课,虽然.NET/Java框架已经封装好了很多,但是不了解数据结构和算法,是无法写好优秀的代码的。
(2)面向对象:常见的面向对象设计原则 以及 23种设计模式(创建型、结构型、行为型)也是一个技术人需要掌握的,特别是重构代码的嗅觉和能力关系着你是否能写好Clean Code,这也是我在面试中重点考察初中级工程师的核心标准。如果你刚好对重构有兴趣,又有写单元测试的习惯,那就更好,这个能力真的是通用的,因为大部分的企业都需要你有这个能力。
(3)开源项目:如果你对开源项目有兴趣,那么你一定会去对有兴趣的开源项目的源代码进行阅读,分析他们的设计和代码好在哪里,用了哪些设计原则和模式,重构了哪些地方,是否可以在自己的项目里面依样画葫芦去设计去重构,这一步关系着你的进阶,也是大部分企业所希望看到的开发者的样子。当你阅读了一些开源项目之后,或许自己也会试着去写一些开源项目比如中间件之类的。阅读开源项目源码,了解优秀设计和代码,参与开源项目并提issue/PR,算是所有技术人的进阶之路吧。
(4)云上技术:可能有很多童鞋会问,为啥要把云技术提到通用的能力层,这是因为云计算技术历经多年发展已成熟并成为一种潮流,它也是企业数字化转型的重要组成部分。所谓产业的发展势必影响个体,未来更多的应用都会运行在云上,架构模式和思维方式也会更多地与云契合共生!因此,越来越多的企业都会上云,基于云服务来设计自己的企业IT架构,将运维工作统统交给云服务,而专注于业务逻辑。所以,了解和善用云上PaaS服务、能够进行云端技术选型 并 运用云原生应用架构 是新时代的技术人应该掌握的基础技术。
最后总结,所谓通用的基础技术能力,其实就像Docker和Kubernetes一样,他们分别对应着容器技术 和 容器编排 领域的事实标准,基础技术能力其实也像是一个标准,无论你深入的语言和行业是什么,这些东西都是标准化的。
通用的领域能力
对于一个技术人来说,在技术上的广度和深度都有所触及之后,也需要沉淀一些可复用的领域能力。同样,这里我列举了一些通用的领域能力,供你参考。
(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的快感。我就是从work and life balance的某外企出来的,那真是一个很nice的舒适区。
说了这么多通用的领域能力,其实就是希望我们技术人能够将自己的经验和能力进行一些分类,将那些大部分行业都需要的共性能力进行一层抽象,并重点培养形成自己的中台,帮助自己能够在不远的未来适应不同的变化。其实,对于技术人来说,还有一个通用的能力我没有列出来,那就是产品思维,但是想到可能并不是太通用,因此也就没有列出来。很多时候,做减法,比作加法难。
4、我的一点建议
对于1~3年工作经验的童鞋:基础不牢,地动山摇,顺便养成持续学习的习惯!
这个阶段的童鞋最容易浮躁,因为在这个架构师课程随手可及的时代,往往会抓不住重点从而眉毛胡子一把抓,最后拣了芝麻丢了西瓜。因此,应该静下心来,不浮躁,努力夯实技术基础。
对于3~5年工作经验的童鞋:在深入技术的同时逐渐重视可复用可迁移能力的建设,然后想好自己未来想要走的方向,想好了,那就坚定地走!
这个阶段的童鞋最容易焦虑,因为在这个生活压力倍增而收入却没法匹配增长的时代,程序员界的前浪往往会被后浪拍在沙滩上。而一旦被拍在沙滩上之后,很多人就再也起不来了,不是因为他们起不来,而是已经失去了起来的动力。
对于5年以上工作经验的童鞋:不好意思,我没法给你建议!因为我2015年研究生毕业,到现在也才5年工作经验。因此,我只给我认知和能力范围之内的建议。
5、小结
上面零零散散说了很多,但是我最想提的一句话是:你培养的所有的能力,其终极目标都应该是 降本(Cost Saving,降低成本)+ 增效(Value Add,增强效益/效率),从而实现自身价值。
你可以将自己看做是一个企业,你所有的努力都是为了让这个企业的效益更好,实现自身的价值,而你实现更高效益的方式就是努力使用和探索成本更低,效益更高的方式和途径,从而让自己一直具有较高的议价权。
说到这里,我很喜欢刘润老师在《五分钟商学院》中提到的一句话,也送给各位童鞋:“每个人都是自己的CEO”!
让我们一起持续地用心经营自己,因为认真走过的路,每一步都算数!
6、彩蛋
后续我也会单独开一个专题来聊聊可复用可迁移的领域能力建设,暂且叫它“业务架构师之路”吧!