我时常会有这样的感觉:自己心里觉得对一个技术点已经掌握了,但是当我试图给别 人讲述的时候,发现并不能轻松自如 、深入浅出地讲出来这就说明了一个问题:自认为掌握了,真实并没有真正掌握,大脑只是对这个技术点建立了一个整体的概念,在一些细节处做了想当然的假设 等到你用语言再来表达的时候就会发现,原来这个假设并不完全成立,是辛辛问题的。估计大家都有这样的经验:如果你能把一门技术通俗易懂地给别人讲明白,那就说明你已经掌握了 这种“转教别人( Teach others )” 的办法属于主动学习,效率是最高的。但是在平日生活当中,很少有机会去给别人讲授的。那怎么办?总不能拉着别人说:“哥们儿,来,我刚学了 Java CAS ,我给你讲讲吧。”别人很有礼貌,耐着性子昕你磕磕绊绊地讲完了 ,然后不知所云前几次还行,次数多了,就对你敬而远之了。既然没法给别人讲,那就退而求真;写吧,把自己的理解写出来。当然不是泛泛地记流水账,或者把几个孤立的点罗列在那里,而是要把思路厘清楚,尤真要写出为什么要有这门技术、这门技术解决了什么问题, 后才是这门技术是怎么使用当你逼着自己去回答这些问题的时候很快就会发现 ,自 己的理解还不够,还需要查找更多的资料。在你从网上查找资料的时候,你会发现,网上的这些文章怎么这么差劲,重复的内容这么多,大部分都是复制、粘贴的大部分都在讲述怎么使用 ,对为什么”从来都是只字不握,或者犹抱琵琶半遮面,羞羞答答地不说出来这个整理资料和思考的过程是很珍贵的,只离这样才能把信息变成仰自身的知识。如果实在搞不定,就带着问题去论坛提问,去QQ群发言,找大牛请教,总是可以解决的。举个例子,你接触到一个新的知识点: Java 动态代理,你也看了书或视频中的代码 知道了这个技术点是怎么使用的,接下来想要写一篇文章,首先要努力阎明的问题就是“为什么要用 Java 动态代理”。这玩意儿到底要干吗?我已经知 道了 能够对一个类进行增强,还是在运行时进行增强的,但是增强一个类有什么用处?我完全可以新写一个类对原有的类进行增强啊?为什么要在运行时进行增强呢? 如果你顺着这个思路挖掘下去,则会在通道的尽头找到一个宝贝: AOP具体到技术层面,还有一个问题,就是为什么 Java 动态代理只能对 interface 进行操作,而不能对 class 进行操作?这个问题如果也深挖下去,那么你会发现另一个宝贝:动态字节码的生成,继续深挖就能看到 ASM CGLib 这样的东西,看到它们怎么在内存中操作 .class 文件的字节码。至于字节码的格式是什么样子的,只好去看看 Java 虚拟机了。到了最后,你也许会体会到,原来 Java 是一门静态语言,在运行时不能对现有的方法逻辑进行修改,不能添加方法,所以必须用别的手段,如 ASM 、动态代理等创建一个新类来做一点“额外”的事情。赶紧写一篇文章吧,把挖掘的结果记录下来,别人只学会了什么是 Java 动态代理,这只是冰山一角,而你则看到了整座冰山。人可能要问了:我也可以按照这个思路去学习,为什么要写下来呢?原因很简不写出来,很容易肢弃深度思考 你会觉得,我已经知道是怎么回事儿了一一真实一些关键的细节被大脑给忽略了
我们已经进入了一个碎片化的时代,我们的大脑已经养成了碎片化的习惯,一天不看 碎片化的信息就觉得不舒服,这样下去会慢慢地丧失深度思考的能力写作会逼着你去思考,梳理知识体系,防止自己被碎片所填满真实很多人都知道写作是一件很好的事情,就是犯懒,执行不下去。还是行动起来吧!逼自己,对自己狠一点!有自制力的人、能够坚持的人才更高可能成功!