程序员为什么会忧虑自己的未来?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序员为什么会忧虑自己的未来?相关的知识,希望对你有一定的参考价值。


从去年开始,我参加了一些分享交流,也对外发过一些自己对工作所遇问题的思考。不少程序员加我好友咨询问题,几乎每个人问的问题都跟职业规划有关。这提醒了我,其实我自己也一直在思考同样的问题并尝试规划未来。于是想和大家分享一下自己在这方面的感悟。

本文仅从我自己的角度来剖析对程序员职业规划的看法,并不全面。而下文中提到的程序员群体也泛指在一线具体执行编码任务的程序员,不包含一些高精尖技术岗位的专业技术人才或是已经有自己明确职业规划,已经进阶成功的工程师。

什么引发了焦虑?

互联网是一个新兴但高速发展的行业。新兴意味着没有那么多的职场楷模给新人指明方向,也没有一套公认的稳定可复制的职业发展路线。高速发展意味着变革与竞争,大量新人因为行业红利涌入,你无时无刻要跟一群优秀的热血青年同场竞技。

互联网行业工作强度很大,而中国的互联网从业者更忙。程序员更是战场中的排头兵,身体健康的透支导致很难长期抗战。当你意识到自己跟不上节奏的时候,不管是出于对身体状况的担忧,还是对未来潜在威胁的恐惧,又怎会不感到焦虑呢?

而程序员的职业特性加剧了这种焦虑,主要表现在以下几方面:

一、程序员职业复利性较低。

什么叫复利性?

就如同利息的计算方法一样,在本金相同的情况下,复利获得的利息回报要高于单利,而年期越长,复利效应越高。职业一样有复利效应,一个复利高的职业在职业生涯中后期会展现出越来越高的价值。医生、律师都是复利性很高的职业。

而程序员职业复利性较低,主要有两个原因:

  1. 专业性强,通用性差。不同技术种类有着自己的技术栈,共用的只有设计思想、编程范式,基础技术等通用知识。

  2. 在没有明确规划的情况下,大多数程序员日常工作积累的不是通用知识与综合能力,而仅仅是某项技术的熟练度与经验。这是根本原因。

这造成了一个问题——当职业生涯遇到瓶颈时,程序员很难完成一次完美的进阶。让我们分析下最常见的三类方案:

  1. 技术职位之间的转岗。这是最普遍的一种情况,androidios,后端转前端等都在此列。虽然设计原则、编程范式等技术知识是通用的,但作为一线的执行者,技术的熟练度才是影响你工作效率的最大因素,你必须对技术栈非常熟悉才能体现工作的专业度。 转岗往往是无奈之举。

  2. 技术转产品/运营岗。很多工程师抱怨产品经理设计的产品有问题,逻辑不严密,用起来很别扭。但让工程师做产品,问题一般会更多。为什么呢?最大的原因在于程序员的思维模式或多或少会受到编程的影响,偏向理性与具象化,缺少了感性的察言观色以及换位思考的能力。设计好一个产品,逻辑严密只是条件之一,但并不是最重要的条件。产品经理需要从用户的行为中挖掘出用户真正的需求,提炼归纳并设计成一个可用的产品。这是大多数程序员很难做好的事情。

  3. 技术转管理岗。BAT都有自己的M岗位,高工都可以选择是继续走技术路线还是尝试走管理路线。很多程序员安慰自己,哪天真写不动代码了,那我就做技术经理吧。但我认为管理岗的转变比前面两类都难。管理是一门很深的学问,执行和管理是两回事,需要从根本上改变思维模式。评判一个工程师的好坏可以看工程师的产出,而评判一个管理者的好坏在于整个团队的产出和效率。很多优秀的程序员自己技术能力很强,却很难带领整个团体一起向前进。

二、程序员职业的壁垒没想象中高,鲁棒性低。

鲁棒性也指抗变换性,一个好的职业需要有高的鲁棒性。大部分程序员把自己的职业与某项技能绑定。做过编程的都知道,一个高耦合低抽象的编码鲁棒性一定低。互联网行业变化太快,回头看下诺基亚的发展,Windows桌面应用开发,整个行业如同大浪淘沙。随着云平台的崛起,公有化平台的发展,API服务的开放,可以预见从业者的工作效率会大幅提高,同时很多职业可能会再次洗牌:基础运维工程师,DBA,基础算法工程师,安全工程师,图像算法工程师,数据工程师等等都在此列。

从另外一个角度来说,假设你运气很好,选择了一项长期热门的技术比如Web前端开发。但是因为行业红利太高,无数聪明、努力、上进的热血青年涌入其中。随着社区的发展,在线教育的普及,达到同样熟练度的时间越来越短,而热门互联网技术的发展是以月计,你需要花费大量的时间去学习积累新技术。新人与你的差距会越来越小,你会随时面临被超车的局面。这意味着,很多时候即使你认为自己经验更丰富,能力更强,但你却得不到理想的职位及薪资待遇。

三、程序员职业能撬动的价值有限。

这个概念受启发于《格鲁夫给经理人的第一课》一书。格鲁夫试图定量的分析经理人的产出,于是提出了一个公式:经理人的产出 = 他直接管辖部门的产出 + 他间接影响所及部门的产出。为了定量的分析职业的价值,我也引入了一个公式:产出的价值 = 他自身的产出 + 他直接影响部门的产出 + 他间接影响所及部门的产出

职业能影响的人越多,创造的价值越高,职业的上限价值也越高。

互联网行业的供求关系以及价值体系,造成了一个现象:程序员供不应求使其入行薪资高,但是工作五年以上薪资趋向于稳定。对于绝大部分公司的绝大部分职位,当熟练度和经验达到某一个阈值的时候,选择成本是趋同的,自身效率提高所能带动的价值提高已经很有限。正因为如此,从业者在享受了薪资高速增长之后,很难接受薪资增幅趋缓,职业生涯遇到瓶颈引发焦虑。

薪资发展

我的规划是什么?

分析了这么多,我最想表达的意思是:所谓的稳定,是最大的谎言。在高速发展的行业,根本没有一个稳定的职业。解决焦虑的最终办法是重新定位自己的职业生涯,尽量不以所谓的熟练度和经验作为自己的竞争力,将自己的职业生涯押注在某项低门槛的技术上,而是根据自身的情况,持续不断提高综合竞争力,加强自己的不可替代性。

首先我会分析自己的特点,这是建立与他人的差异性和自己独特标签的关键所在,也是最值得加强的地方。我最大的特点是什么?

  1. 有野心。我不想选择一种得过且过的生活,而会选择一个产出价值更高的事情来做,影响更多的人,创造更高的价值。

  2. 会沟通。我沟通能力不错,既可以对外谈合作,又可以对内做管理。这会是我相对一般技术型程序员一个很大的不同。

  3. 专业强。在专业技能层面我有较深的认识与理解,虽然谈不上顶尖,但我知道怎么运用自己的知识能力找到最适合现状的方法解决几乎所有日常问题。技术积累永远是我最核心的竞争力。

知道自己特点之后,我会以此为基础来增强自己的不可替代性。不可替代性不仅仅只是基于个人的能力,还有这几点是需要日常注意积累的:

  1. 健康的身体。在经历过一次生病后,我更加意识到拥有一个健康的身体才是最重要的。积极健身可是我们青橙员工的必备素质。

  2. 思想与格局的高度。思想的高度并不是一朝一夕就能拔高的,而是在经历了来自工作与生活的各种挑战之后,静下心来反思总结,从而慢慢积累并提升。

  3. 人脉与影响力。乐于记录和分享自己的工作感悟。抓住向其他人学习的机会,比如参加一些会议或交流,不管是同行业还是其他行业的,都是很有必要的。人脉和影响力的积累与格局的高度也是相辅相成的,与某些方面比自己优秀的人交流往往会收获满满。

当我有了明确的方向并且每天都能看到自己进步的时候,就会对未来充满憧憬。我给自己未来的定位是做一名解决者。何谓解决者?面对未知或已知的问题,知道如何分析本质原因,制定并实施解决方案。附加打油诗一首:

文能设计定需求,武可写码做架构。

进做招商引融资,退做大V占风口。

产品体验包上线,还要招人带节奏。

总结

每个人的情况都是不同的,可以做出的选择也有无数种。而我对这个问题的认知带有很强的自我局限性,随着自身的发展也许将来我的想法也会和这篇文章有出入。但是分析问题的方法是类似的,希望你在看完后会对职业规划这件事有新的思考,我的知乎名是陈驰远,欢迎加我讨论。如果你觉得文章让你有所收获,转发和打赏都是对我的鼓励。

工程化专题

工欲善其事必先利其器,不管是小白,还是资深开发,都需要先选择好的工具。提升开发效率和团队协作效率,让自己有更多时间来思考

面向人群:具有1-5年工作经验的人群

Maven

技术分享图片

生成可执行jar、理解Scope生成最精确的jar

类冲突、包依赖 NoClassDefFoundError问题定位及解决

架构师必备之Maven生成Archetype

Maven流行插件实战、手写自己的插件

Nexus使用、上传、配置

对比Gradle

Jenkins

技术分享图片

搭建Jenkins自动部署环境

Jenkins集成maven、git实现自动部署

testpreproduction 多环境发布

Jenkins多环境配置、权限管理及插件使用

Sonar

技术分享图片

使用Sonar进行代码质量管理

关于代码检查工具FindBugs/PMD的运用

SonarQube代码质量管理平台安装及使用

使用Jenkins与Sonar集成对代码进行持续检测

Idea与Sonar集合的使用

Git

技术分享图片

什么是Git以及Git的工作原理

Git常用命令Best practise(避坑教学)

Git冲突怎么引起的,如何解决

架构师职责:Git flow规范团队git使用规程

团队案例分享(买不到才是最贵的)

技术分享图片

技术分享图片

1、掌握自动化部署技能;

2、对于来时小白可以快速提升

3、对于资深开发人群可以加分

源码分析专题

详细介绍源码中所用到的经典设计思想,看看大牛是如何写代码的,提升技术审美、提高核心竞争力。

1-10年工作经验的人群

帮助大家寻找分析源码的切入点,在思想上来一次巨大的升华。知其然,并知其所以然。把知识变成自己的

常用设计模式

技术分享图片

1、Proxy 代理模式

2、Factory 工厂模式

3、Singleton 单例模式

4、Delegate 委派模式

5、Strategy 策略模式

6、Prototype 原型模式

7、Template 模板模式

技术分享图片

Spring5

技术分享图片

1、IOC容器设计原理及高级特性

2、AOP设计原理

3、FactoryBean与BeanFactory

4、Spring事务处理机制

5、基于SpringJDBC手写ORM框架

6、SpringMVC九大组件

7、手写实现SpringMVC框架

8、SpringMVC与Struts2对比分析

9、Spring5新特性

技术分享图片

技术分享图片

MyBatis

技术分享图片

1、代码×××

2、MyBatis关联查询、嵌套查询

3、缓存使用场景及选择策略

4、Spring集成下的SqlSession与Mapper

5、MyBatis的事务

6、分析MyBatis的动态代理的真正实现

7、手写实现Mini版的MyBatis

技术分享图片

技术分享图片

分布式架构

迎接高并发大数据的挑战,从深度到广度完善知识体系,成为下一个互联网高薪人才。

理论结合实战,透彻理解分布式架构及其解决方案。

面向人群

1、工作1-5年需要突破瓶颈;

2、传统行业转型进入互联网行业的人群

分布式架构原理

技术分享图片

1、分布式架构演进过程

2、如何把应用从单机扩展到分布式

3、CDN加速静态文件访问

4、系统监控、容灾、存储动态扩容

5、架构设计及业务驱动划分

6、CAP、Base理论以及其应用

分布式架构策略

技术分享图片

1、分布式架构网络通信原理剖析

2、通信协议中的序列化和反序列化

3、基于框架的RPC技术Webservice/RMI/Hessian

4、深入分析Zookeeper在disconf配置中心的应用

5、基于Zookeeper实现分布式服务器动态上下线感知

6、深入分析Zookeeper Zab协议及选举机制源码解读

7、Dubbo管理中心及监控平台安装部署

8、基于Dubbo的分布式系统架构实战

9、Dubbo容错机制及高扩展性分析

分布式架构中间件

技术分享图片

1、分布式消息通信ActiveMQ/Kafka/RabbitMQ

2、Redis主从复制原理及无磁盘复制分析

3、图解Redis中AOF和RDB持久化策略的原理

4、MongoDB企业级集群解决方案

5、MongoDB数据分片、转存及恢复策略

6、基于OpenResty部署应用层nginx以及Nginx+lua实践

7、Nginx反向代理服务器及负载均衡服务配置实战

8、基于Netty实现高性能IM聊天

9、基于Netty实现Dubbo多协议通信支持

10、Netty无锁化串行设计及高并发处理机制

分布式架构实战

技术分享图片

1、分布式全局ID生成方案

2、Session跨域共享及企业级单点登录解决方案实战

3、分布式事务解决方案实战

4、高并发下的服务降级、限流实战

5、基于分布式架构下分布式锁的解决方案实战

6、分布式架构下实现分布式定时调度

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

微服务架构专题

技术分享图片

围绕微服务的通用模式,讲解Spring Cloud的常见用法及原理。让微服务的开发更加方便、快捷,让微服务应用更加稳定、可用。

理论结合实战,透彻理解分布式架构及其解决方案。

面向人群

1、工作1-5年需要突破瓶颈

2、传统行业转型进入互联网行业的人群

在技术深度和技术广度上得到飞跃的提升。成为互联网行业所需要的IT型人才

微框架

技术分享图片

1、与微服务之间的关系

2、 热部署实战

3、核心组件Starter、Actuator、AutoConfiguration、Cli

4、集成Mybatis实现多数据源路由实战

5、集成Dubbo 实战

6、集成Redis缓存实战

7、集成Swagger2构建API管理及测试体系

8、实现多环境配置动态解析

Spring Cloud

技术分享图片

1、Eureka注册中心

2、Ribbon集成REST实现负载均衡

3、Fegion声明式服务调用

4、Hystrix服务熔断降级方式

5、Zuul实现微服务网关

6、Config分布式统一配置中心

7、Sleuth调用链路跟踪

8、BUS消息总线

9、基于Hystrix实现接口降级实战

10、集成Spring Cloud实现统一整合方案

Docker虚拟化

技术分享图片

1、Docker的镜像、仓库、容器

2、Docker File构建LNMP环境部署个人博客Wordpress

3、Docker Compose构建LNMP环境部署个人博客Wordpress

4、Docker网络组成、路由互联、Openvswitch

5、基于Swarn构建Docker集群实战

6、Kubernetes 简介

漫谈微服务架构

技术分享图片

1、SOA架构和微服务架构之间的区别和联系

2、如何设计微服务及其设计原则

3、解惑Spring Boot流行因素及能够解决什么问题

4、什么是Spring Cloud,为何要选择Spring Cloud

5、基于全局分析Spring Cloud各个组件所解决的问题

技术分享图片

深入浅出性能优化

技术分享图片

理解性能优化

性能基准

性能优化到底是什么

衡量维度

JVM调优

知其然,知其所以然

详解什么是JVM运行时数据区

详解什么是JVM内存模型JMM

详解GC可达

详解各垃圾回收器使用场景

实战MAT分析dump文件

Tomcat调优

How if works探查Tomcat的运行机制及框架

分析Tomcat线程模型

Tomcat系统参数认识及调优

基准测试

mysql调优

理解MySPL底层B+Tree机制

SQL执行计划详解

索引优化详解

SQL语句优化

技术分享图片

电商项目实战

技术分享图片

大型电商分布式系统应用实践,利用云服务器搭建真实的开发和部署环境,千人在线参与开发。

由浅入深的,带你从零到项目发布上线与运维,让你体验真实的企业级项目开发过程,掌握大牛的编码思维、经验与技巧。

1、具有1-5年工作经验的人群。

2、具备独立开发和搭建分布架构系统的能力。

3、学习完后相当于具备2年以上互联网开发经验。

用户认证

用户注册

SSO单点登录

第三方登录

UI页面拦截

业务拦截

技术分享图片

店铺、商品

聚合检索

动静分离

店铺管理

商品管理

技术分享图片

技术分享图片

订单、支付

订单号统一生成规则

下单流程管理

库存管理

购物车

优惠券支付

积分支付

第三方支付

技术分享图片

数据统计分析

用户行为分析

行业分析

区域分析

技术分享图片

通知推送

融云推送

消息中间件

用户群聊

点对点聊天

文件断点续传

技术分享图片

想要学习以上课程加Q3064833410咨询

java架构多线程高性能交流群:454377428


以上是关于程序员为什么会忧虑自己的未来?的主要内容,如果未能解决你的问题,请参考以下文章

有时间担心中年危机,还不如用忧虑的时间来提升自己——再论程序员该如何避免所谓的中年危机

Notes 20180506 : Java程序设计语言概述

最好的教养,是父母不放弃自我成长

做了两年程序员对未来迷茫怎么办?

J1. Java程序设计语言概述

作为一个快30岁的程序员,面试碰壁,感觉内心很慌,对未来更是迷茫,有什么好的建议?