同样的工作年限,同样的技术栈,有人月薪一万原地踏步,有人三万还在往上走。这中间的差距,真的只是运气吗?我观察了身边几十位Java程序员,发现月薪一万和三万之间,隔着五道坎。
一、解决问题还是制造问题
月薪一万的程序员,接到需求就开始写代码。月薪三万的程序员,接到需求先问三个问题:这个需求的业务背景是什么?有没有更简单的实现方式?上线后怎么监控和回滚?
前者是执行者,后者是决策者。一个只会按图索骥,一个能给出多种方案并分析利弊。比如同样是做导出功能,一万的程序员直接查全表写Excel,三万的会考虑分页查询、异步导出、限流保护、失败重试。代码还没写,差距已经出来了。
二、面向搜索引擎还是面向源码
遇到报错,月薪一万的程序员复制异常信息到搜索引擎,找到相似答案就改,改完不报错就收工。月薪三万的程序员会看堆栈、读源码、定位根因,改完还要想:为什么这里会出问题?同类问题还有哪些地方可能触发?
我见过一个月薪三万的同事排查OOM,从jstack看到线程池队列堆积,再追到上游接口超时,最后定位到一个没设超时时间的HTTP客户端。整个过程像破案,而月薪一万的程序员可能只会加个-Xmx参数了事。前者解决一类问题,后者只解决一次问题。
三、写代码还是写设计
月薪一万的程序员拿到类图就开始写Service,三万的程序员会先画时序图。前者关心“怎么实现”,后者关心“怎么分层、怎么解耦、怎么扩展”。
举个例子:订单超时自动取消。一万的程序员写个定时任务扫全表,三万的会考虑用延迟队列还是时间轮,消息丢了怎么办,集群环境下怎么防止重复执行,取消后库存怎么回滚,要不要发通知。同样是CRUD,一个写完就完事,一个写完还能扛住双十一。
四、被动成长还是主动破局
月薪一万的程序员等公司培训、等师傅带、等项目练手。月薪三万的程序员自己找项目练、自己读源码、自己写博客总结。
我认识一位从一万五跳到三万的哥们,他的方法很笨:每天下班后读一小时Spring源码,坚持了八个月。面试时面试官问Bean的生命周期,他从refresh()方法一路讲到getBean()的每个步骤,连三级缓存解决循环依赖的细节都画出来了。面试官当场说:“你是我见过对Spring理解最深的候选人。”这不是天赋,是下班后的时间堆出来的。
五、技术深度还是业务广度
月薪一万靠技术,月薪三万靠技术加业务。纯技术能让你拿到一万五,但想突破三万,必须懂业务。
什么是懂业务?同样是做支付,一万的程序员只知道调微信SDK,三万的知道费率怎么算、对账怎么做、退款时效怎么控制、资金池怎么合规。他能跟产品经理讨论方案,能跟财务对账,能跟运营分析转化率。技术是工具,业务是方向,只有工具没有方向,永远在底层打转。
六、那道看不见的分水岭
说到底,月薪一万和三万的核心差距在于:一个在完成任务,一个在创造价值。
完成任务的人,代码写完就结束了。创造价值的人,代码写完只是开始——他关心性能、关心稳定性、关心业务增长、关心团队效率。前者是可替代的螺丝钉,后者是稀缺的问题解决者。
技术这条路没有捷径,但有方向。如果你现在月薪一万,别急着抱怨,先问问自己:我写的代码,敢不敢让全公司 review?我做的系统,敢不敢在面试时讲半小时?如果答案是否定的,那三万月薪还离你很远。
从一万到三万,差的从来不是运气,而是每一天的选择。