让人迷茫的三十岁,从专业技能、行业知识和软实力的人才三角谈起
--------我今年三十岁,我很迷茫,不知道未来该选择什么发展方向。
-
一、背景
这是我无意中在社区微信群中看到的一位年轻的开发者说的话,之前他也经常会在技术群中抛出一些有深度有内容的问题,并能积极乐观的进行问题思考和探寻技术解决方案,有时候可能会错误的以为他这样一位热爱学习的开发者,在公司也一定是技术的引领者,对自己的职场规划有着清楚的认识。
所以他抛出这样的问题着实有点意外,不过细想之后,或许也属实正常是。对于30岁左右的开发者来说,从20出头的毛头小伙,逐渐成长为家庭和公司的顶梁柱,如果一直从事技术领域,大概很容易就到了瓶颈期,如下图,一个人的学习能力增长曲线,大概三年或五年左右,增长速度就会逐渐放缓。
(手画的)
到了这个阶段会非常痛苦,如果身处一家优秀的公司还好,有一套完整的体系保证你持续成长,否则就得陷入了吃老本的时期,或许将一直这么平庸的下去,直到被迫退出行业。
而那些不甘如此的优秀者,都渴望去改变现状,他们们往往承受着无比巨大的压力,尤其是互联网技术飞速发展、各种新技术新方法席卷而来,究竟该如何选择技术的发展方向和个人的职场规划,这个问题自然而然就出现在他们面前。
以下是互联网开发者的“人才三角”结构,由专业技能、行业知识和软实力组成。每一个圆环均代表一个知识边界。
-
一、专业技能
专业技能是开发者赖以生存的宝贵技能,而其中开发语言是最重要的一个方面。近年来飞速发展的互联网业,似乎对.NET开发者带来的冲击相当巨大,在许多城市,甚至出现了Java与.NET的招聘信息比例10比1的惊人情况,而在国内互联网公司,似乎除了同程艺龙、蔚来汽车等公司,已经找不出太多叫得上名头的大企业坚持使用.NET技术栈。
但是即便如此,这并没有说明.NET技术已经逐渐落伍,尤其在技术领域,看起来火热的市场,从来也不是一门语言所能主宰。真正优秀的开发者从来不会被语言束缚,事实上虽然掌握一门核心语言非常重要,其次在语言之外的其他专业技能,诸如设计模式和设计原则、对于算法等的理解程度,都是开发者非常重要的能力,对他的价值评估产生了非常深远的影响。
在众多专业技能中,比较争议的大概是数据库、各类组件和其他专业技能,以及DevOps和微服务。首先是这些新概念,铺天盖地而来,让人难以抗拒学习的欲望,甚至不学习,也经常会被人说成知识体系闭塞。但是学习了之后,如果得不到实践,不见得能够带来短期或长期受益。除此之外能够恰到好处的掌握好数据库和各类第三方组件(诸如Redis、Consul)等,虽然能够让开发者获得不少机会,但是却并非每位开发者都有时间或精力了解这么多东西。毕竟每天只有24小时,花时间学习了A组件,往往就得忽略其他组件。而且如果只是浅尝辄止的了解某些组件,倒不如仔细的钻研众多同类组件中的一种。
微服务容易让人陷入知识的海洋无可自拔,在宝玉老师的专栏《软件工程之美》也提到微服务架构并非软件系统的天然演进,要靠组织力量来完成。而在微服务书籍《微服务设计模式》中也提出,微服务实际上应该是一种组织架构形式的体现,而不仅仅只是一种软件架构。为了微服务而微服务,不见得会带来了团队沟通成本的提高,也不见得有利于软件系统的高效迭代。同样,为了DevOps而上容器,这样也不是一种值得推崇的策略。
我把DDD和TDD纳入到专业技能中非常重要的一环。因为DDD是一种非常重要的软件问题分析方法,从宏观来看有点像团队问题分析方法,如果时间有限,大概不太有必要独自研究,毕竟要将其实践下去,还是要更多的依赖团队,不如拉几个同事一起探究。如果没办法将DDD完美的实践下去,也不必苛求,运用好领域的分层思想,可以让软件系统尽可能可控的管理各领域的知识,实现业务知识的沉淀。
TDD看似能够让软件尽可能的减少后期的维护成本,但是要将其实践下去,取决于大环境和个人是否持续不断的刻意练习,而且需要一个漫长的周期。能够刻意练习显然是极好的,相信他一定能给你带来非常巨大的好处。