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