很多程序员工作几年后会有一种奇怪的感觉。新框架学不动。新技术名字听过但不想碰。每天重复写差不多的业务代码。面试时发现简历上的技能栈越来越虚。你开始怀疑自己是不是到了天花板。
这种感觉很真实。它不是能力问题,而是方法没有跟上变化。
技术本质上没有停滞。从JDK的小版本升级到微服务架构的演进,从数据库到缓存再到消息队列,每年都有实质性迭代。你之所以感觉停滞,是因为你从一个使用者变成了一个旁观者。你只负责调API、配参数、排时序,却再没有深究过一行核心代码。
有人推荐读源码。你打开Github,点开master分支,满屏的抽象类和设计模式直接劝退。代码是读了的,但合上电脑就忘。这就是问题的关键——读源码不是为了记住每行代码,而是为了理解设计者的决策逻辑。
这时候可以试试费曼学习法。这个方法说穿了很简单。你学一个东西,假装要把它讲给一个完全不懂的人听。讲不下去的地方就是你没有真正理解的地方。读源码也一样。你不用把整个框架啃完。你只挑一个核心功能。比如读Spring的Bean生命周期。比如读Netty的零拷贝。比如读Redis的跳表。
具体做法就三步。第一步,找一条最简路径。不要从顶层接口读起。先找到那个核心功能的入口方法。比如你想理解线程池,就去读ThreadPoolExecutor的execute方法。从调用链的第一个断点开始跟。遇到不认识的类就停下来查。不要跳。这一步慢一点没关系。慢就是快。
第二步,用自己的话写一篇200字以内的注释。注意是写中文,要像跟同事解释一样直白。比如“这个方法先检查当前线程数是否少于核心线程数,是就往队列里塞任务,不是就尝试创建新线程”。写完你会发现有些地方自己都说不通。比如“为什么塞任务之前还要检查队列状态?”“为什么创建线程失败后还要再次入队?”这些说不通的地方,就是你真正需要深挖的缝隙。
第三步,把这些缝隙填上才算真正读懂。这个阶段你可以去参考博客或者问AI。但最终一定要用自己的话把整个流程理顺。不要抄。抄了不算会。什么时候你能对着空白的编辑器,不用参考任何资料,把这个过程用流程图或者文字复述出来,才算掌握。
很多人觉得这样读源码太慢。一个方法读一天,一个框架读一年。但你要想清楚一个问题。你读源码是为了突破瓶颈期,不是为了回答面试题。面试题网上有标准答案,背两天就行。但瓶颈期来自于思维定势。你一直停留在应用层,一直用别人的封装,你的思维层级就永远上不去。你读一个底层实现,哪怕只是一个小环节,也能体会到设计者遇到的约束和取舍。这种体验是读任何文档都替代不了的。
读一个月试试。你心态会变。以前遇到Bug你会急着搜资料复制粘贴。现在你会先想“这个Bug到底是框架的哪个环节没处理好”。这种追问就是向上走的标志。
技术世界没有真正的停滞期。只有重复做表面工作的人。费曼学习法不神奇。它只是逼你面对真相。你假装教别人,就假装不了自己懂。读源码假装自己看过,也骗不了自己。真的把一行代码讲清楚,比翻完整个项目有用一百倍。
从今天开始。选一个你每天都在用但从未深究的库。找到它的核心类。打开它。开始讲给自己听。
夜雨聆风