
三年是个坎。刚入行时你学Spring、学MySQL、学Redis每天都有新东西往脑子里装。三年后你发现CRUD已经闭眼能写业务代码越写越快可心里越来越慌。涨薪靠跳槽面试靠背题技术深度说不清架构设计没碰过。打开招聘软件高级岗位要求“精通分布式”“熟悉源码”“有架构经验”你盯着屏幕发现自己哪一条都够不上。这不是你不够努力是你一直在用同一种方式努力。瓶颈的本质是你用一年的经验重复了三年很多人把瓶颈归结为“技术学得不够多”。于是去学Vue、学Python、学Go学了一圈回来发现Java这边的问题一个没解决。你缺的不是新技术是把已有技术吃透的深度。你用了三年Spring可你知道Bean的生命周期吗你知道循环依赖怎么解决的吗你知道AOP代理在什么情况下失效吗面试官问一句“HashMap为什么线程不安全”你背得出答案却说不出ConcurrentHashMap在JDK 1.8里怎么用CAS加synchronized锁头节点。会用一个框架和懂一个框架中间隔着几百个小时的源码阅读。突破的第一步是停止横向铺摊子开始纵向打井。从“会用”到“懂为什么”是三年到五年的分水岭初级程序员和高级程序员的区别不在写了多少代码在能不能解释代码背后的机制。你写了一个synchronized你知道它是重量级锁吗你知道锁升级的过程吗你知道偏向锁在JDK 15里已经被废弃了吗技术深度不是背出来的是追问出来的。每学一个知识点往下问三层。为什么用B树不用红黑树为什么索引用B树不用哈希为什么MySQL默认隔离级别是可重复读你能回答多少个为什么决定了你能拿多少薪资。源码不是拿来崇拜的是拿来读的。一天读一个类一年就是三百个。三年下来你就是专家。只会写代码的人永远在底层你接了一个需求产品经理说“加个导出Excel功能”。你打开IDE找工具类写Service调Mapper测一下提交。这叫执行。另一个同事接到同样的需求先问“导出多少数据”“要不要分页”“要不要异步”“失败了怎么重试”。然后设计了一个带线程池的异步导出方案加了进度查询接口预留了失败补偿机制。前者是码农后者是工程师。差距不在技术栈在思考的维度。你的价值不在于你写了多少行代码在于你解决了什么问题。业务理解越深你的方案越有分量。技术是为业务服务的脱离业务谈技术就是自嗨。带新人和做分享是最好的学习方式很多人觉得带新人浪费时间。可你试试把你知道的东西讲给别人听。讲一遍你会发现哪些地方你其实没懂。教是最好的学。你给团队做一次技术分享准备PPT的过程逼你把零散的知识串成体系。你写一篇博客逼你把模糊的概念查清楚。你回答一个新人的问题逼你重新审视自己习以为常的做法。影响力不是职位给的是你输出的价值换来的。你在团队里越不可或缺你的议价能力越强。别做那个只会低头干活的人做那个能带着别人一起干活的人。跳槽可以涨薪但涨不了能力三年是个跳槽高频期。很多人靠跳槽涨了百分之三十然后呢新公司干一年发现又到了同样的瓶颈。跳槽解决的是价格问题解决不了价值问题。你值多少钱市场说了算。你能创造多少价值你自己说了算。如果能力没突破跳槽只是把同样的困境换了一个办公室。正确的跳槽姿势是先把手头的项目做到极致把技术深度补上来把系统设计能力练出来然后带着作品和底气去谈。你不是去找一份工作你是去验证自己的价值。那时候你不是被挑是你挑别人。给自己定一个“三年破局计划”别指望明天就脱胎换骨。突破是积累出来的。今年读两个开源项目的源码明年主导一个中型系统的设计后年输出十篇高质量技术文章。每个季度复盘一次我比三个月前多懂了什么我解决了什么以前解决不了的问题我的方案有没有变得更好成长不是线性的是阶梯式的。你可能半年感觉不到变化但一年后回头看你已经站在了不同的高度。三年瓶颈不可怕可怕的是一年又一年你还在原地打转。打开IDE关掉那些重复的业务代码。找一份源码从今天开始读。找一个设计问题从今天开始想。找一个新人从今天开始教。瓶颈不是墙是门。推开它外面是另一片天地。三年不是终点是你真正职业生涯的起点。